Android drawable:state_selected working,取代state_pressed?

时间:2014-08-28 05:20:15

标签: android android-drawable

Android中的新手。

我在res / drawable /中定义了以下内容,用于在style.xml中定义的菜单中的按钮

<style name="menu_icon">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">@dimen/menu_item_height</item>
    <item name="android:background">@drawable/menu_item_bg_sel</item>
</style>

现在,drawable中的menu_item_bg_sel有两种不同的颜色渐变,适用于我感兴趣的两种状态 - 按下和选择。

<?xml version="1.0" encoding="utf-8"?>
  <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
     <layer-list>          
        <item>
            <shape>
                 <gradient android:angle="180"
                 android:endColor="@color/background_menu_gray_selected2" 
                           android:centerColor="@color/background_menu_gray_selected1" 
                           android:startColor="@color/background_menu_gray_selected" />
            </shape>
        </item>
    </layer-list>
   </item>
   <item android:state_selected="true">
<layer-list>          
        <item>
            <shape>
                 <gradient  android:angle="180" android:endColor="@color/background_menu_home2" 
                            android:centerColor="@color/background_menu_home1" 
                            android:startColor="@color/background_menu_home" />
            </shape>
        </item>
    </layer-list>
   </item>
<item android:drawable="@color/transparent"/>

然而,当我按下按钮(该瞬态)时,该按钮仍然会创建仅从selected_state获取颜色的渐变。

我做错了什么?有什么想法吗?

2 个答案:

答案 0 :(得分:0)

state_selected通常在使用d-pad导航时使用,或者像三星Notes那样使用笔,所以我建议不要使用state_selected,因为当你自动按下它时会被选中或获得焦点虽然被选中并且重点是善良或不同。我建议使用state_pressed,state_focused和state_hovered。

有关详情,请点击here

答案 1 :(得分:0)

您可以使用此代码。您可以将此代码复制粘贴到一个可绘制文件中。您可以为不同的状态分配不同的可绘制文件或在此文件中定义形状。我已为聚焦状态指定了一个可绘制文件作为示例。

simple_button_states.xml

   <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item
            android:state_focused="true"
            android:drawable="@drawable/rounded_edittext_focused"
            />
        <!--pressed -->
        <item
            android:state_pressed="true" />

        <!--selected -->
        <item
            android:state_selected="true" />

        <!-- focused -->
        <item
            android:drawable="@drawable/rounded_edittext_unfocused"/>


    </selector>

round_edittext_focused.xml



<shape xmlns:android="http://schemas.android.com/apk/res/android"
    >
    <solid android:color="#FFFFFF" />

    <stroke
        android:width="2dp"
        android:color="@color/CornflowerBlue" />
    <corners
        android:topLeftRadius="4dp"
        android:topRightRadius="4dp"
        android:bottomLeftRadius="4dp"
        android:bottomRightRadius="4dp"

        />
</shape>

最后将实际按钮的背景指定为您在上面声明的可绘制文件。

   <Button
        android:layout_width="150dp"
        android:layout_height="wrap_content"

        android:background="@drawable/simple_button_states"
        />

希望这有帮助