【发布时间】:2012-07-24 02:46:22
【问题描述】:
是否可以使用 xml drawables仅创建类似 Holo 的 ActionBar 选项卡背景?如果是,如何?如果没有,有什么限制?
浏览Android源码发现tab背景是用tab_indicator_holo.xml中的selector drawable定义的:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Non focused states -->
<item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected_holo" />
<item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected_holo" />
<!-- Focused states -->
<item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected_focused_holo" />
<item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected_focused_holo" />
<!-- Pressed -->
<!-- Non focused states -->
<item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_holo" />
<item android:state_focused="false" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_holo" />
<!-- Focused states -->
<item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_holo" />
<item android:state_focused="true" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_holo" />
</selector>
然后为每个状态使用 9 个补丁可绘制对象,例如 tab_selected_holo.9.png。
我想知道这 9 个补丁可绘制对象是否可以替换为图层列表可绘制对象、形状可绘制对象或组合,从而节省创建各种 PNG 文件的需要(根据我的计算,每个密度 6 个)。
我注意到ActionBarSherlock 也使用了 9 个补丁可绘制对象,因此很可能这是唯一的方法。
【问题讨论】:
-
我所做的是从 android 平台资源文件夹中复制它们并稍微调整一下
-
@ferdy182 我也是这样做的,我宁愿避免这样做。我不喜欢在 18 个文件中硬编码选项卡的外观和颜色。
-
也许这有点帮助,虽然它不能回答你的问题jgilfelt.github.com/android-actionbarstylegenerator
-
是的,您应该能够使用形状或其他可绘制对象来代替 9-patch
-
@CSmith 你能举个例子吗?比方说,把 tab_selected_holo 做成一个 9 补丁?
标签: android android-actionbar actionbarsherlock nine-patch