设置权重时如何getMeasuredWidth()

时间:2011-08-16 14:29:42

标签: android android-layout android-linearlayout

我举了一个简单的例子说明这个问题。这是一个简单的LinearLayout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/ll"
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
</LinearLayout>

然后我在onCreate()

中填充它
private final String TAG = getClass().getSimpleName();

ImageView iv1;
ImageView iv2;
@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    LinearLayout container = (LinearLayout) findViewById(R.id.ll);
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    lp.weight=1.0f;

    iv1 = new ImageView(this);
    iv1.setImageResource(R.drawable.icon);

    iv2 = new ImageView(this);
    iv2.setImageResource(R.drawable.icon);

    container.addView(iv1, lp);
    container.addView(iv2, lp);

    container.measure(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT);
    Log.d(TAG, " measured width(1): " + iv1.getMeasuredWidth());
    Log.d(TAG, " measured width(2): " + iv2.getMeasuredWidth());

其中icon是48x48dp的简单图像。问题是:为什么getMeasuredWidth在Logs中返回48,但是当我在层次结构查看器中查看mMeasureWidth是160?换句话说,真正的问题是..当在LinearLayout中拉伸视图时,如何获得视图的实际宽度/高度(以Java为单位)?调用requestLayout(),measure()不起作用。我可以尝试获得一个权重总和并计算LinearLayout所做的一切,但也许有一个更优雅的解决方案。

1 个答案:

答案 0 :(得分:2)

onCreate在显示活动之前被调用很多。

因此,iv1.getMeasuredWidth()还不是您期望的值,应该在稍后的其他方法中调用。我认为onWindowFocusChange是正确的。