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.
Ответы
Ответ 1
Отменить класс 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
.
Ответ 2
Нет необходимости устанавливать для duplicateParentState значение false. Это произойдет, если вы сделаете родительский щелчок каким-то образом. По умолчанию нажатое состояние распространяется на детей. Убедитесь, что ваши LinearLayout и RelativeLayout не доступны для просмотра.
Ответ 3
Получилась та же ситуация с SeekBar.
настройка для SeekBar:
android:clickable="true"
android:focusable="true"
работал на меня