我举了一个简单的例子说明这个问题。这是一个简单的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所做的一切,但也许有一个更优雅的解决方案。
答案 0 :(得分:2)
onCreate在显示活动之前被调用很多。
因此,iv1.getMeasuredWidth()还不是您期望的值,应该在稍后的其他方法中调用。我认为onWindowFocusChange是正确的。