0

给定具有自定义布局的 ActionBAr 选项卡,用于显示 2 个文本,如下所示:

在此处输入图像描述

自定义布局定义为:

<?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”)时,会发生 2 件事:

  1. 选项卡宽度被扩展,将其他选项卡推离屏幕,尽管似乎存在最大选项卡宽度,因为较长的字符串被剪裁了。
  2. 即使剪掉较长的字符串,ellipsize 属性也没有效果,没有选取框(试过 ellipsize "end" 也没有效果)

在此处输入图像描述

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

更新
如果不是

android:maxlines="1"

我用

android:singleLine="true"

仍然将标签宽度加宽到某个最大值,将最右边的标签稍微推离屏幕,

4

1 回答 1

0

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

singleline如果在 TextView XML 上设置了属性,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解决了这个问题。

于 2013-06-02T04:31:06.207 回答