最后让每个CustomView完全包裹Tab父级后,我遇到了一个问题,Tabs太长并且将Action Bar变成了一个滑块。我的drawables宽度为150px,应该没问题,因为我测试了三星Galaxy S2屏幕的px宽度,得到了480px(480/3标签=每个160px)。
截图:
设置:每个标签都由相同的RelativeLayout设置,该布局具有不同的可绘制资源。然后将该布局传递给Tab的setCustomView()。我不认为每个Tab都需要一个ImageView,除非这可以解决我的问题。一些样式配置更改,例如删除TabView的左右填充,以便将自定义视图放在Tab上。
代码(不使用ImageView,在RelativeLayout上设置可绘制资源)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="56dp"
android:layout_margin="0dp"
android:paddingBottom="2dp" >
<!-- <ImageView
android:id="@+id/ivCustomTab"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="2dp"
android:contentDescription="@string/tabsDescription"
android:duplicateParentState="true" /> -->
</RelativeLayout>
//setting up tabs + custom views on tabs
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
RelativeLayout discoverTabLayout = (RelativeLayout) inflater.inflate(R.layout.actionbar_tabs, null);
RelativeLayout tagsTabLayout = (RelativeLayout) inflater.inflate(R.layout.actionbar_tabs, null);
RelativeLayout badgeTabLayout = (RelativeLayout) inflater.inflate(R.layout.actionbar_tabs, null);
//ImageView customTabImg = (ImageView) customTabLayout.findViewById(R.id.ivCustomTab); //re-setting this ImageView for each tab
ActionBar.Tab discoverTab = actionBar.newTab();//.setText("Discover").setIcon(R.drawable.selector_tabicon_discover);//.setCustomView(drawable.selector_tab_discover);
//customTabImg.setImageResource(R.drawable.selector_tab_discover);
discoverTabLayout.setBackgroundResource(R.drawable.selector_tab_discover);
discoverTab.setCustomView(discoverTabLayout);
<!-- Application theme. -->
<style name="Theme.AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
<item name="android:textSize">18sp</item>
<item name="actionBarTabStyle">@style/Theme.TabsNoPadding</item>
<item name="android:actionBarTabStyle">@style/Theme.TabsNoPadding</item>
</style>
<style name="Theme.TabsNoPadding" parent="@style/Widget.Sherlock.ActionBar.TabView">
<item name="android:paddingLeft">0dp</item>
<item name="android:paddingRight">0dp</item>
<item name="android:minWidth">0dp</item>
</style>
我尝试了什么:
如果需要,我可以发布我的主要活动代码。
答案 0 :(得分:0)
我建议在Android中使用dp(密度无关像素)而不是px(像素)。
如果你想要一个自定义标签栏,我建议你只需创建一个LinearLayout,其宽度设置为match_parent,高度可以选择(例如48dp)。方向将设置为水平。
在LinearLayout内部创建所需数量的ImageView或View尽可能多的选项卡,并将宽度设置为0dp,将height设置为match_parent,最重要的是将 weight 设置为1(不包括dp或任何其他单位)查看LinearLayout内部。这样,标签将具有相同的宽度,并且它们将保留在屏幕的边界内。
希望这有帮助。