在ActionBar.Tab中更改选项卡宽度

时间:2013-11-18 03:56:20

标签: android tabs android-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。我试着这样做......

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

最后我找到了原因,也许它可以帮助别人......

错误是我的图标太大而无法放入单个标签中。即使它们按比例缩小,Tab宽度的计算大小也是原始大小。

我的解决方案是使用ImageView包装这些图像,并将其宽度设置为

  

ImageWidth = ScreenWidth / NumOfTabs - 2 * 16dp(转换为像素)

额外的16 * 2用于填充。

此外,可以禁用填充。

答案 1 :(得分: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);
  }
}