2015-12-09 2 views
3

У меня простой макет в диалоге с AppCompat Toolbar и TabLayout внутри. Я хочу, чтобы у моих вкладок были значки слева от текста.Android: панель инструментов Tablayout, отображение изображений над текстом

Вот макет диалогового окна.

<android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_height="wrap_content" 
      android:layout_width="match_parent" 
      > 

     <android.support.design.widget.TabLayout 
       android:id="@+id/tabs" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       app:tabMode="fixed" 
       app:tabGravity="fill" 
       /> 
    </android.support.v7.widget.Toolbar> 

    <ListView 
      android:id="@+id/list" 
      android:layout_width="match_parent" 
      android:layout_height="fill_parent" 
      /> 
</LinearLayout> 

я программно добавить вкладки.

tabs.addTab(tabs.newTab() 
       .setTag(SettingsTabTag) 
       .setText("Settings") 
       .setIcon(R.drawable.scan_tab_settings_black), true); 
tabs.addTab(tabs.newTab() 
       .setTag(MetadataTabTag) 
       .setText("Metadata") 
       .setIcon(R.drawable.scan_tab_metadata_black)); 

Но икона всегда рендеринг над текстом, и очень мало.

+0

ли вы найти решение? –

ответ

2

1.Create пользовательские вкладки Макет

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/tab" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:textAlignment="center"/> 

2.IN Ваша деятельность установить пользовательскую вкладку

TextView newTab = (TextView) LayoutInflater.from(this).inflate(R.layout.custom_tab, null); 
newTab.setText("tab1"); //tab label txt 
newTab.setCompoundDrawablesWithIntrinsicBounds(your_drawable_icon_here, 0, 0, 0); 
tabLayout.getTabAt(tab_index_here_).setCustomView(newTab); 

setCompoundDrawablesWithIntrinsicBounds делает работу.

1

Вот код, обычно используемый для получения значка слева от названия вкладки.

В моем случае я должен добавить линейную компоновку в центральное название tablayout. Я также добавил некоторые пробелы для получения поля между значком и текстом.

custom_tab.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:gravity="center"> 
    <TextView 
     android:id="@+id/tabContent" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:textAlignment="center" 
     android:textColor="@android:color/white" 
     android:gravity="center"/> 
</LinearLayout> 

Initialization Код:

LinearLayout tabLinearLayout = (LinearLayout) LayoutInflater.from(this).inflate(R.layout.custom_tab, null); 
TextView tabContent = (TextView) tabLinearLayout.findViewById(R.id.tabContent); 
tabContent.setText(" "+getApplicationContext().getResources().getString(tabTitles[i])); 
tabContent.setCompoundDrawablesWithIntrinsicBounds(tabIcons[i], 0, 0, 0); 
mTabLayout.getTabAt(i).setCustomView(tabContent); 
Смежные вопросы