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,截图如下:

java化改造--xml布局文件转成java——学习整理_第1张图片

还有一个重载的方法setTextSize(int unit, int size);

对于第一个参数,可取下列值:标记了单位

TypedValue.COMPLEX_UNIT_PX : Pixels
TypedValue.COMPLEX_UNIT_SP : Scaled Pixels
TypedValue.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之后,找各种方法,终于看到了一个类似的:

java化改造--xml布局文件转成java——学习整理_第2张图片

因此代码可以写成:其中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=6
mValidCodeView.setHint("验证码");

此处需要贴一下API,感悟下心得:你要的东西,在API中都可以找到,需要做的是去找,如果还不能记住的话。

java化改造--xml布局文件转成java——学习整理_第3张图片

API中会给出XML对应的Java函数。此乃其一。

java化改造--xml布局文件转成java——学习整理_第4张图片

java化改造--xml布局文件转成java——学习整理_第5张图片

此乃其二。过滤器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)