TextView SetTextColor () не работает

#android #colors #textview

#Android #Цвет #textview

Вопрос:

Я программно создаю список (без ListView, просто добавляя их к родительскому элементу) таких элементов:

     <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" 
    android:orientation="vertical" android:layout_weight="1">
    <TextView android:id="@ id/filiale_name"
    android:layout_width="fill_parent" android:layout_height="wrap_content"/>
    <TextView android:id="@ id/lagerstand_text"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:textSize="10sp" android:textColor="@color/red"/>
</LinearLayout>
  

Кроме того, я определил некоторые цвета в values/colors.xml . Как вы видите, для TextView с идентификатором «lagerstand_text» по умолчанию установлен красный цвет. Это работает.

При создании элементов в Java я делаю

 lagerstandText.setText("bla");
  

и для некоторых элементов я также делаю

 lagerstandText.setTextColor(R.color.red);
  

и другие цвета. Хотя элементы, для которых я не вызываю SetTextColor(), красные, все остальные — серые, независимо от того, какой цвет я выбрал (даже если он снова тот же красный).

Почему это?

Ответ №1:

Документация не очень подробная по этому поводу, но вы не можете использовать только целое число R.color при вызове setTextColor . Вам нужно вызвать getResources().getColor(R.color.YOURCOLOR) , чтобы правильно задать цвет.

Используйте следующее, чтобы задать цвет вашего текста программно:

 textView.setTextColor(getResources().getColor(R.color.YOURCOLOR));
  

Начиная с библиотеки поддержки 23, вы должны использовать следующий код, потому что getColor устарел:

 textView.setTextColor(ContextCompat.getColor(context, R.color.YOURCOLOR));
  

Комментарии:

1. Хорошо, это работает. Документация API в этом случае могла бы быть немного более подробной…

2. также вы можете использовать Color. (здесь красный, зеленый, черный, синий, желтый и другие) SetTextColor (Color.RED)

3. Спасибо за информацию … но этот getResources () заставляет меня передавать цепочку контекстов. Должен быть какой-то лучший способ доступа к глобальным ресурсам.

4. @Umair Используйте статическую переменную в вашем классе приложения.

5. @ Непрерывность, я читал, что сохранение контекста в статической переменной является большим источником утечки памяти.

Ответ №2:

Итак, есть много способов решить эту задачу.

1.

 int color = Integer.parseInt("bdbdbd", 16) 0xFF000000;
textview.setTextColor(color);
  

2.

 textView.setTextColor(getResources().getColor(R.color.some_color));
  

3.

 textView.setTextColor(0xffbdbdbd);
  

4.

 textView.setTextColor(Color.parseColor("#bdbdbd"));
  

5.

 textView.setTextColor(Color.argb(a_int, r_int, g_int, b_int));
  

Комментарии:

1. Есть ли какой-либо способ узнать, приведет ли определенное значение цвета к исчезновению текста?

2. Я настраиваю яркость цвета перед использованием SetTextColor (цвет). В некоторых неизвестных случаях TextView просто исчезает на устройстве (независимо от фона). Я хочу написать тестовую функцию, чтобы проверить, является ли «color» допустимым значением цвета, прежде чем использовать его в SetTextColor (цвет).

3. @ChristopherMasser ничего не пытается, что ты сказал??

Ответ №3:

1. стандартный цвет, который вы предпочитаете, пожалуйста, укажите ниже.

 textview.setTextColor(Color.select_color)
  

2. здесь хотите использовать пользовательский цвет, добавьте его в color.xml файл

 textview.setTextColor(getResources().getColor(R.color.textbody));
  

или

 textView.setTextColor(Color.parseColor("#000000"));
  

или

 subText.setTextColor(Color.rgb(255,192,0));
  

Ответ №4:

Для дальнейшего использования вы можете использовать следующее:

 String color = getString(Integer.parseInt(String.valueOf(R.color.my_color)));
my_textView.setTextColor(Color.parseColor(color));
  

Таким образом, вы можете использовать свои ресурсы цвета.

Ответ №5:

 textView.setTextColor(Color.RED);
  

Комментарии:

1. Чем ваш ответ отличается от ответа, опубликованного другими участниками?

Ответ №6:

Целочисленный идентификатор для определенного цвета (определенный в xml-макете), определенный в R классе, не может быть передан в качестве параметра setTextColor() методу View класса. Вы должны получить параметр setTextColor() с помощью следующей строки кода :

 int para=getResources().getColor(R.color.your_color,null);
view.setTextColor(para,null);
  

Метод getColor(int id) был устаревшим … вместо этого используйте getColor(int id,Resources.Theme theme) , как в приведенной выше строке кода.

 The `second parameter( theme )` can be null