android - 操作栏选项卡 CustomView 太长

标签 android android-layout actionbarsherlock android-actionbar android-custom-view

在最终让每个 CustomView 完全包裹 Tab 父元素之后,我遇到了一个问题,即 Tab 太长并且正在将 Action Bar 变成一个 slider 。我的可绘制对象的宽度为 150px,这应该没问题,因为我测试了三星 Galaxy S2 屏幕的宽度(以 px 为单位)并得到 480px(480/3 个选项卡 = 每个 160px)。

截图:

enter image description here


设置:每个选项卡都由相同的 RelativeLayout 设置,该 RelativeLayout 具有附加到布局的不同 drawawble 资源。然后将该布局传递给选项卡的 setCustomView()。我不认为每个选项卡都需要一个 ImageView,除非那样可以解决我的问题。为了将自定义 View 放置在选项卡上,已经进行了一些样式配置更改,例如删除 TabView 的左右填充。


代码(不使用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>


我尝试过的:

  • 将 android:layout_width="120dp"添加到 RelativeLayout 以缩短选项卡,但宽度保持不变。
  • 调整了图片大小,总长度减少了 45 像素,没有变化。如果我将它们设置得太小,它们将无法覆盖标签主机。
  • 我还注意到 customView(s) 选项卡在大多数情况下会在 onCreate() 上消失。不确定这是否与我不想要的选项卡滚动布局渲染有关。

如果需要,我可以发布我的主要 Activity 代码。

最佳答案

  1. 我建议在 Android 中工作时考虑 dp(密度无关像素)而不是 px(像素)。

  2. 如果您想要自定义标签栏,我建议您简单地创建一个 LinearLayout,其宽度设置为 match_parent,高度由您选择(例如 48dp)。方向将设置为水平。

在 LinearLayout 中创建任意数量的 ImageView 或 View 选项卡,并将每个选项卡的宽度设置为 0dp,高度设置为 match_parent,最重要的是 weight 设置为 1(没有 dp 或任何其他单位)查看 LinearLayout 内部。这样,选项卡将具有相同的宽度,并且它们将保持在屏幕边界内。

希望这对您有所帮助。

关于android - 操作栏选项卡 CustomView 太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17540400/

相关文章:

android - 如何检查 Talkback 在 JellyBean 中是否处于 Activity 状态

android - android中的按钮突出显示

Android自定义stackview

java - 在 Android 布局中插入列线

Android 数据库事务

android - phonegap 构建 android;无法 build

android - ShareActionProvider 刷新文本

java - Proguard 保持集体诉讼禁止夏洛克

android - 将布局与另一个布局的子布局对齐

android - R 无法解析为变量