2016-10-04 9 views
0

Я хочу изменить цвет нескольких элементов фона TextView с помощью ColorFilters. Я пробовал несколько способов сделать это. Двое из них сильфон:ColorFilter не работает для фона TextView

TextView tvLeftTop, tvLeftBottom; 

tvLeftTop = (TextView) findViewById(R.id.textview_LeftTop); 
tvLeftBottom = (TextView) findViewById(R.id.textview_LeftBottom); 

float[] cmData = new float[]{ 
         1, 0, 0, 1, 0, 
         0, 1, 0, 0, 0, 
         1, 1, 1, 1, 0, 
         0, 0, 0, 1, 0}; 

ColorMatrix cm = new ColorMatrix(cmData); 
ColorFilter filter1 = new ColorMatrixColorFilter(cm); 
ColorFilter filter2 = new PorterDuffColorFilter(0x20003300, PorterDuff.Mode.LIGHTEN); 

tvLeftBottom.getBackground().setColorFilter(filter1); 
tvLeftTop.getBackground().setColorFilter(filter2); 

Оба TextView содержатся в GridLayout. Вот соответствующая часть XML-файла деятельности:

<GridLayout 
     android:id="@+id/gridLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:columnCount="4" 
     android:rowCount="4" 
     android:layout_above="@+id/seekBar"> 

     <TextView 
      android:id="@+id/textview_LeftTop" 
      android:layout_columnWeight="1" 
      android:layout_rowWeight="2" 
      android:layout_rowSpan="2" 
      android:layout_row="0" 
      android:layout_column="0" 
      android:layout_marginBottom="3dp" 
      android:layout_marginRight="3dp" 
      android:layout_gravity="fill" 
      android:background="#6A77B7" 

      android:text="Title1" /> 


     <TextView 
      android:id="@+id/textview_LeftBottom" 
      android:layout_width="0dp" 
      android:layout_height="70dp" 
      android:layout_columnWeight="1" 
      android:layout_rowWeight="2" 
      android:layout_rowSpan="2" 
      android:layout_row="2" 
      android:layout_column="0" 
      android:layout_marginTop="3dp" 
      android:layout_marginRight="3dp" 
      android:layout_gravity="fill" 
      android:background="#D64F97" 

      android:text="Title2" /> 
</GridLayout> 

Но нет никакого эффекта для обоих взглядов целевого текста (их цвета не изменяются). Что я делаю неправильно?

P.S. Значения цветов являются тестами, поэтому есть целые строки (не значения из .xml-файла). Думаю, теперь это не имеет значения.

+0

Дополнительную информацию можно приобрести. Я пытаюсь изменить цвет TextView с помощью SeekBar. И теперь я заметил интересную вещь. Я добавил 'tvLeftTop.setText (" "+ i);' после 'tvLeftTop.getBackground(). SetColorFilter (filter2);' и цвет изменен ('i' - значение позиции строки поиска). Кажется, что обновление TextView требуется. Но я не знаю, как это сделать правильно. – Yulia

ответ

0
tvLeftBottom.setBackgroundColor(Color.argb(0, 255, 255, 255)); 

Ваше текстовое изображение не имеет фона, поэтому вы не можете установить цвет. Установите цвет в качестве фона.

+0

Цвет фона TextView указан в .xml-файле в android: background. Но все же я пробовал ваш совет. К сожалению, это не сработает. – Yulia