Селектор не работает с эффектом нажатия кнопки

Я хотел бы изменить цвет фона для элемента просмотра при щелчке по нему. Для этого я попытался использовать на нем "selector" и "state_pressed", но не работал.

В этом тестовом коде я попытался сделать это с помощью кнопки и линейного макета просто для проверки. Я делаю так, потому что в моем реальном коде элемент просмотра будет находиться внутри LinearLayout. Кнопка тоже просто тестовая. Я использую API 16.

Почему не работает (при нажатии на кнопку или на линейной раскладке ничего не происходит) и как это исправить?

colors.xml

<?xml version = "1.0" encoding = "utf-8"?>
<resources>
    <color name = "colorPrimary">#3F51B5</color>
    <color name = "colorPrimaryDark">#303F9F</color>
    <color name = "colorAccent">#FF4081</color>
</resources>

вытяжка / item_effect.xml

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

    <!-- default -->
    <item android:drawable = "@color/colorAccent"/>

    <!-- pressed -->
    <item android:state_pressed = "true"
        android:drawable = "@color/colorPrimaryDark"/>

</selector>

activity_main.xml

<?xml version = "1.0" encoding = "utf-8"?>
<RelativeLayout
    xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    xmlns:tools = "http://schemas.android.com/tools"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    tools:context = ".MainActivity">

    <LinearLayout
        android:layout_width = "50dp"
        android:layout_height = "50dp"
        android:layout_centerHorizontal = "true"
        android:background = "@drawable/item_effect"></LinearLayout>

    <Button
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_centerInParent = "true"
        android:background = "@drawable/item_effect"/>

</RelativeLayout>

MainActivity.java

package br.com.roger.selectortest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
146
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я считаю, что это из-за вашего селектора и того, как он настроен. item по умолчанию в селекторе должен быть последним. Пытаться

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

    <!-- default -->
    <item android:drawable = "@color/colorAccent"/>
</selector>

Сейчас работает, но только с кнопкой. Как я могу сделать то же самое с этим LinearLayout?

Roger_88 29.11.2018 02:56

Стоит просто добавить android: clickable = "true". Теперь все работает нормально. Спасибо!

Roger_88 29.11.2018 03:00

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