Панель действий под вкладкой - PullRequest
0 голосов
/ 29 августа 2011

Я хочу создать TabView, как в этом примере: http://developer.android.com/resources/tutorials/views/hello-tabwidget.html

Под ним я бы хотел панель действий с кнопками, которые всегда должны появляться в нижней части экрана. Тем не мение. Когда я помещаю другую LinearLayout с вертикальной ориентацией на TabHost, он исчезает за пределами экрана. Вот мой xml:

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost" android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout android:orientation="vertical"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:padding="5dp">

        <TabWidget android:id="@android:id/tabs"
            android:layout_width="fill_parent" android:layout_height="wrap_content" />

        <FrameLayout android:id="@android:id/tabcontent"
            android:layout_width="fill_parent" android:layout_height="fill_parent"
            android:padding="5dp" />

        <LinearLayout android:orientation="vertical"
            android:layout_width="fill_parent" android:layout_height="fill_parent"
            android:baselineAligned="false">

            <Button android:text="Add" android:layout_height="wrap_content"
                android:layout_width="wrap_content" />
            <ToggleButton android:text="Aus" android:layout_height="wrap_content"
                android:layout_width="wrap_content" />
        </LinearLayout>
    </LinearLayout>
</TabHost>

Есть ли способ сделать это динамически?

Редактировать: добавлен мой xml код

Ответы [ 3 ]

0 голосов
/ 29 августа 2011

В этом определении макета что-то должно быть. В настоящее время как FrameLayout для содержимого вкладки, так и LinearLayout под ней просят заполнить оставшуюся высоту экрана `android: layout_height =" fill_parent ".

Чтобы сделать то, что вы ожидаете, вам нужно определить "панель действий" LinearLayout, чтобы обернуть ее содержимое по вертикали, и указать FrameLayout просто заполнить доступное пространство между вкладками и этой нижней панелью. Мы делаем это, добавляя весовой параметр. Я изменил ваш внутренний макет ниже с помощью этих двух вещей:

<LinearLayout
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:padding="5dp">

  <TabWidget
    android:id="@android:id/tabs"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

  <FrameLayout
    android:id="@android:id/tabcontent"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:padding="5dp" />

  <LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:baselineAligned="false">

    <Button android:text="Add"
      android:layout_height="wrap_content"
      android:layout_width="wrap_content" />
    <ToggleButton android:text="Aus"
      android:layout_height="wrap_content"
      android:layout_width="wrap_content" />
  </LinearLayout>
</LinearLayout>

Надеюсь, что поможет!

0 голосов
/ 29 августа 2011

Я нашел ответ, выполнив поиск по ключевому слову bottom в теге android-layout. Ответ - Относительное расположение. Вот функционирующий xml:

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost" android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <RelativeLayout android:orientation="vertical"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:padding="5dp">

        <TabWidget android:id="@android:id/tabs"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:layout_alignParentTop="true" />

        <RelativeLayout android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:id="@+id/relativeLayout1"
            android:layout_alignParentBottom="true">

            <Button android:text="Add" android:layout_height="wrap_content"
                android:layout_width="wrap_content" android:layout_alignParentLeft="true" />
            <ToggleButton android:text="Aus" android:layout_height="wrap_content"
                android:layout_width="wrap_content" android:layout_alignParentRight="true" />
        </RelativeLayout>

        <FrameLayout android:layout_width="fill_parent"
            android:id="@android:id/tabcontent" android:layout_height="wrap_content"
            android:padding="5dp" android:layout_below="@android:id/tabs"
            android:layout_alignParentLeft="true"></FrameLayout>
    </RelativeLayout>
</TabHost>
0 голосов
/ 29 августа 2011

Возможно, вам нужно окружить вашу «панель действий» и другие линейные макеты внутри другого линейного макета.

Таким образом, у вашей вкладки есть линейный макет для содержимого.В этом линейном макете у вас есть линейный макет для реального контента.Тогда у вас есть панель действий.

Код Psuedo:

<LinearLayout...>
    <LinearLayout...>
        <!-- Views here for the content of the tab -->
    </LinearLayout>
    <MyActionBarView...>
    </MyActionBarView>
</LinearLayout>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...