Добавьте вкладки в приложение Android с помощью файла layout / main.xml - PullRequest
2 голосов
/ 06 марта 2011

Я начинаю с Android и хочу добавить вкладки в существующее приложение.

Прямо сейчас у меня есть только одно действие с макетом, определенным в файле XML. Теперь я хотел бы добавить другие вкладки.

Я посмотрел его и нашел http://developer.android.com/resources/tutorials/views/hello-tabwidget.html на сайте разработчиков Android; однако в нем не используется XML для определения макета вкладок.

Итак, как я могу легко добавлять вкладки, используя файл XML только для макета?

Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 06 марта 2011

Я посмотрел и нашел http://developer.android.com/resources/tutorials/views/hello-tabwidget.html на сайте разработчиков Android; однако в нем не используется XML для определения макета вкладок.

Да, это так. См. Шаг № 4.


UPDATE

Google реорганизовал их документацию и избавился от этого руководства. Вы можете увидеть использование XML для определения вкладок в TabWidget в этого примера проекта .

3 голосов
/ 06 марта 2011

Я столкнулся с ситуацией, когда макет TabWidget не сделал то, что мне нужно, поэтому я подделал его с помощью ViewFlipper и RadioGroup. Таким образом, я мог бы определить содержимое вкладок (каждое представление в ViewFlipper), используя include (как в ответе Фаррея).

Сами вкладки были RadioButtons в RadioGroup - у вас просто есть OnCheckedChangeListener в вашем коде и соответственно установите дочерний элемент ViewFlipper. Вы можете определить макет RadioButton в формате XML (с текстом, изображениями или чем-либо еще).

Вот псевдо-макет, где вкладки используют изображения:

<LinearLayout>
    <ViewFlipper android:id="@+id/viewFlipper">
        <include android:id="@+id/tab1Content" layout="@layout/tab1Layout" />
        <include android:id="@+id/tab2Content" layout="@layout/tab2Layout" />
        <include android:id="@+id/tab3Content" layout="@layout/tab3Layout" />
    </ViewFlipper>
    <LinearLayout>
        <RadioGroup android:id="@+id/radgroup1" android:orientation="horizontal">
          <RadioButton android:id="@+id/rad1" android:button="@drawable/tab1" />
          <RadioButton android:id="@+id/rad2" android:button="@drawable/tab2" />
          <RadioButton android:id="@+id/rad3" android:button="@drawable/tab3" />
        </RadioGroup>
    </LinearLayout>
</LinearLayout>

А вот и слушатель:

    private OnCheckedChangeListener onRadioButtonCheckedChanged = new OnCheckedChangeListener(){
    public void onCheckedChanged(RadioGroup group, int checkedId)
    {
        switch(checkedId)
        {
            case(R.id.rad2):
                viewFlipper.setDisplayedChild(1);
            break;
            case(R.id.rad3):
                viewFlipper.setDisplayedChild(2);
            break;
            default:
                viewFlipper.setDisplayedChild(0);
            break;
        }
    }
};
1 голос
/ 06 марта 2011

Реализация TabWidget довольно жесткая - у вас нет большого контроля над макетом.

Если вы хотите создать свои собственные пользовательские вкладки, лучше всего создать пользовательский макет и вызывать его из действий, для которых вы хотите иметь эти "вкладки". Вы можете вызвать многократно используемые макеты в XML с помощью <include layout="@layout/my_tab_layout" />, а затем написать свой собственный код инициализации в классе для повторного использования.

...