【发布时间】:2015-02-05 06:35:07
【问题描述】:
tl/dr
我正在尝试更改代码中的一些布局大小,我可以更改其中一些,但其他需要根据 更改不会一起更新。相反,它们保留以前的宽度 改变的人有。
所以,我在使用 Android Studio 并试图以编程方式更改某些 LinearLayouts 的大小。
这就是我正在做的:
final LinearLayout ll3 = (LinearLayout)findViewById(R.id.box3);
ViewGroup.LayoutParams p3 = ll3.getLayoutParams();
int w3 = 5;
float aux = (float)w3/15;
p3.width = Math.round(max*aux);
ll3.setLayoutParams(p3);
然后这就是我得到的:
Log.i("OnLongClick p3_width", Integer.toString(p3.width));
Log.i("OnLongClick ll3_getWidth", Integer.toString(ll3.getWidth()));
OnLongClick p3_width:179
OnLongClick ll3_getWidth﹕224
ll3.getWidth() 正在返回之前的值,即在设置新参数之前 ll3 HAD。 如果我重复这个过程,那么它将显示如下内容:
OnLongClick p3_width:314 //新值
OnLongClick ll3_getWidth﹕179 //旧(上一个)值
我需要 ll3.getWidth() 与 p3.width 相同,因为我在另一个函数中调用它以重新计算我的应用程序拥有的其他 LinearLayouts。否则,当应用重绘它时,手动更改的矩形会改变,但其他的(使用更改来修改自身)将保持之前更改的方式(对不起这句话)。
我认为发生这种情况是因为 setLayoutParams 必须及时完成它的工作,而不是在我调用 getWidth() 之前,但我不知道这是否真的是问题,以及如何解决它。
感谢任何帮助。
提前致谢!!!
EDIT2: 如果我发送
openOptionsMenu();
closeOptionsMenu();
它固定矩形的大小。但是,这样做会造成延迟,因此非常难看。 无论如何,我需要在 openOptionsMenu() 中间放置任何东西来解决这个问题(closeOptionsMenu() 不会改变视图,只会关闭菜单)。
【问题讨论】:
-
可以看到xml吗?
-
在设置 layoutParams 后尝试调用
ll3.invalidate()。 -
@TheRedFox
<LinearLayout android:id="@+id/box3" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:layout_marginRight="@dimen/separator" android:background="#8888ff" android:layout_marginBottom="@dimen/separator"/>宽度是之前计算的(从重量开始),所以它实际上不是0 -
@tolgap 仍然没有更新 =(
-
R.id.box3的父级是什么?
标签: android android-layout layoutparams