自定义操作栏选项卡视图忽略layout_gravity

时间:2013-02-28 14:37:57

标签: android android-layout actionbarsherlock

我希望在逐个标签的基础上覆盖标签样式,以便我可以将效果应用于某些标签,同时让其他标签保持正常。

以下是我用于自定义标签的布局XML。

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/CustomActionBarTabTextStyle"
    android:ellipsize="end"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:gravity="center_vertical"/>

在com.actionbarsherlock.internal.widget.ScrollingTabContainerView.TabView中的update()实现之后,相应地设置了布局参数和文本椭圆。我的CustomActionBarTabTextStyle当前覆盖的唯一内容是文本大小。

要进行渲染的标签与没有自定义视图的标签完全相同,只是文本在标签中顶部对齐。层次结构查看器中的快速运行显示layout_gravity显示为NONE,而layout_gravity为非自定义选项卡的CENTER_VERTICAL。这怎么可能?有没有人有办法解决这个问题?我已经尝试将android:layout_gravity =“center_vertical”放在样式和主题的所有地方,没有结果。

1 个答案:

答案 0 :(得分:2)

我现在有一个可行的解决方案,但它不是很漂亮。我必须在设置自定义视图时显式创建和设置LayoutParams。

tab.setCustomView(customtabviewresourceid);
TextView tv = ((TextView)tab.getCustomView());
tv.setText(tab.getText().toString().toUpperCase());
LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lp.gravity=Gravity.CENTER_VERTICAL;
tv.setLayoutParams(lp);

我仍然在寻找答案,因为我不认为这是最好的方法。理想情况下,这不应该在Java代码中完成。