Intereting Posts
Android ViewPager с изображениями: утечка памяти / сбои приложений Сбой приложения при восстановлении с фона после долгого времени Как создать диалог, который будет заполнен горизонтальным размером CollapsingToolbarLayout без тени в расширенном состоянии Настройка выравнивания текста с использованием SpannableString Как проверить, включен ли bluetooth программно? ListView с алфавитами справа, как и iPhone. Является ли это возможным? Почему в магазине Google Play говорится, что мое приложение для Android несовместимо с моим собственным устройством? Лучшее использование HandlerThread над другими подобными классами Удаление адресной строки из браузера (для просмотра на Android) EditText автоматически открывает мягкую клавиатуру, когда фрагмент отображается с помощью ViewPager Как заблокировать телефон от зарядки через USB программно OutOfMemoryError в AbstractStringBuilder enlargeBuffer Как проверить, установлен ли Facebook Android Android HttpClient и HTTPS

Android: дочерние элементы разделяют нажатие на состояние со своим родителем, даже если duplicateParentState указан

У меня есть элемент SlidingDrawer, который содержит элемент RelativeLayout, который содержит некоторые дочерние элементы Button:

<SlidingDrawer> <RelativeLayout> <LinearLayout> <Button android:background="@drawable/foo.xml" android:duplicateParentState="false"> <Button android:background="@drawable/bar.xml" android:duplicateParentState="false"> </LinearLayout> </RelativeLayout> </SlidingDrawer> 

Foo.xml и bar.xml имеют селектора, которые применяют разные изображения в зависимости от состояния:

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true" android:drawable="@drawable/foo_selected" /> <item android:state_pressed="true" android:drawable="@drawable/foo_selected" /> <item android:state_enabled="false" android:drawable="@drawable/foo_disabled" /> <item android:drawable="@drawable/foo_normal" /> </selector> 

Проблема, которую я вижу, заключается в том, что когда я нажимаю на скользящую рукоятку выдвижного ящика, нажатое состояние запускается для кнопок, и они тоже выглядят нажатыми, хотя я указал duplicateParentState на false.

Solutions Collecting From Web of "Android: дочерние элементы разделяют нажатие на состояние со своим родителем, даже если duplicateParentState указан"

Переопределите класс LinearLayout с подклассом. В этом подклассе переопределите метод setPressed и ничего не сделайте так:

 public class UnpressableLinearLayout extends LinearLayout { @Override public void setPressed(boolean pressed) { // Do nothing here. Specifically, do not propagate this message along // to our children so they do not incorrectly display a pressed state // just because one of their ancestors got pressed. } } 

Замените LinearLayout экземпляром UnpressableLinearLayout .

Нет необходимости устанавливать для duplicateParentState значение false. Это произойдет, если вы сделаете родительский щелчок каким-то образом. По умолчанию нажатое состояние распространяется на детей. Убедитесь, что ваши LinearLayout и RelativeLayout не доступны для просмотра.