在ActionBar.Tab中更改制表符宽度

我正在用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。 我这样试了...

有任何想法吗?


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

错误是我的图标太大而无法放入单个标签。 尽管它们被缩小了,但它们的Tab宽度的计算大小是原始大小。

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

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

额外的16 * 2用于填充。

另外,可以禁用填充。


我在这里找到了这个代码。 它完成了工作,并结合上面的答案; 我无法让我的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);
  }
}
链接地址: http://www.djcxy.com/p/77315.html

上一篇: Change tab width in ActionBar.Tab

下一篇: Subtracting ranges in VBA (Excel)