在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”)时会发生以下情况:
我希望标签保持相同的大小,跨越屏幕宽度,而不是超出范围。无论如何,我希望ellipsize属性在text1上生效。
更新
如果不是
android:maxlines="1"
我用
android:singleLine="true"
仍然将标签宽度加宽到某个最大值,将最右边的一个放在屏幕上,
答案 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
解决了这个问题。