2016-07-04 2 views
0

Я применил DrawerLayout в своем приложении, и хочу, чтобы можно было изменить изображение элемента при статусе статуса. Привет, следующий код, который представляет шаблон элемента в макете ящика. Я знаю, как изменить цвет целого элемента, когда статус нажат, но я не знаю, как изменить изображение, потому что изображение является дочерним элементом LinearLayout. Может ли кто-нибудь помочь мне или предложить мне способ сделать это?DrawerLayout item change image

Благодаря

Код:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/CustomSelector" 
    android:orientation="horizontal" 
    android:minHeight="65dp"> 
    <TextView 
     android:layout_width="3dp" 
     android:layout_height="match_parent" 
     android:background="#5AC834" 
     android:layout_marginTop="1dp" 
     android:layout_marginBottom="1dp" /> 
    <ImageView 
     android:id="@+id/listImage" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/icon" 
     android:layout_weight="0" 
     android:layout_gravity="center_vertical" 
     android:paddingLeft="5dip" /> 
    <TextView 
     android:id="@+id/listText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="#334370" 
     android:textSize="22dip" 
     android:textStyle="bold" 
     android:layout_weight="1" 
     android:layout_gravity="center_vertical" 
     android:paddingLeft="10dip" /> 
</LinearLayout> 

ответ

0

Вы можете использовать селектор для достижения этой цели.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/CustomSelector" 
    android:orientation="horizontal" 
    android:minHeight="65dp"> 
    <TextView 
     android:layout_width="3dp" 
     android:layout_height="match_parent" 
     android:background="#5AC834" 
     android:layout_marginTop="1dp" 
     android:layout_marginBottom="1dp" /> 
    <ImageView 
     android:id="@+id/listImage" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/icon_selector" 
     android:layout_weight="0" 
     android:layout_gravity="center_vertical" 
     android:paddingLeft="5dip" /> 
    <TextView 
     android:id="@+id/listText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="#334370" 
     android:textSize="22dip" 
     android:textStyle="bold" 
     android:layout_weight="1" 
     android:layout_gravity="center_vertical" 
     android:paddingLeft="10dip" /> 
</LinearLayout> 

Создайте icon_selector.xml под res/drawable folder.

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

<item android:drawable="@drawable/btn_default_disabled_focused" android:state_focused="true" android:state_enabled="false"/> 
<item android:drawable="@drawable/btn_default_focused" android:state_focused="true" android:state_enabled="true"/> 
<item android:drawable="@drawable/btn_default_disabled" android:state_enabled="false"/> 
<item android:drawable="@drawable/btn_default_pressed" android:state_pressed="true"/> 
<item android:drawable="@drawable/btn_default_normal" /> 

</selector> 

Если вы хотите сменить селектор программно, вы можете изменить, как показано ниже.

StateListDrawable states = new StateListDrawable(); 
states.addState(new int[] {android.R.attr.state_pressed}, 
    getResources().getDrawable(R.drawable.pressed)); 
states.addState(new int[] {android.R.attr.state_focused}, 
    getResources().getDrawable(R.drawable.focused)); 
states.addState(new int[] { }, 
    getResources().getDrawable(R.drawable.normal)); 
imageView.setImageDrawable(states); 
+0

Hi. Это может быть решение, если это будет всего лишь один элемент, но это шаблон для DrawerLayout, и у каждого элемента есть другое изображение, которое я запрограммировал с помощью своего пользовательского адаптера ... Это не сработает таким образом. Спасибо – CalinCosmin

+0

@CalinCosmin, я обновил свой ответ, чтобы сменить селекторные изображения программно –