java化改造--xml布局文件转成java——学习整理
目录
一、TextView设置字体大小setTextSize()方法参数选择单位
二、TextView设置颜色setTextColor()方法的参数选择
三、相对布局RelativeLayout中android:layout_toLeftOf="@id/sso_send_sms_code"的实现
四、RelativeLayout.LayoutParams变量设置边界无效的解决方案
五、EditText控件中设置输入类型的XML和Java写法并设置长度限制(使用过滤器)
六、android:descendantFocusability = "blocksDescendants"
七、TextView android:lineSpacingMultiplier = "1.3"
一、TextView设置字体大小setTextSize()方法参数选择单位
UI设计给出的界面中字体有大小,比如25sp,然后mTextView.setTextSize(25),通过该方法设置是选择默认单位。翻阅了下API,截图如下:
还有一个重载的方法setTextSize(int unit, int size);
对于第一个参数,可取下列值:标记了单位
TypedValue.COMPLEX_UNIT_PX : PixelsTypedValue.COMPLEX_UNIT_SP : Scaled PixelsTypedValue.COMPLEX_UNIT_DIP : Device Independent Pixels
二、TextView设置颜色setTextColor()方法的参数选择
翻API或者在IDE中输入都会发现其有两个重载,如图:
第一个比较好理解:setTextColor(Color.parseColor("#ff3eff04"));
第二个涉及一个新类:ColorStateList,状态列表。其实根据第一个方法可知,就是设置normal,selected,focused不同状态下对应的颜色值。
先贴下XML中对ColorStateList的实现方式:
再来贴下Java中对ColorStateList的实现方式
/** 对TextView设置不同状态时其文字颜色。 */ private ColorStateList createColorStateList(int normal, int pressed, int focused, int unable) { int[] colors = new int[] { pressed, focused, normal, focused, unable, normal }; int[][] states = new int[6][]; states[0] = new int[] { android.R.attr.state_pressed, android.R.attr.state_enabled }; states[1] = new int[] { android.R.attr.state_enabled, android.R.attr.state_focused }; states[2] = new int[] { android.R.attr.state_enabled }; states[3] = new int[] { android.R.attr.state_focused }; states[4] = new int[] { android.R.attr.state_window_focused }; states[5] = new int[] {}; ColorStateList colorList = new ColorStateList(states, colors); return colorList; }
三、相对布局RelativeLayout中android:layout_toLeftOf="@id/sso_send_sms_code"的实现
打开API之后,找各种方法,终于看到了一个类似的:
因此代码可以写成:其中layoutParams1为RelativeLayout.LayoutParams变量
layoutParams1.addRule(RelativeLayout.LEFT_OF,mResendValidCodeTxt.getId());
四、RelativeLayout.LayoutParams变量设置边界无效的解决方案
无效的代码:
RelativeLayout.LayoutParams relativeLayoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,50);relativeLayoutParams.setMargins(30,30,30,0);
有效代码:
LinearLayout.LayoutParams relativeLayoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,50);relativeLayoutParams.setMargins(30,30,30,0);
说明:在Root(根布局为LinearLayout)视图下,子视图间设置边距,使用RelativeLayout无效,虽然当前的子视图是RelativeLayout布局。
对应转换之前的XML文件
五、EditText控件中设置输入类型的XML和Java写法并设置长度限制(使用过滤器)
其XML文件代码:
转换成Java代码
mValidCodeView.setInputType(InputType.TYPE_CLASS_NUMBER);mValidCodeView.setFilters(new InputFilter[]{new InputFilter.LengthFilter(6)}); //对应布局中的android:maxLength=6mValidCodeView.setHint("验证码");
此处需要贴一下API,感悟下心得:你要的东西,在API中都可以找到,需要做的是去找,如果还不能记住的话。
API中会给出XML对应的Java函数。此乃其一。
此乃其二。过滤器setFilters()的详细信息不在此贴API了,知道去哪找就好。
六、android:descendantFocusability = "blocksDescendants"
其转为Java的表述为:
LinearLayout rootLayout = new LinearLayout(mContext); LinearLayout.LayoutParams rootParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); rootLayout.setOrientation(LinearLayout.VERTICAL); rootLayout.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); rootLayout.setBackgroundColor(Color.TRANSPARENT); //透明
含义:
主要是焦点的传递问题,子视图是否可以获取焦点。
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
七、TextView android:lineSpacingMultiplier = "1.3"
设置线宽,转成Java
mTipTv.setLineSpacing(0,1.3f);
该方法有两个参数,add 和 mult
计算结果为: 原单位*mult + add。
所以,上面结果为 :1 * 1.3 + 0 = 1.3
八、
更多相关文章
- Android总结 - System UI Mode
- Android5.0 新特性学习总结
- Android(安卓)上网流量监控方法
- [安卓开发Android] RecyclerView 类型与点击事件的用法
- Android(安卓)通过 intent传值获得null
- Android中将View的内容保存为图像的方法
- Android布局之RelativeLayout
- Android之使用NotificationListenerService使得自己的应用不被杀
- Android之WebView和js交互-调用失败的看这里