如何在代码中设置RelativeLayout的宽高

如何在代码中设置RelativeLayout的宽高,第1张

设置RelativeLayout的宽高:

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState)

setContentView(R.layout.grid_item)

relativeView=(RelativeLayout)findViewById(R.layout.grid_item)

new Handler().postDelayed(new Runnable(){

@Override

public void run(){

relativeView.setLayoutParams(new RelativeLayout.LayoutParams(100,200))

}

}, 1000) ///延时,或不可行

}

可行方法:

RelativeLayout.LayoutParams linearParams = (RelativeLayout.LayoutParams)mScrollView.getLayoutParams()

linearParams.height = middleHeight

mScrollView.setLayoutParams(linearParams)

设置的控件RelativeLayout 中,如果是 LinerLayout,或者是FrameLayout,做相应改动即可!

LayoutParams params = new LayoutParams(width,height)

然后使用RelativeLayout relativeLayout.setLayoutparams(params)就可以在程序中控制RelativeLayout的宽和高了。

不过需要注意的是,LayouParams的导入包的问题,导入的时候会提示很多,一定要选择RelativeLayout.LayoutParams这个才正确,否则出现ClassCastExcetpion异常.

上一篇我们分析了自定义像素的屏幕适配,它是以px为单位,设计的标准机型和显示机型的宽高比,动态缩放view。

现在,我们不用px为单位,而是直接以当前view在父容器中的比例,来缩放view。

比如,我定义一个view,它的宽为父容器的一半,高也为父容器的一半。

既然需要使用自定义属性,首先就需要添加attrs,声明自定义属性。

我们实现的目的是子view以父容器的宽高为标准,按照百分比规定自身宽高,所以需要自定义个ViewGroup用来包裹子view,顺便计算出子view的宽高。

以RelativeLayout为例:

继承了RelativeLayout后,我们不能丢失RelativeLayout原来的属性,还要增加我们自定义的属性。

原始RelativeLayout的属性被定义在RelativeLayout的内部静态类中(LayoutParams)。

该类中定义的如:above、below、center等属性,都是声明在子view中。同时百分比属性也是需要定义在子view中。

所以,我们的自定义百分比布局也需要继承该内部类,再添加自定义属性。

再分析下view的创建与LayoutParams的关系。

onCreateView()中始终需要调用setContentView(layoutID)。

最终在PhoneWindow的setContentView(int layoutResID)方法中,调用方法解析layoutResID

方法一路延伸最终来到LayoutInflater类的inflate()方法。

关键点:源码中,子view的LayoutParams是由父容器的generateLayoutParams()创建

那我们的自定义LayoutParams如何被创建呢?

在父容器中重写generateLayoutParams方法,返回我们子view的LayoutParams。

最终在onMeasure方法中,根据百分比计算出子view的宽高。

整体思路

1、自定义属性。

2、自定义LayoutParams,继承自RelativeLayout.LayoutParams。

3、创建自定义LayoutParams,父容器用generateLayoutParams()方法创建子view的layoutParams。

4、在onMeasure中获取子view的LayoutParams,按比例计算出宽高并赋值。

注意:子view的LayoutParams是由父容器在generateLayoutParams()中创建。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11258755.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存