您好我在LinearLayout
中使用以下布局结构<TableLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</TableRow>
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/tv1"
android:layout_height="wrap_content"
android:gravity="left"
android:paddingLeft="10dp"
android:textColor="#000" />
<TextView
android:id="@+id/tv2"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:gravity="right"
android:paddingRight="10dp"
android:textColor="#000" />
</TableRow>
</TableLayout>
<ImageView
android:id="@+id/img1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="320px"
android:layout_height="320px"
android:gravity="center" >
</RelativeLayout>
并且想要从java文件动态设置相对布局宽度和高度,而不是在xml文件中将其设置为320px但不能这样做,因为我将限制仅限于纵向模式,因此方向更改不是问题。可以使用match_parent在全屏幕上设置相对布局,但我必须在屏幕上放置另一个视图,这样就可以了,或者我必须以另一种方式实现它...
答案 0 :(得分:25)
Android一旦显示,就不会刷新wrap_content
的视图布局。
即使使用invalidate()
或requestLayout()
。
因此,如果你添加一个子视图,或者动态修改内容,你就搞砸了。
getLayoutParams().height = x
加requestLayout()
是一个很好的解决方案,如果您只需要执行此操作。
之后,wrap_content
中的LayoutParams
会丢失,因为您已覆盖它。
为了解决这个问题,我编写了一个静态类,它重新计算大小并强制更新wrap_content
视图的布局。使用的代码和说明可在此处获取:
https://github.com/ea167/android-layout-wrap-content-updater
享受!
答案 1 :(得分:16)
尝试使用此
getLayoutParams().height= x;
requestLayout(); or invalidate();
答案 2 :(得分:6)
在.xml中为您的相对布局指定一个id:
android:id="@+id/relativelayout"
现在在你的java文件中写下这个:
RelativeLayout Rl = (RelativeLayout) findViewById(R.id.relativelayout);
RelativeLayout.LayoutParams layout_description = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT or YourUserDefinedwidth,
RelativeLayout.LayoutParams.FILL_PARENT or YourUserDefinedHeight);
Rl.setLayoutParams(layout_description);
答案 3 :(得分:2)
从下面的代码中你可以得到设备的高度和宽度: -
Display display = getWindowManager().getDefaultDisplay();
int width = (display.getWidth() );
int height = (display.getHeight() );
paramsTop urrealative layout: -
现在你可以设置你想要的高度或宽度。
paramsTop = new RelativeLayout.LayoutParams(width, height);
答案 4 :(得分:2)
您可以使用LayoutParams动态设置视图尺寸。 像这样:
RelativeLayout layout = (RelativeLayout) findViewById(R.id.yourlayout_id);
// Gets the layout params that will allow you to resize the layout
LayoutParams params = layout.getLayoutParams();
params.height = 320;
params.width = 320;
答案 5 :(得分:2)
我遇到了这个问题,这是动态改变相对布局宽度和高度的最佳解决方案
RelativeLayout relMain = (RelativeLayout) convertView.findViewById(R.id.relMain);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.width =200;
params.height =200;
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
relMain.setLayoutParams(params);
答案 6 :(得分:0)
如果你打算改变身高,那么这将成为一个伎俩。
RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.yourId);
relativeLayout.getLayoutParams().height = 100;
relativeLayout.getLayoutParams().width = 100;