按钮样式与触摸反馈

时间:2013-12-01 05:16:22

标签: android android-styles

如何提供自定义样式,使我能够在按钮中将cornersdrawable放入其中。我实现这个的当前方式给了我一个错误:

主要实施背景:

<selector xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:drawable="@drawable/comment"
        android:state_focused="false"
        android:state_pressed="false"
        android:state_selected="false"/>

    <item android:drawable="@drawable/comment_pressed"
        android:state_focused="false"
        android:state_pressed="true"
        android:state_selected="false"/>

</selector>

comment.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="@color/purple"/>
    <corners android:radius="4dp"/>
</shape>

comment_pressed:

<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="@drawable/abs__list_selector_background_transition_holo_light"/>
    <corners android:radius="4dp"/>
</shape>

此处@drawable/abs__list_selector_background_transition_holo_light可以从Sherlock库中提取。我确实知道错误来自这里。无论如何我能做到这一点?弯曲的边缘加上可绘制的项目?

1 个答案:

答案 0 :(得分:1)

如果查看Sherlock库中使用的资源,您会看到abs__list_selector_background_transition_holo_light包含以下内容:

<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/abs__list_pressed_holo_light"  />
    <item android:drawable="@drawable/abs__list_longpressed_holo"  />
</transition>

其中涉及以下9Patch图像:
abs__list_pressed_holo_light abs__list_pressed_holo_light
enter image description here abs__list_longpressed_holo

<corners android:radius="x"/>属性用于<shape>个项目,对9Patch drawables没有意义。

要解决这个问题,你可以;

  • 在图形编辑器中创建自己的带有圆角的9Patch drawable,并使用这些而不是Sherlock库中的默认值。

  • <transition>中的9Patch项目替换为您自己的&#34;矩形&#34; <shape>个项目。设置这些<shape>项的颜色以模仿9Patches中使用的颜色。然后,您就可以将<corners>属性与这些&#39;&#39;一起使用。项目。

修改 您需要了解Sherlock库中的abs__list_pressed_holo_lightabs__list_longpressed_holo文件不是纯色十六进制值。它们是9个补丁png位图。你写的地方;

<solid android:color="@drawable/abs__list_selector_background_transition_holo_light"/>  

...在你的xml中,你实际上指的是两个位图而不是一个颜色值。

在我之前建议的两种可能的解决方案中,我认为第二种选择在您的情况下可能是最好的。以下是您如何做到这一步的一步一步。

1)创建两个<shape> drawable并将其保存在drawable文件夹中:

my_holo_light_blue_shape

<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="#9933B5E5"/>
    <corners android:radius="4dp"/>
</shape>

my_holo_dark_blue_shape

<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="#CC0099CC"/>
    <corners android:radius="4dp"/>
</shape>

2)创建自己的<transition> drawable并再次将其保存在drawable文件夹中:

my_holo_blue_transition

<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/my_holo_light_blue_shape"  />
    <item android:drawable="@drawable/my_holo_dark_blue_shape"  />
</transition>

3)然后,您可以在选择器中使用新的<transition> drawable作为按下状态:

<selector xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:drawable="@drawable/comment"
        android:state_focused="false"
        android:state_pressed="false"
        android:state_selected="false"/>

    <item android:drawable="@drawable/my_holo_blue_transition"
        android:state_focused="false"
        android:state_pressed="true"
        android:state_selected="false"/>

</selector>