选项卡文本更改时,选项卡宽度会调整大小

时间:2013-05-31 05:50:55

标签: android tabs android-actionbar ellipsis

在ActionBAr中给出标签,其中包含用于显示2个文本的自定义布局:

enter image description here

自定义布局定义为:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView 
        android:id="@+id/text1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="12sp"
        android:textColor="@color/LightBlue"
        android:ellipsize="marquee"
        android:maxLines="1"
        android:gravity="center"/>
    <TextView 
        android:id="@+id/text2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="12sp"
        android:textColor="@color/Yellow"
        android:gravity="center"/>

</LinearLayout>

当我将text1更改为更长的字符串(在此示例中,较长的字符串为“TEMPORARYTEMPORARY”)时会发生以下情况:

  1. 标签宽度已扩展,将其他标签推离屏幕,但似乎有最大标签宽度,因为较长的字符串被剪裁。
  2. 即使较长的字符串被剪裁,ellipsize属性也没有效果,没有选框(尝试了ellipsize“end”,它也没有效果)
  3. enter image description here

    我希望标签保持相同的大小,跨越屏幕宽度,而不是超出范围。无论如何,我希望ellipsize属性在text1上生效。

    更新
     如果不是

    ,epllipsize可以工作
    android:maxlines="1"
    

    我用

    android:singleLine="true"
    

    仍然将标签宽度加宽到某个最大值,将最右边的一个放在屏幕上,

1 个答案:

答案 0 :(得分:0)

我找到了一种方法,可以将标签限制在屏幕宽度上。再加上我之前在问题中发布的ellipsize解决方案,它解决了我的问题。 总结一下:

如果在TextView XML

上设置singleline属性,则Ellipsize将起作用
android:singleLine="true"

标签会根据最宽的标签自动调整大小,这可能会导致标签变为“可滚动”并滑出屏幕。为了防止我使用:

    tv.setMaxWidth(screenwidth/3-70);

maxwidth将使3个标签保持相同的宽度,防止它们滑落。 -70是暂时的,直到我发现我可以从中获取标签的填充。

修改 从标签本身获取实际填充的最终代码

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);
    }
}

额外-1是因为精确像素的标签跳跃1像素,可能是由于分割准确性,-1解决了这个问题。