在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