Android: вкладки в BOTTOM

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

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

a) настройка tabwidget ниже рамки б) установка силы тяжести табулиса на "нижний"

Спасибо! llappall

Ответ 1

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

  • В вертикальном LinearLayout установите FrameLayout над TabWidget
  • Установите layout_height в wrap_content как в FrameLayout, так и в TabWidget
  • Установить FrameLayout android:layout_weight="1"
  • Установить TabWidget android:layout_weight="0" (0 по умолчанию, но для выделения, удобочитаемости и т.д.)
  • Установите TabWidget 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>

Ответ 2

Попробуйте это;) Просто просмотрите содержимое 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>

Ответ 3

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

1) Следуйте этому руководству:   android-tabs-with-fragments

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

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

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

enter image description here

Ответ 4

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

Ответ 5

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

 android:layout_marginBottom="-3dp"

в XML файл TabWidget...

Ответ 6

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

  • Использование относительной компоновки
  • Использование атрибута Layout_weight

Подробнее см. ссылку .

Ответ 7

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

Ответ 8

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

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

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

Ответ 9

Да, см. ссылка, но он использовал макеты xml, а не действия для создания новой вкладки, поэтому поставьте свой xml-код (set 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);      


}

}

Ответ 10

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

adding-tabs-in-android-and-placing-them

Ответ 11

Я рекомендую использовать этот код для стабильной работы, он оптимизирован для вложенных фрагментов на вкладке (например, вложенной MapFragment) и проверен на "не продолжать действия": fooobar.com/info/41306/...