Android: вкладки в нижней части

Я видел некоторую болтовню об этом, но ничего определенного. Есть ли способ поместить вкладки в TabWidget в нижней части экрана? Если так, то как?

Я попробовал следующее, но не сработало:

а) установка вкладки под разметкой кадра
б) установить гравитацию tabwidget на "низ"

Спасибо! llappall

11 ответов

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

  1. В вашем вертикальном LinearLayout поместите FrameLayout над TabWidget
  2. Задавать layout_height в wrap_content как на FrameLayout, так и на TabWidget
  3. Установить FrameLayout's android:layout_weight="1"
  4. Установить TabWidget's android:layout_weight="0" (0 по умолчанию, но для акцента, читабельности и т. Д.)
  5. Установить TabWidget's android:layout_marginBottom="-4dp" (снять нижний разделитель)

Полный код:

<?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">

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

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0"
            android:layout_marginBottom="-4dp"/>

    </LinearLayout>

</TabHost>

Попробуйте;) Просто посмотрите содержимое FrameLayout(@id/tabcontent), потому что я не знаю, как оно будет обрабатываться в случае прокрутки... В моем случае это работает, потому что я использовал ListView в качестве содержимого моих вкладок,:) Надеюсь, поможет.

<?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:layout_width="fill_parent" 
        android:layout_height="fill_parent">
        <FrameLayout android:id="@android:id/tabcontent"
             android:layout_width="fill_parent" 
             android:layout_height="fill_parent"
             android:layout_alignParentTop="true" 
             android:layout_above="@android:id/tabs" />
    <TabWidget android:id="@android:id/tabs"
             android:layout_width="fill_parent" 
             android:layout_height="wrap_content"
             android:layout_alignParentBottom="true" />
    </RelativeLayout>
</TabHost>

Есть способ убрать строку.

1) Следуйте этому руководству: Android-вкладки с фрагментами

2) Затем примените изменение RelativeLayout, предложенное Leaudro выше (примените реквизиты макета ко всем FrameLayouts).

Вы также можете добавить ImageView к tab.xml в элементе #1 и получить очень похожий на iPhone вид вкладок.

Вот скриншот того, над чем я сейчас работаю. У меня еще есть работа, в основном сделать селектор для значков и обеспечить равномерное горизонтальное распределение, но вы поняли идею. В моем случае я использую фрагменты, но те же принципы должны применяться к стандартному представлению вкладок.

Не уверен, что он будет работать для всех версий Android (особенно с пользовательским интерфейсом), но мне удалось убрать серую полосу внизу, добавив

 android:layout_marginBottom="-3dp"

в XML-код TabWidget...

<?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:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="0dip"
            android:layout_weight="1" />

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0"
            android:background="#252a31"
            android:tabStripEnabled="false" >
        </TabWidget>
    </LinearLayout>

</TabHost>

Существует два способа отображения вкладок в нижней части вкладок.

  1. Используя относительное расположение
  2. Использование атрибута Layout_weight

Пожалуйста, проверьте ссылку для более подробной информации.

Для всех тех, кто пытается удалить разделительную линию tabWidget, вот пример проекта (и соответствующего учебного пособия), который отлично подходит для настройки вкладок и, таким образом, устранения проблем, когда вкладки находятся внизу. Проект Eclipse: http://code.google.com/p/android-custom-tabs/; Исходное объяснение: блог; Надеюсь, это помогло.

Да, смотрите: ссылка, но он использовал макеты XML, а не действия для создания новой вкладки, поэтому поместите его код XML (установите paddingTop для FrameLayout - 0px), а затем напишите код:

public class SomeActivity extends ActivityGroup {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

    TabHost tab_host = (TabHost) findViewById(R.id.edit_item_tab_host); 

    tab_host.setup(this.getLocalActivityManager());

    TabSpec ts1 = tab_host.newTabSpec("TAB_DATE"); 
    ts1.setIndicator("tab1"); 
    ts1.setContent(new Intent(this, Registration.class)); 
    tab_host.addTab(ts1); 

    TabSpec ts2 = tab_host.newTabSpec("TAB_GEO"); 
    ts2.setIndicator("tab2"); 
    ts2.setContent(new Intent(this, Login.class)); 
    tab_host.addTab(ts2); 

    TabSpec ts3 = tab_host.newTabSpec("TAB_TEXT"); 
    ts3.setIndicator("tab3"); 
    ts3.setContent(new Intent(this, Registration.class)); 
    tab_host.addTab(ts3); 

    tab_host.setCurrentTab(0);      


}

}

Возможно, это не совсем то, что вы ищете (это не "простое" решение для отправки ваших вкладок внизу экрана), но, тем не менее, это интересное альтернативное решение, которое я хотел бы отметить вам:

ScrollableTabHost разработан так, чтобы вести себя как TabHost, но с дополнительным просмотром прокрутки для размещения большего количества элементов...

возможно, покопавшись в этом проекте с открытым исходным кодом, вы найдете ответ на свой вопрос. Если я увижу что-нибудь проще, я вернусь к тебе.

У меня была такая же проблема с вкладками Android при попытке разместить их в нижней части экрана. Мой сценарий состоял в том, чтобы не использовать файл макета и создавать вкладки в коде, я также искал запуск действий из каждой вкладки, которые казались слишком сложными при использовании других подходов, поэтому вот пример кода для решения проблемы:

добавляющая-Вкладка-в-андроида-и-размещая-их

Я рекомендую использовать этот код для стабильной работы, он оптимизирован для вложенных фрагментов во вкладке (например, вложенный MapFragment) и протестирован на "не держать действия": /questions/32195670/ustanovit-vkladki-actionbar-vnizu-v-actionbaractivity/32195679#32195679

Другие вопросы по тегам