Кнопка в диалоге не работает как кнопка при нажатии

После создания и тестирования моего пользовательского диалогового окна я заметил, что моя кнопка не отображает никаких визуальных признаков изменений (таких как эффект ряби или выделения) при нажатии. Кто-нибудь знает, что я делаю не так и как решить эту проблему?

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>

Джава

@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);
}

2 ответа

Решение

Вы переопределяете эффект onClick по умолчанию, добавляя цвет фона.

android:background="@color/green"

Вы можете сделать это, создав пользовательский фоновый файл XML на drawable, как это.

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"

Когда вы меняете внешний вид по умолчанию, вы должны обрабатывать другое состояние, если вы хотите, как это

<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 drawable и добавьте как android:background

Другие вопросы по тегам