机器人按钮选择器

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

我想问的是,如何进一步直接修改代码,以便当按下文本大小和颜色也可以改变?非常感谢!

<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>

221444 次浏览

您只需要在布局文件中设置 buttonselector

<Button
android:id="@+id/button1"
android:background="@drawable/selector_xml_name"
android:layout_width="200dp"
android:layout_height="126dp"
android:text="Hello" />

完成了。

剪辑

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

<?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>

在这里,你可以看到有3个绘制,你只需要把这个 button_effect风格到您的 button,因为我写了上面。你只需要用 button_effect代替 selector_xml_name

使用 可绘制的状态列表无法实现文本大小的改变。要改变文本颜色和文本大小,可以这样做:

文字颜色

要更改文本颜色,可以创建 颜色状态列表资源。它将是位于 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>

文字大小

您不能仅仅使用资源来更改文本的大小。根本就没有什么“方块选择器”。你必须用密码。而且没有直接的解决方案。

可能最简单的解决方案是使用 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;
}
}
});

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

您可以使用以下代码:

<Button
android:id="@+id/img_sublist_carat"
android:layout_width="70dp"
android:layout_height="68dp"
android:layout_centerVertical="true"
android:layout_marginLeft="625dp"
android:contentDescription=""
android:background="@drawable/img_sublist_carat_selector"
android:visibility="visible" />

(选择器文件) Img _ sublist _ carat _ selector. xml:

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true"
android:state_pressed="true"
android:drawable="@drawable/img_sublist_carat_highlight" />
<item android:state_pressed="true"
android:drawable="@drawable/img_sublist_carat_highlight" />
<item android:drawable="@drawable/img_sublist_carat_normal" />
</selector>

在可绘制文件夹中创建自定义 _ 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>

在可绘制文件夹中创建 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>

在可绘制文件夹中创建 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>

将以下颜色添加到 value 文件夹的 color.xml 中的选定/未选定状态

<color name="selected">#a8cf45</color>
<color name="unselected">#ff8cae3b</color>

您可以从 在这里检查完整的解决方案

实现选择器的最佳方法是使用 xml,而不是使用编程方式,因为使用 xml 更容易实现。

    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/button_bg_selected" android:state_selected="true"></item>
<item android:drawable="@drawable/button_bg_pressed" android:state_pressed="true"></item>
<item android:drawable="@drawable/button_bg_normal"></item>


</selector>

有关我使用此链接实现的更多信息,请参见 Http://www.blazin.in/2016/03/how-to-use-selectors-for-botton.html

在 Layout.xml 文件中

<Button
android:id="@+id/button1"
android:background="@drawable/btn_selector"
android:layout_width="100dp"
android:layout_height="50dp"
android:text="press" />

Btn _ selector. xml

<?xml version="1.0" encoding="utf-8"?>

 <item android:drawable="@drawable/btn_bg_selected" android:state_selected="true"></item>
<item android:drawable="@drawable/btn_bg_pressed" android:state_pressed="true"></item>
<item android:drawable="@drawable/btn_bg_normal"></item>