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()之前,但是我不知道这是否真的是问题,以及如何解决它。
任何帮助都非常感谢。
提前致谢!!!
编辑2:
如果我发送
openOptionsMenu();
closeOptionsMenu();
它固定矩形的大小。但是,这样做会造成延迟,因此非常丑陋。
无论如何,我需要将任何东西放置在openOptionsMenu()的中间以修复该问题(closeOptionsMenu()不会更改视图,仅关闭菜单)。
最佳答案
找到了答案!!!而且在很多时候,它就在我的脸上。
发生的事情是p3.width
只不过是ll3.getLayoutParams().width
。
因此,我现在调用的是ll3.getWidth()
,而不是调用ll3.getLayoutParams().width
(宽度返回错误),然后它将正确进行计算。
我仍然不知道为什么ll3.getWidth()
会返回错误的值,但至少它在起作用(不过,如果您知道原因,也请让我知道!!!)。