android按钮选择器

pea*_*mak 111 android selector

这是一个按钮选择器,当正常时它显示为红色,按下时它显示为灰色.

我想问一下如何进一步直接修改代码,以便在按下时文本大小和颜色也会发生变化?非常感谢!

<item android:state_pressed="true" >         
    <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
        <stroke android:width="2dp" android:color="@color/black" />
        <solid android:color="@color/grey"/>
        <padding android:left="5dp" android:top="2dp" 
            android:right="5dp" android:bottom="2dp" /> 
        <corners android:radius="5dp" /> 
    </shape>    
</item>

<item>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
        <stroke android:width="2dp" android:color="@color/black" />
        <solid android:color="#FF6699"/>
        <padding android:left="5dp" android:top="2dp" 
            android:right="5dp" android:bottom="2dp" /> 
        <corners android:radius="5dp" /> 
    </shape>
</item>
Run Code Online (Sandbox Code Playgroud)

Chi*_*hod 210

你只需要设置selectorbutton在你的布局文件.

<Button
     android:id="@+id/button1"
     android:background="@drawable/selector_xml_name"
     android:layout_width="200dp"
     android:layout_height="126dp"
     android:text="Hello" />
Run Code Online (Sandbox Code Playgroud)

并做了.

编辑

以下是button_effect.xml目录中的drawable文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/numpad_button_bg_selected" android:state_selected="true"></item>
    <item android:drawable="@drawable/numpad_button_bg_pressed" android:state_pressed="true"></item>
    <item android:drawable="@drawable/numpad_button_bg_normal"></item>

</selector>
Run Code Online (Sandbox Code Playgroud)

在这里,你可以看到有3个drawables,你只需要将这个button_effect样式放在你的button上面,就像我上面写的那样.你只需要更换selector_xml_namebutton_effect.


Tom*_*mik 25

使用状态列表drawable无法实现文本大小更改.要更改文本颜色和文本大小,请执行以下操作

文字颜色

要更改文本颜色,可以创建颜色状态列表资源.它将是位于res/color/目录中的单独资源.在布局xml中,您必须将其设置为android:textColor属性的值.然后颜色选择器将包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/text_pressed" />
    <item android:color="@color/text_normal" />
</selector>
Run Code Online (Sandbox Code Playgroud)

字体大小

您无法使用资源更改文本的大小.没有"维度选择器".你必须在代码中做到这一点.并没有直接的解决方案.

可能最简单的解决方案可能是相应地利用View.onTouchListener()和处理上下事件.使用这样的东西:

view.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                // change text size to the "pressed value"
                return true;
            case MotionEvent.ACTION_UP:
                // change text size to the "normal value"
                return true;
            default:
                return false;
            }
        }
});
Run Code Online (Sandbox Code Playgroud)

另一种解决方案可能是扩展视图并覆盖该setPressed(Boolean)方法.当按下状态发生变化时,内部调用该方法.然后在方法调用中相应地更改文本的大小(不要忘记调用super).


nir*_*ola 13

在drawable文件夹中创建custom_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@drawable/unselected" android:state_pressed="true" />
   <item android:drawable="@drawable/selected" />
</selector>
Run Code Online (Sandbox Code Playgroud)

在drawable文件夹中创建selected.xml形状

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="90dp">
   <solid android:color="@color/selected"/>
   <padding />
   <stroke android:color="#000" android:width="1dp"/>
   <corners android:bottomRightRadius="15dp" android:bottomLeftRadius="15dp" android:topLeftRadius="15dp" android:topRightRadius="15dp"/>
</shape>
Run Code Online (Sandbox Code Playgroud)

在drawable文件夹中创建unselected.xml形状

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="90dp">
   <solid android:color="@color/unselected"/>
   <padding />
   <stroke android:color="#000" android:width="1dp"/>
   <corners android:bottomRightRadius="15dp" android:bottomLeftRadius="15dp" android:topLeftRadius="15dp" android:topRightRadius="15dp"/>
</shape>
Run Code Online (Sandbox Code Playgroud)

在values文件夹的color.xml中为选定/未选定状态添加以下颜色

<color name="selected">#a8cf45</color>
<color name="unselected">#ff8cae3b</color>
Run Code Online (Sandbox Code Playgroud)

你可以从这里查看完整的解决方案