#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