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()会返回错误的值,但至少它在起作用(不过,如果您知道原因,也请让我知道!!!)。

10-05 17:54