2013-11-18 7 views
4

Я создаю приложение с навигацией Tab. Я отображаю значки вместо текста.Изменить ширину вкладки в ActionBar.Tab

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

Как создать вкладки, которые просто заполняют экран?

Это, как вкладки в настоящее время выглядят: enter image description here

Вы можете видеть, что нужно прокручивать ... Существует еще одна вкладка, которая невидимо на этом скриншоте.

Это мой код для создания закладки:

final ActionBar actionBar = getSupportActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    // Create the adapter that will return a fragment for each of the three 

    actionBar.addTab(
      actionBar.newTab() 
        .setIcon(R.drawable.tabs_bar_add_item) 
        .setContentDescription(TAB_ADD_ITEM) 
        .setTabListener(this) 
        .setCustomView(R.layout.add_item_tab) 
    ); 

    actionBar.addTab(
      actionBar.newTab() 
        .setIcon(R.drawable.tabs_bar_shopping_list) 
        .setContentDescription(TAB_SHOW_LIST) 
        .setTabListener(this) 
    ); 

    actionBar.addTab(
      actionBar.newTab() 
        .setIcon(R.drawable.tabs_bar_map) 
        .setContentDescription(TAB_SHOW_MAP) 
        .setTabListener(this) 
    ); 

    actionBar.addTab(
      actionBar.newTab() 
        .setIcon(R.drawable.tabs_bar_specials) 
        .setContentDescription(TAB_SHOW_SPECIALS) 
        .setTabListener(this) 
    ); 

Первая R.layout.add_item_tab это простая ImageView. Я пробовал это так ...

Любые идеи?

ответ

7

Наконец я нашел причину, может быть, это может помочь кому-то ...

Ошибка в том, что мои иконы были слишком большими, чтобы поместиться в одной вкладке. Несмотря на то, что они были уменьшены, их размер вычислений для ширины табуляции был оригинальным.

мое решение было обернуть эти изображения с ImageView, и установить его ширину

ImageWidth = ScreenWidth/NumOfTabs - 2 * 16dp (конвертировано в пикселях)

Дополнительный 16 * 2 для заполнения.

Кроме того, можно отключить прокладку.

+0

T H A N K Y O U! – foxx1337

+0

Но как вы используете 'ImageView' с' setIcon() '? – foxx1337

+0

Вместо этого я использовал пользовательский вид ('.setCustomView (R.layout.add_item_tab)'), который был «ImageView», завернутый в «LinearLayout» – ElyashivLavi

1

Я нашел этот код here. Он выполняет свою работу в сочетании с вышеупомянутым ответом; Я просто не мог получить свои 6 значков в удовлетворительном размере, и я не мог понять, как избавиться от лишнего расстояния вокруг моих значков.

private void setTabsMaxWidth() { 
    DisplayMetrics displaymetrics = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
    int screenWidth = displaymetrics.widthPixels; 
    final ActionBar actionBar = getActionBar(); 
    final View tabView = actionBar.getTabAt(0).getCustomView(); 
    final View tabContainerView = (View) tabView.getParent(); 
    final int tabPadding = tabContainerView.getPaddingLeft() + tabContainerView.getPaddingRight(); 
    final int tabs = actionBar.getTabCount(); 
    for(int i=0 ; i < tabs ; i++) { 
     View tab = actionBar.getTabAt(i).getCustomView(); 
     TextView text1 = (TextView) tab.findViewById(R.id.text1); 
     text1.setMaxWidth(screenWidth/tabs-tabPadding-1); 
    } 
} 
Смежные вопросы