Android: match_parent игнорируется при использовании addView - PullRequest
3 голосов
/ 20 ноября 2011

В моем приложении я динамически добавляю представление к макету с использованием addView.
Однако добавленное представление было предварительно раздуто с использованием

andorid:layout_width="match_parent"  

, однако после добавления представления с использованием

parentView.addView(view, index);  

Представление добавлено, но не заполняет ширину родительского элемента
Я полагаю, это потому, что вычисление до размера "match_parent" выполняется заранее, когда представление завышено, и поэтому оно не имеет ссылки наКак установить ширину corect
это так?
есть ли способ сказать мне, чтобы пересчитать представление макета параметров?

мой код:
activity.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" 
android:layout_height="match_parent"
android:background="@color/blue_bg">
    <ImageView android:id="@+id/myImg"    
        android:layout_width="match_parent" android:layout_height="wrap_content"
        android:src="@drawable/myImg"
        android:scaleType="fitXY"/>
    <LinearLayout android:id="@+id/addressItemContainer" 
        android:layout_width="match_parent" android:layout_height="wrap_content" 
        android:layout_below="@id/myImg" android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp">
        <View android:id="@+id/placeHolder" 
            android:layout_width="match_parent" android:layout_height="match_parent"/>
    </LinearLayout>
</RelativeLayout>

insert_view.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="wrap_content" android:background="@drawable/blue_selector">
.... internal views
</LinearLayout>

код Java:

LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = li.inflate(R.layout.inserted_view, null);
... fill inserted view fields ...
View aiv = findViewById(R.id.placeHolder);
ViewGroup parent = (ViewGroup) aiv.getParent();
int index = parent.indexOfChild(aiv);
parent.removeView(aiv);
parent.addView(view, index);

Tx за помощь:)

1 Ответ

12 голосов
/ 20 ноября 2011

Хорошо, просто добавьте этот код

View aiv = findViewById(R.id.placeHolder);
aiv.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

Отметить как разрешенное, пожалуйста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...