大家好,又见面了,我是你们的朋友全栈君。
1、了解LayoutParams
其实LayoutParams就是代表一个布局属性,每一个ViewGroup对应一种LayoutParams。LinearLayout对应LinearLayout.LayoutParams,RelativeLayout对应RelativeLayout.LayoutParams。我们在XML中写的大多数属性,在代码中通过LayoutParams同样可以操作界面布局。下面以RelativeLayout.LayoutParams为例:
(1)RelativeLayout.LayoutParams.setMargins(left, top, right, bottom) 通过此方法可以动态设置margin值;
(2)addRule(int verb) 该方法表示所设置节点的属性不能与其他兄弟节点相关或者属性值为布尔值。 比如 addRule(RelativeLayout.CENTER_VERTICAL)就表示在RelativeLayout中的相应节点是垂直居中的。
(3)addRule(int verb,int anchor)该方法表示所设置节点的属性必须关联其他兄弟节点或者属性值为布尔值。 比如addRule(RelativeLayout.ALIGN_LEFT,R.id.date)就表示RelativeLayout中的相应节点放置在一个id值为date的兄弟节点的左边。
2、实例代码
android.widget.RelativeLayout.LayoutParams param_setting =
new android.widget.RelativeLayout.LayoutParams
(android.widget.RelativeLayout.LayoutParams.MATCH_PARENT, height_setting);
param_setting.addRule(RelativeLayout.BELOW, R.id.actionbar_layout);
setting_layout.setLayoutParams(param_setting);
3、我们在实现功能的时候,通常需要在onreate()的时候根据具体的数据去初始化控件的状态。比如一个自定义的开关控件,我们在创建它的时候,它初始化应该是开的状态还是关的状态,这个需要我们获取到具体数据后再去调整它的状态,在调整它的状态的时候,我们有可能就会使用到LayoutParams来调整位置。如下方法是在自定义控件内部提供的方法,供Activity中调用来调整自己的开关位置:
public void initChecked(boolean ischecked){
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) checkThumb.getLayoutParams();
if(ischecked){
}else{
params.removeRule(RelativeLayout.ALIGN_PARENT_LEFT);
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
int checkThumb_length = checkThumb.getWidth();
int track_length = view.getWidth();
params.setMargins(0, 0, 0,0);
}
checkThumb.setLayoutParams(params);
checkThumb.invalidate();
this.ischecked = ischecked;
}
自定义开关的样式如下:
我们在Activity初始化的时候,去调整开关状态:
lane_keeping = (HorizontalSwitch)v.findViewById(R.id.lane_k_switch);
lane_keeping.initChecked(false);//关闭开关
注意:在oncreate()的时候,去操作控件的LayoutParams,不能用new的形式去创建一个LayoutParams,即不能用这种方法:
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(checkThumb.getWidth(), checkThumb.getHeight());
而是需要从原有的控件中获取到LayoutParams,然后在此基础上去修改,才有效果。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160820.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...