2014-02-05 4 views
2

У меня есть строка таблицы, содержащая несколько данных. При щелчке по строке эта конкретная строка подсвечивается темно-серым цветом. Но когда я нажимаю следующую строку, щелкнутая строка подсвечивается, но предыдущая строка все еще подсвечивается. Как отключить подсветку предыдущей строки. Я пробовал много трюков, но это не работает.Выделите, когда столбец таблицы щелкнул и отключил следующую строку, нажав

Это мой пример кода.

tableRow.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      v.setBackgroundColor(Color.DKGRAY); 

} 

Я создал макет программно. Я не использую XML.

Заранее благодарен.

+0

видеть мое новое обновление у просто нужно добавить больше '' State' в StateListDrawable' согласно у г требование –

ответ

3

Если вы хотите использовать запас на клик выделить, как вы получите с родовым ListView, вы хотите установить фон каждой строки быть

android:background="@drawable/selector" 

Вот пример:

<TableRow 
    android:id="@+id/tableRow1" 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    android:padding="5dip" 
    android:background="@drawable/selector"> 

selector.xml Это в res\drawable папке

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
<item android:state_focused="true" 
     android:state_pressed="true" 
     android:drawable="@color/blue></item> 
<item android:state_focused="true" 
     android:state_pressed="false" 
     android:drawable="@color/custom"></item> 
<item 
     android:state_focused="false" 
     android:state_pressed="true" 
     android:drawable="@color/gray" /> 


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

</selector> 

Update: Создание StateListDrawable программно, как показано ниже и установить в качестве Background к вашему TableRow:

Drawable d1=activity.getResources().getDrawable(R.drawable.gradient_bg_hover); 

    GradientDrawable g = new GradientDrawable(Orientation.TOP_BOTTOM, 
      new int[] { Color.DKGRAY});  
g.setGradientType(GradientDrawable.LINEAR_GRADIENT); 

      StateListDrawable states = new StateListDrawable(); 
      states.addState(new int[] {android.R.attr.state_pressed,-android.R.attr.state_selected},d1); 
      states.addState(new int[] {-android.R.attr.state_focused},g); 

      table_row.setBackgroundDrawable(states); 

Это в res\drawablegradient_bg_hover.xml папке.

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"> 
<!-- Gradient BgColor for listrow Selected --> 
<gradient 
    android:startColor="#18d7e5" 
    android:centerColor="#16cedb" 
    android:endColor="#09adb9" 
    android:angle="270" /> 
</shape> 

Update2: Вы можете добавить больше State к StateListDrawable согласно вашему требованию.

  1. android:state_activated: набор, когда вид или его родитель был «активирован» означает, что пользователь имеет в настоящее время отмечен как представляющий интереса.

  2. android:state_active: Государственное значение для StateListDrawable.

  3. android:state_enabled: Устанавливается при включенном режиме просмотра.

  4. android:state_focused: Государственное значение для StateListDrawable, заданное при наличии фокуса ввода.

  5. android:state_pressed: устанавливается, когда пользователь нажимает кнопку вниз.

  6. android:state_selected: Установлено, что в данный момент выбран вид (или один из его родителей).

Более подробную информацию о StateListDrawable

+0

я создал макет программно. Я не использую XML. – Suniel

+0

@Suniel см. Мое обновление –

+0

В каждом условии он выделяет только последнюю строку. – Suniel

Смежные вопросы