Android: динамическое изменение макета в диалоге - PullRequest
0 голосов
/ 14 января 2012

Я бы хотел программно изменить макет диалога: изменить корневую ориентацию LinearLayout. Этот корневой LinearLayout содержит два макета: GT и DI. Это прекрасно работает, если я использую AlertDialog, но не если я использую Dialog напрямую (используя Dialog с пользовательским стилем, потому что мне не нужен заголовок или пространство заголовка).

Вот мой макет XML:

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

<LinearLayout
    android:id="@+id/GT_container"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="GT"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <RadioGroup
        android:id="@+id/GT_group"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <RadioButton
            android:id="@+id/radioButton2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:height="5dp"
            android:text="GT #1" />

        <RadioButton
            android:id="@+id/radioButton1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:height="5dp"
            android:text="GT #2" />

    </RadioGroup>
</LinearLayout>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/DI_container"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#FF0000"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="DI"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scrollbarAlwaysDrawVerticalTrack="true" >

        <LinearLayout
            android:id="@+id/linearLayout1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >

            <RadioGroup
                android:id="@+id/DI_group"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" >

                <RadioButton
                    android:id="@+id/DI_rdb_1"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:checked="true"
                    android:text="DI #1" />

                <RadioButton
                    android:id="@+id/DI_rdb_2"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:checked="true"
                    android:text="DI #2" />
            </RadioGroup>
        </LinearLayout>
    </ScrollView>
</LinearLayout>

А вот и мой код:

LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rootLayout = inflater.inflate(R.layout.new_game, (ViewGroup) activity.findViewById(R.id.root_container));

if (screenIsLandscape) {
   ((LinearLayout) rootLayout).setOrientation(LinearLayout.HORIZONTAL);
} else {
   ((LinearLayout) rootLayout).setOrientation(LinearLayout.VERTICAL);
}

Dialog dlg = new Dialog(activity, R.style.FullHeightDialog);
dlg.requestWindowFeature(Window.FEATURE_NO_TITLE);
dlg.setContentView(R.layout.my_layout);
dlg.show();

Я не хочу использовать "layout-land", чтобы избежать дублирования XML (мой XML довольно большой, но упрощенный здесь для этого поста). Заранее спасибо.

1 Ответ

3 голосов
/ 20 января 2012

Вы создали новый объект "rootLayout" из xml-файла, а затем изменили его (rootLayout, не xml ). Теперь этот объект не связан с вашим файлом.

У вас есть измененный объект, используйте его:

dlg.setContentView(rootLayout);

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