为图像应用样式的最佳方法是什么。即,我使用图像作为按钮。当我专注于它时,我点击它,然后我释放按钮应该应用不同的样式。我可以为不同的目的使用不同的图像。但这不是一个可行的解决方案。
2 回答
为什么不直接使用按钮作为按钮?
只需在 attrs.xml 中设置按钮样式即可。例子:
<style name="MyButton.Standard" parent="@android:style/Widget.Button">
<item name="android:textColor">#FFFFFF</item>
<item name="android:textStyle">bold</item>
<item name="android:background">@drawable/btn_gfx</item>
<item name="android:focusable">true</item>
<item name="android:clickable">true</item>
</style>
要使用它,只需将样式应用于布局中的按钮:
style="@style/MyButton.Standard"
btn_gfx.xml 是 StateList 可绘制对象
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:state_pressed="true"
android:state_enabled="false"
android:drawable="@drawable/btn_tab_pressed_disabled" />
<item
android:state_pressed="true"
android:state_enabled="true"
android:drawable="@drawable/btn_tab_pressed" />
<item
android:state_enabled="false"
android:drawable="@drawable/btn_tab_disabled" />
<item
android:state_enabled="true"
android:drawable="@drawable/btn_tab_default" />
</selector>
如果需要,您可以为更多状态添加图形 - 请查看 Android 文档。
如果您想在应用程序的任何地方都使用相同的系统按钮而不是在每个按钮上应用样式,您可以创建自定义主题。一个例子(没有 TitleBar):
<style name="MyTheme" parent="@android:style/Theme.NoTitleBar">
<item name="android:buttonStyle">@style/MyButton.Standard</item>
</style>
然后只需将主题应用到您的应用程序对象(或者 - 如果您只想将它用于单个活动,请将其应用到您的活动)。
您可以使用与 Button 组件完全相同的方式来设置 ImageButton 组件的样式。当您开始使用它时,它是一个非常强大的系统。
这是通过在 XML 文件中指定正常、聚焦和按下状态来完成的(使用State ListDrawable)。
StateListDrawable 是在 XML 中定义的可绘制对象,它使用多个不同的图像来表示相同的图形,具体取决于对象的状态。例如,一个 Button 小部件可以存在于几种不同状态中的一种(按下、聚焦或 niether),并且使用可绘制的状态列表,您可以为每个状态提供不同的背景图像。
例如,您可以在 中创建以下 xml 文件res/drawable
,我们将其命名为 selector.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_btn_pressed"
android:state_pressed="true" />
<item android:drawable="@drawable/ic_btn_focused"
android:state_focused="true" />
<item android:drawable="@drawable/ic_btn_normal" />
</selector>
稍后您可以将其设置为按钮的背景。
<Button
android:background="@drawable/selector"
/>