【问题标题】:Button styling with touch feedback带有触摸反馈的按钮样式
【发布时间】:2013-12-01 19:52:23
【问题描述】:

如何提供自定义样式,使我能够在按钮中同时输入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_lightSherlock 库中的一个drawable。而且我确实知道错误来自这里。无论如何我可以做到这一点?弯曲的边缘加上一个可绘制的项目?

【问题讨论】:

    标签: android android-styles


    【解决方案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_longpressed_holo

    &lt;corners android:radius="x"/&gt; 属性用于&lt;shape&gt; 项目,对 9Patch 可绘制对象没有任何意义。

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

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

    • &lt;transition&gt; 中的9Patch 项目替换为您自己的“矩形”&lt;shape&gt; 项目。设置这些 &lt;shape&gt; 项目的颜色以模仿 9Patches 中使用的颜色。然后您就可以对这些“项目”使用&lt;corners&gt; 属性。

    编辑: 您需要了解 Sherlock 库中的 abs__list_pressed_holo_lightabs__list_longpressed_holo 文件不是纯色十六进制值。它们是九个补丁 png 位图。你在哪里写的;

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

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

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

    1) 创建两个&lt;shape&gt; 可绘制对象并将它们保存在您的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) 创建您自己的 &lt;transition&gt; 可绘制对象并再次将其保存在您的 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) 然后您可以在选择器中使用新的&lt;transition&gt; 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>
    

    【讨论】:

    • 谢谢你,我确实看到了那些可绘制的东西,但我希望将曲线与可绘制对象一起使用。
    • 有几种不同类型的drawable。 abs__list_selector_background_transition_holo_light 中使用的可绘制对象是 &lt;nine-patch&gt; 可绘制对象。您可以使用&lt;corners&gt; 的类型是&lt;shape&gt; 可绘制对象。 Have a look at this link to get a better understanding of drawables。您不能将&lt;corners&gt; 属性与&lt;nine-patch&gt; 可绘制对象一起使用。 &lt;nine-patch&gt; 不知道如何处理该属性。这不是他们的工作方式。如果你想使用&lt;corners&gt;,你必须使用&lt;shape&gt;drawables。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多