单击时对话框中的按钮不表现为按钮

Button in dialog not behaving as a button when clicked

在创建和测试我的自定义对话框后,我注意到我的按钮在单击时没有显示任何视觉变化迹象(例如涟漪效应或突出显示)。有谁知道我做错了什么以及如何解决这个问题?

XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin">

    <Button
        android:id="@+id/world"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="10dp"
        android:padding="10dp"
        android:background="@color/green"
        android:textColor="@color/white"
        android:text="@string/world"
        android:textAllCaps="false"
        style="@android:style/TextAppearance.Medium"/>
</LinearLayout>

Java

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == R.id.action_other_lines) {
        final Dialog dialog = new Dialog(this);
        dialog.setContentView(R.layout.dialog_hello_world);
        dialog.setTitle("Dialog");

        Button world = (Button) dialog.findViewById(R.id.world);
        world.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
            }
        });

        dialog.show();
    }

    return super.onOptionsItemSelected(item);
}

当你改变你的默认外观时,你应该像这样处理不同的状态

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/button_sel" android:state_selected="true" />
    <item android:drawable="@drawable/button_sel" android:state_pressed="true" />
    <item android:drawable="@drawable/button_unsel" />
</selector>

将其保存为 xml 可绘制对象并添加为 android:background

您可以通过添加背景色来覆盖默认的点击效果。

android:background="@color/green"

您可以通过在可绘制对象上创建自定义背景 xml 文件来实现,就像这样。

custom_background.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@color/Pressed_Color" />
<item android:state_activated="false"  android:drawable="@color/green"/>
</selector>

然后在按钮样式上调用它,如下所示:

android:background="@drawable/custom_background"