Я сделал простой пример, чтобы проиллюстрировать проблему. Вот простая 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());
где значок - это простое изображение размером 48x48 точек на дюйм. Вопрос в том, почему getMeasuredWidth возвращает 48 в журналах, но когда я смотрю в иерархическом средстве просмотра, mMeasureWidth составляет 160? Другими словами, реальный вопрос заключается в следующем: как я могу получить реальную ширину / высоту (в Java) вида, когда он растянут в LinearLayout? Вызов requestLayout (), measure () не работает. Я мог бы попытаться получить сумму весов и рассчитать все, что делает LinearLayout, но, возможно, есть более элегантное решение.