2016-01-19 3 views
1

Я следую this tutorial, в котором объясняется, как реализовать новый TabLayout, включенный в библиотеку поддержки дизайна Google. Вот мое приложение:Вкладки не имеют полной ширины, используя библиотеку поддержки проектирования

enter image description here

Как можно видеть на скриншоте выше, мои ушки не принимает всю ширину экрана.

Как это исправить?

Вот моя активность XML: (Мой Java код такой же, как тот, в the tutorial В следующем коде мой tablayout и ViewPager находятся внутри FrameLayout.)

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/drawer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 
<!-- your content layout --> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 
    <!-- Toolbar instead of ActionBar so the drawer can slide on top --> 
    <!-- If you want to have dark background for options buttons remove the popup theme --> 
     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
      android:layout_width="match_parent" 
      android:layout_height="@dimen/abc_action_bar_default_height_material" 
      android:background="?attr/colorPrimary" 
      android:minHeight="?attr/actionBarSize" /> 
    <!-- Real content goes here --> 
     <FrameLayout 
      android:id="@+id/content_frame" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" > 
      <android.support.design.widget.TabLayout 
       android:id="@+id/sliding_tabs" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       app:tabMode="scrollable" /> 
      <android.support.v4.view.ViewPager 
       android:id="@+id/viewpager" 
       android:layout_width="match_parent" 
       android:layout_height="0px" 
       android:layout_weight="1" 
       android:background="@android:color/white" /> 
     </FrameLayout> 
    </LinearLayout> 
    <android.support.design.widget.NavigationView 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:id="@+id/nav_view" 
     app:headerLayout="@layout/nav_view_header" 
     app:menu="@layout/nav_view_menu" 
     app:theme="@style/MyTheme.NavMenu" /> 
</android.support.v4.widget.DrawerLayout> 

EDIT:

После добавление и изменение app:tabGravity="center"app:tabMode в fixed, вот как выглядит приложение:

enter image description here

Мне нужны они, чтобы заполнить ширину.

Этот вопрос не является дубликатом. другой ответ не исправил мою проблему.

+0

Возможный дубликат [Вкладки в TabLayout не заполняя весь ActionBar] (http://stackoverflow.com/questions/30721498/tabs-in-tablayout-not-filling-up-entire-actionbar) – Mohsen

ответ

2

http://developer.android.com/reference/android/support/design/widget/TabLayout.html

GRAVITY_CENTER тяжести используется раскладывать вкладки в центре TabLayout.

GRAVITY_FILL Гравитация используется для заполнения TabLayout как можно больше.

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

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

Просто установите это в TabLayout:

app:tabMode="fixed" 

Edit:

Я использую это, и это работает:

   <android.support.design.widget.TabLayout 
       android:id="@+id/tab_layout" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@+id/toolbar" 
       android:background="?attr/colorPrimary" 
       android:minHeight="?attr/actionBarSize" 
       android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" /> 

Похоже, вы не» t нужно что-то установить.

доказательство:

enter image description here

Btw, вы можете проверить это также:

tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
+0

Да, вам придется использовать 'gravity_center'! – zIronManBox

+0

Это исправляет их в центре, но все равно не будет занимать всю ширину экрана ... – VSG24

+0

Удалите это прокручиваемое. Это должно работать, тогда я думаю: эта строка: 'app: tabMode =" scrollable "' – Mohsen

-1

установить TabLayoutMode так:

tabLayout.setTabMode(TabLayout.MODE_FIXED); 
+1

Как это отличается от установки 'app: tabMode =" fixed ", что я уже сделал? – VSG24

0

Решение было добавить их к как xml, так и java:

В Java:

tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 

И в XML для TabLayout:

  app:tabGravity="center" 
      app:tabMode="fixed" 

Результат:

enter image description here

+0

В чем разница с моим ответом? :) – Mohsen

+0

Код Java является обязательным. Гравитация должна быть задана как в xml, так и в java. В xml он должен быть установлен в 'center', а в java -' fill' – VSG24

+0

Вам это не понадобится, мой ответ работает. Без этих двух! – Mohsen