2015-04-15 3 views
1

раскладку имеет следующую структуру:LinearLayout OnClick работает, но состояние не меняется

<LinearLayout 
     android:id="@+id/card_pack_clickable_area" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:background="@drawable/card_pack_bg_selector"> 

      <FrameLayout 
       android:id="@+id/card_pack_body_frame_layout" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="@color/bg_card_pack_body"> 

       <...> 

      </FrameLayout> 

      <TextView 
      android:id="@+id/card_pack_percentage" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom" 
      android:background="@color/bg_card_pack_body"/> 

    </LinearLayout> 

содержания @drawable/card_pack_bg_selector":

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_pressed="true"> 
     <shape> 
      <solid android:color="#536dfe" /> 
     </shape> 
    </item> 

    <item android:state_focused="true"> 
     <shape> 
      <solid android:color="#536dfe" /> 
     </shape> 
    </item> 

    <item android:drawable="@android:color/transparent"/> 

</selector> 

постановка задачи

So в LinearLayout card_pack_clickable_area имеет два элемента: FrameLayout card_pack_body_frame_layout и TextView card_pack_percentage.

То, что я пытаюсь достичь, состоит в том, чтобы FrameLayout и TextView были единым объектом для кликов, поэтому я их обернул в внешний LinearLayout.

В коде Java я положил onClickListener на этот LinearLayout. Фактически я получаю событие onClick, когда я нажимаю либо на FrameLayout, либо на TextView.

Проблема заключается в том, что LinearLayout не изменить свое состояние, так как оно должно осуществляться в соответствии с его фоном (@drawable/card_pack_bg_selector").

Вопрос

Как я могу иметь FrameLayout и TextView как единая активную область с одним фоном, который изменяет свое состояние нажимаются/нажат?

+0

http://stackoverflow.com/a/42550267/5064278 – kaya

ответ

3

Можете ли вы попробовать добавить в свой android:clickable="true" outter linear layout.

Если не работает, вы также можете попробовать добавить android:descendantFocusability="beforeDescendants" в макете Outter снова ..

Успехов там

+0

На самом деле, ваш метод не работает, но он предложил мне идею: я должен удалить фоновые атрибуты из внутренних элементов (в моем случае FrameLayout и TextView). Спасибо! – Adam

+0

Я рад, что он просветил вас! –

0

Возможно, на основе this question вы должны сделать свой LinearLayout доступным для просмотра? Не забудьте Google, прежде чем спрашивать ;-)

+0

Конечно, я googled. Указанный способ не работает. – Adam

-1

заменить этот код со старым кодом в @ вытяжке/card_pack_bg_selector и попробовать я надеюсь, что это работает ....

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:drawable="#536dfe" android:state_focused="true" android:state_pressed="true"/> 
    <item android:drawable="#536dfe" android:state_focused="false" android:state_pressed="true"/> 
    <item android:drawable="#536dfe" android:state_focused="true"/> 
    <item android:drawable="@android:color/transparent" android:state_focused="false" android:state_pressed="false"/> 

</selector> 
0

Я должен был удалить фон атрибуты (android:background="@color/bg_card_pack_body") от внутренних элементов (в моем в случае FrameLayout и TextView).