Android的LinearLayout.getLayoutParams().width 和 LinearLayout.getWidth() 的区别

本文解析了LinearLayout中两种宽度属性的区别:LayoutParams.width对应XML布局文件中的layout_width属性;getWidth()则是在onMeasure方法后获取到的实际测量宽度,该值依据layout_width进行计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LinearLayout.getLayoutParams().width 和 LinearLayout.getWidth() 有什么区别呢?


LinearLayout.getLayoutParams().width 对应xml的 layout_width

LinearLayout.getWidth() 这个东西要在 onMeasure之后才会真正的值 而onMeasure 是根据layout_width来 计算的

for (int i = 0;i < dataLists.size();i++) { DataList.DataDTO 数据 = dataLists.get(i).getData(); List<DataList.DataDTO.ComponentsDTO> components = data.getComponents(); for (int j = 0;j < components.size();j++) { 字符串名称 = components.get(j).getName(); 类型 = components.get(j).getType(); Log.i(“组件:”, “” + 类型); setStyle = components.get(j).getSetStyle(); Log.i(“组件:”, 名称); //1文本组件 2图片组件 3视频组件 4天气 5日期 6线路 if (type == 1) { int 高度 = setStyle.getHeight(); int width = setStyle.getWidth(); int left = setStyle.getLeft(); int top = setStyle.getTop(); int marqueeWidth = Integer.parseInt(String.valueOf(width)); int marqueeHeight = Integer.parseInt(String.valueOf(height)); int marqueeTop = Integer.parseInt(String.valueOf(top)); Log.i(“aaaaaaa”, “文本组件marqueeTop:” + marqueeTop); LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tvMarquee.getLayoutParams(); params.width = dip2px(MainActivity.this, marqueeWidth); params.height = dip2px(MainActivity.this, marqueeHeight); params.leftMargin = dip2px(MainActivity.this, 左);// 设置左边距 params.topMargin = dip2px(MainActivity.this, marqueeTop);// 设置上边距 Log.i(“aaaaaaa”, “文本组件:” + type); } else if (type == 2) { int 高度 = setStyle.getHeight(); int width = setStyle.getWidth(); int left = setStyle.getLeft(); int top = setStyle.getTop(); int imageWidth = Integer.parseInt(String.valueOf(width)); int imageHeight = Integer.parseInt(String.valueOf(height)); int imageTop = Integer.parseInt(String.valueOf(top)); LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tvImage.getLayoutParams(); params.width = dip2px(MainActivity.this, imageWidth); params.height = dip2px(MainActivity.this, imageHeight); params.leftMargin = dip2px(MainActivity.this, left);// 设置左边距 params.topMargin = dip2px(MainActivity.this, imageTop);// 设置上边距 Log.i(“aaaaaaa”, “图片组件:” + type); } else if (type == 3) { int 高度 = setStyle.getHeight(); int width = setStyle.getWidth(); int left = setStyle.getLeft(); int top = setStyle.getTop(); int videoWidth = Integer.parseInt(String.valueOf(width)); int videoHeight = Integer.parseInt(String.valueOf(height)); int videoTop = Integer.parseInt(String.valueOf(top)); LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tvVideo.getLayoutParams(); params.width = dip2px(MainActivity.this, videoWidth); params.height = dip2px(MainActivity.this, videoHeight); params.leftMargin = dip2px(MainActivity.this, left);// 设置左边距 params.topMargin = dip2px(MainActivity.this, videoTop);// 设置上边距 Log.i(“aaaaaaa”, “视频组件:” + type); } else if (type == 4) { int 高度 = setStyle.getHeight(); int width = setStyle.getWidth(); int left = setStyle.getLeft(); int top = setStyle.getTop(); int weatherWidth = Integer.parseInt(String.valueOf(width)); int weatherHeight = Integer.parseInt(String.valueOf(height)); int weatherTop = Integer.parseInt(String.valueOf(top)); LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tvWeather.getLayoutParams(); params.width = dip2px(MainActivity.this, weatherWidth); params.height = dip2px(MainActivity.this, weatherHeight); params.leftMargin = dip2px(MainActivity.this, left);// 设置左边距 params.topMargin = dip2px(MainActivity.this, weatherTop);// 设置上边距 Log.i(“aaaaaaa”, “天气组件:” + type); } else if (type == 5) { int 高度 = setStyle.getHeight(); int width = setStyle.getWidth(); int left = setStyle.getLeft(); int top = setStyle.getTop(); int dateWidth = Integer.parseInt(String.valueOf(width)); int dateHeight = Integer.parseInt(String.valueOf(height)); int dateTop = Integer.parseInt(String.valueOf(top)); LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tvDate.getLayoutParams(); params.width = dip2px(MainActivity.this, dateWidth); params.height = dip2px(MainActivity.this, dateHeight); params.leftMargin = dip2px(MainActivity.this, left);// 设置左边距 params.topMargin = dip2px(MainActivity.this, dateTop);// 设置上边距 Log.i(“aaaaaaa”, “日期组件:” + type); } else if (type == 6) { int 高度 = setStyle.getHeight(); int width = setStyle.getWidth(); int left = setStyle.getLeft(); int top = setStyle.getTop(); int listWidth = Integer.parseInt(String.valueOf(width)); int listHeight = Integer.parseInt(String.valueOf(height)); int listTop = Integer.parseInt(String.valueOf(top)); LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tvList.getLayoutParams(); params.width = dip2px(MainActivity.this, listWidth); params.height = dip2px(MainActivity.this, listHeight); params.leftMargin = dip2px(MainActivity.this, left);// 设置左边距 params.topMargin = dip2px(MainActivity.this, listTop);// 设置上边距 Log.i(“aaaaaaa”, “线路组件:” + type); } } } <?xml 版本=“1.0” encoding=“utf-8”?> <LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android” xmlns:app=“http://schemas.android.com/apk/res-auto” xmlns:tools=“http://schemas.android.com/tools” android:layout_width=“match_parent” android:layout_height=“match_parent” android:orientation=“vertical” tools:context=“ 的MainActivity”> <TextView android:id=“@+id/文本” android:layout_width=“wrap_content” 安卓:layout_height=“wrap_content” android:text=“1.0” android:textSize=“30sp” 安卓:layout_gravity=“center” android:visibility=“gone” /> <TextView android:id=“@+id/tv_marquee” android:layout_width=“match_parent” 安卓:layout_height=“50dp” android:background=“@color/黑色” android:text=“跑马灯” android:textColor=“@color/白色” android:textSize=“30sp” android:gravity=“center” /> <TextView android:id=“@+id/tv_video” android:layout_width=“match_parent” 安卓:layout_height=“260dp” android:background=“@color/select_color” android:text=“视频” android:gravity=“center” android:textColor=“@color/白色” android:textSize=“30sp” /> <LinearLayout android:layout_width=“match_parent” 安卓:layout_height=“wrap_content” android:orientation=“horizontal” <TextView android:id=“@+id/tv_date” 安卓:layout_width=“0dp” 安卓:layout_height=“50dp” 安卓:layout_weight=“1” android:background=“@color/common_botton_bar_blue” android:text=“时间日期” android:textColor=“@color/白色” android:gravity=“center” android:textSize=“30sp” /> <TextView android:id=“@+id/tv_weather” 安卓:layout_width=“0dp” 安卓:layout_height=“50dp” android:background=“@color/time_bg” 安卓:layout_weight=“1” android:text=“天气” android:textColor=“@color/白色” android:gravity=“center” android:textSize=“30sp” /> </LinearLayout> <TextView android:id=“@+id/tv_list” android:layout_width=“match_parent” android:layout_height=“match_parent” android:background=“@color/colorPrimary” android:text=“列表” android:textColor=“@color/白色” android:gravity=“center” android:textSize=“30sp” /> </LinearLayout>这段代码根据获取的值实现所有控件可以随便调换位置,怎么修改
最新发布
06-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值