您的位置:首页 > 产品设计 > UI/UE

Android中的UI细节

2016-04-14 13:01 399 查看
1、让一张图片与一行文字上下居中对齐,可以对图片设置alignTop 和 alignBottom于文字,但要保证图片的高度小于文字,否则会被压缩。

2、EditText好用的属性:maxLength(设置最多输入多少个字符,在代码中动态设置时需要使用一个过滤器,没有很直接的set方法)

editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)});

3、CheckedtextView : 继承TextView并实现Checkable接口。当ListView的setChoiceMode方法并设定为CHOICE_MODE_SINGLE

或者 CHOICE_MODE_MULTIPLE,而非CHOICE_MODE_NONE时,使用此类是很有用的。

4、有效的资源id是从1开始的,id <= 0说明是无效的、找不到的资源。

5、linearLayout 中 weight的 使用说明:

控件的实际宽度(高度)= 控件的width(height)值+(该控件的weight值/所有控件的weight的和)×额外的空间

额外的空间 = 手机的宽度(高度)- 所有控件的宽度(高度)

6、TextView 动态设置字体大小和单位:mFootNumberView.setTextSize(TypedValue.COMPLEX_UNIT_DIP,16);

设置行间距:

setLineSpacing
android:lineSpacingExtra   设置行间距,如”3dp”。
android:lineSpacingMultiplier  设置行间距的倍数,如”1.2″。
android:singleLine="true"  //单行
android:maxLines="2"   // 最大行数
android:ellipsize  设置当文字过长时,该控件该如何显示
android:drawableLeft="@drawable/game_download_mgr_delete_bar"
android:drawablePadding="@dimen/game_download_mgr_delete_bar_drawable_padding"   // 在左边放置一张图片,并设置间距
在代码中动态设置则为:
mDrawable = getResources().getDrawable(R.drawable.game_my_strategy);  //得到drawable对象
mDrawable.setBounds(0, 0, mDrawable.getMinimumWidth(), mDrawable.getMinimumHeight());  //设置边距,若没有此,则图片不会显示
tv.setCompoundDrawables(mDrawable, null, null, null); //在左边放置一张图片


7、adapter 有时用mAdapter.notifyDataSetChanged 不起作用,可以试着用mAdapter.notifyDataSetInvalidated();

8、xml文件里面 focusableInTouchMode 对于刚进入页面是否弹出键盘很有用,但通常要写在布局最外层。

9、ofInt 和 ofFloat 方法使用不当,会导致动画不执行

10、在动画执行的方法内不要一直new对象,否则耗资源、容易卡

11、listview设置分隔条与分隔条的高度:setDivider setDividerHeight

12、TextWatcher 的三个方法的调用时机:当内容发生改变时,三个方法都会被调用,当一下子清楚内容时,onTextChanged方法则不会被调

用,另外两个方法beforeTextChanged、afterTextChanged 则会被调用。

13、dialog的cancle方法最后也会走到dismiss里面去,点击系统返回键走的是cancle流程,两者含义不一样,要区分到底使用cancle 还是dismiss。

setCanceledOnTouchOutside 设置对话框外面点击也可以取消。

14、ViewStub

ViewStub是一个无形的、零大小的视图,可以在程序运行的过程中,通过懒加载的模式inflate进布局资源中。当一个ViewStub的inflate()方法被调用或者被设为显示时,这个ViewStub使用设定的View才会被加载,并替换当前ViewStub的位置。

显示它的调用方法为: ((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);

or View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();

它需要监听的事件就只有一个,被加载的时候触发的事件VIewStub.OnInflateListener,在这个事件中,需要实现 一个onInflate()方法,以下是这个方法的实现:

    onInflate(ViewStub stub, View inflated);

   在VIewStub.OnInflateListener事件的onInflate()方法中,stub为当前待膨胀的ViewStub控件,inflated参数为当前被膨胀的View视图。

ViewStub的属性为:android:layout

而include中为:layout,两者区别要谨记

15、使用 include 标签的注意事项:若要使和某某控件对齐等的属性android:layout_*生效,就必须重写layout_width 和 layout_height属性, 否则不起作用,而且只有位置关系(比如:below/above/align等)属性会生效,其他则不会(比如padding、margin)

标签若指定了ID属性,而你的layout也定义了ID,则你的layout的ID会被覆盖

16.lableView.setTextColor(context.getResources().getColorStateList(mLableColorRes));

color 也有按下、松开时对应的颜色,用getColorStateList来得到这种颜色组

17、获取屏幕密度的几种方法:

a.      int screenWidth  = getWindowManager().getDefaultDisplay().getWidth();       // 屏幕宽(像素,如:480px)
int screenHeight = getWindowManager().getDefaultDisplay().getHeight();
b.      DisplayMetrics dm = new DisplayMetrics();
dm = getResources().getDisplayMetrics();
float density = dm.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
int densityDPI = dm.densityDpi; // 屏幕密度(每寸像素:120/160/240/320)
float xdpi = dm.xdpi;
float ydpi = dm.ydpi;
c.     dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
density = dm.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
densityDPI = dm.densityDpi; // 屏幕密度(每寸像素:120/160/240/320)


18、 tv.getTextSize() 返回的是像素单位,但是tv.setTextSize(14)却是sp单位,所以tv.setTextSize(tv.getTextSize()); 字体会有所变化,

tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, tv.getTextSize());这样设置单位后就不会有变化了。

19、图片抗锯齿: canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG));

并且加上 Paint xferPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);

20、要在全局View上盖上一层铺满屏幕的View,可以在布局文件里实现(即放到布局最外层),可以用PopupWindow,还可以用铺满全局

的dialog,只不过要设置 一些特殊属性。

21、对于一个控件,它的内容会完全覆盖到背景之上,比如一个ImageView,设置一个背景和一个源,源会完全盖住背景,此时若不想完全盖住,可以加一个padding,很多情况下这个属性都很好用,留背景、扩大点击区域等。

22
4000
、当屏幕方向发生改变时,当前的Activity会自动地重绘它的内容,当活动销毁的时候,只有布局当中设置了id属性的控件的值才会被保持下来,并在活动创建的时候自动恢复,没设置则不会。

23、Drawable比Bitmap占用更小的内存,BitmapFactory类的decodeStream方法比decodeResource方法占用更小的内存。

24、Android中drawable支持的文件类型有PNG(首选的) JPG(可接受的)GIF(不建议)

25、在线性布局里,让组件居中:设置LinearLayout的orientation属性,并且设置View的Layout_gravity=”center”

在相对布局里,让组件居中:设置View的layout_centerHorizontal=”true”

26、Android根据不同分辨率获取图片的规则:假如手机分辨率是drawable-xxhdpi ,先找本文件夹,没有再往高密度顺序文件夹找,也即drawable-xxxhdpi,再没有则drawable-nodpi,再没有则drawable-xhdpi -> drawable-hdpi -> drawable-mdpi -> drawable-ldpi

所以匹配文件夹依次为:drawable-xxhdpi drawable-xxxhdpi drawable-nodpi drawable-xhdpi -> drawable-hdpi -> drawable-mdpi -> drawable-ldpi

drawable-nodpi文件夹是一个密度无关的文件夹,放在这里的图片系统就不会对它进行自动缩放,原图片是多大就会实际展示多大。但是要注意一个加载的顺序,drawable-nodpi文件夹是在匹配密度文件夹和更高密度文件夹都找不到的情况下才会去这里查找图片的,因此放在drawable-nodpi文件夹里的图片通常情况下不建议再放到别的文件夹里面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ui android