Изменить ширину вкладки в ActionBar.Tab

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

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

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

Вот как сейчас выглядят вкладки: введите здесь описание изображения

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

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

    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. Я пробовал так...

Любые идеи?


person ElyashivLavi    schedule 18.11.2013    source источник


Ответы (2)


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

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

МОЕ решение состояло в том, чтобы обернуть эти изображения с помощью ImageView и установить его ширину на

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

Дополнительные 16*2 предназначены для набивки.

Кроме того, есть возможность отключить отступы.

person ElyashivLavi    schedule 21.11.2013
comment
Но как использовать ImageView с setIcon()? - person foxx1337; 02.12.2013
comment
Вместо этого я использовал пользовательское представление (.setCustomView(R.layout.add_item_tab)), которое было ImageView обернутым в LinearLayout. - person ElyashivLavi; 03.12.2013
comment
Блестящий. Я боролся с этим. - person elbuild; 07.07.2014

Я нашел этот код здесь. Он выполняет свою работу в сочетании с приведенным выше ответом; Я просто не мог получить мои 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);
  }
}
person craned    schedule 01.08.2014