2014-10-16 3 views
2

Я динамически генерирую TextViews, которые работают как кнопки. Теперь я хочу выделить их, когда они будут нажаты. Что-то вроде изменения Цвет текста или цвет фона. Я попытался использовать селектор, но он не работает.Выделите TextView при щелчке программным способом

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_focused="true" android:color="#ffffff"/> 
<item android:state_pressed="true" android:state_enabled="false" android:color="#ffffff" /> 
</selector> 

Здесь моя петля для создания TextViews.

int z = 0; 
    for (MOKGenericDataItem d : data) { 
     if (d.getButtonText() != null) { 
      final int pagePosition = z; 
      TextView btn = new TextView(getActivity()); 
      btn.setId(z); 
      final int id_ = btn.getId(); 
      btn.setText(d.getButtonText()); 
      btn.setTextSize(TypedValue.COMPLEX_UNIT_SP, 30); 
      btn.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1f)); 
      btn.setGravity(Gravity.CENTER); 

      mLineareLayoutViewPagerButtons.addView(btn); 

      btn1 = ((TextView) view.findViewById(id_)); 
      btn1.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View view) { 
        mViewPager.setCurrentItem(pagePosition,false); 
       } 
      }); 
     } 
     z++; 
    } 
+0

Где вы установите селекторный переключатель в TextView? –

+0

Я не вижу, где вы устанавливаете селектор в качестве фона TextView? – MathieuMaree

ответ

5

Прежде всего ваша эта линия создает двусмысленность, как вы принимаете имя переменной, как btn1 (который относя его к кнопке) и вы принимаете ссылку на TextView,

btn1 = ((TextView) view.findViewById(id_)); 

Любом , Go шаг за шагом,

  • создать XML как label_bg.xml, как следующее в drawable папка:

    <?xml version="1.0" encoding="utf-8"?> 
        <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
         <item android:drawable="@drawable/pressed_color" 
           android:state_pressed="true" />  
         <item android:drawable="@drawable/normal_color" /> 
        </selector> 
    
  • В values папки создайте еще один xml как следующий, названную как labelcolors.xml

    <?xml version="1.0" encoding="utf-8"?> 
    <resources> 
    <drawable name="pressed_color">#7ec0ee</drawable> <!--custom color for pressed state --> 
    <drawable name="normal_color">#00FFFFFF</drawable> <!--transperent color for normal state --> 
    </resources> 
    
  • Теперь установить фон этикетки label_bg.xml

    <TextView 
        android:id="@+id/yourlabel" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_marginLeft="760dp" 
        android:layout_marginTop="515dp" 
        android:background="@drawable/label_bg" <!--like this--> 
        android:text="LabelText" 
        android:textSize="20dp" /> 
    

как вы динамически добавлять точку зрения, так что вы должны установить фон для каждого TextView .Для программно этот вызов setBackgroundResource() на textview созданного объекта и установить в качестве фона label.xml

+0

Спасибо, работает. Теперь он меняет цвет на белый, только когда я нажимаю, могу ли я изменить его, чтобы он оставался белым? –

+0

Возможно, у вас есть решение для этого? что он остается белым, пока я не нажму еще один texview? –

+0

Я предполагаю, что вы искали функциональность с щелчком, посмотрите [эта ссылка] (http://stackoverflow.com/questions/3668958/how-to-set-the-color-of-a-textview-in-android), пока я не вернусь к вам – nobalG

2

Вам нужно создать класс с OnTouchListener и Detect touch Motin. ACTION_DOWN, изменить цвет текста и ACTION_UP изменить цвет по умолчанию в соответствии с вашими требованиями.

Код:

public class CustomTouchListener implements View.OnTouchListener { 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     switch (motionEvent.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      ((TextView) view).setTextColor(0xFFFFFFFF); // white 
      break; 
     case MotionEvent.ACTION_CANCEL: 
     case MotionEvent.ACTION_UP: 
      ((TextView) view).setTextColor(Color.parseColor("#4a4a4a")); // lightblack 
      break; 
     } 
     return false; 
    } 
} 

Теперь установите TouchListener с помощью

textView.setOnTouchListener(new CustomTouchListener()); 
Смежные вопросы