Цвет фона кнопки Android
Я пытаюсь установить цвет фона кнопки в своем приложении, и я не могу добиться результата, который я хочу...
Цвет, который я пытаюсь установить, holo_green_light(#ff99cc00)
. Для этого я использую setColorFilter(0xff99cc00, PorterDuff.Mode.MULTIPLY);
Цвет, который я получаю, это не holo_green_light
, а сочетание lightgrey и holo_green_light
.
Я пробовал использовать LightingColorFilter
без особого успеха.
Есть ли способ сделать это программно, чтобы кнопка выглядела как кнопка, а не плоский прямоугольник с цветом, который мне нужен.
Ответы
Ответ 1
Кнопки более сложные, чем просто изменение одного цвета...
Кнопки Android создаются с использованием довольно большого количества 9-патчей и штатных чертежей. Вы должны взглянуть на Android Holo Colors, чтобы сгенерировать их, вы бы захотели выбрать "Color Button", и он будет генерировать необходимые изображения и xml для вас...
Ответ 2
Это мой способ сделать пользовательскую кнопку с другим цветом.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<stroke android:width="3dp"
android:color="#80FFFFFF" />
<corners android:radius="25dp" />
<gradient android:angle="270"
android:centerColor="#90150517"
android:endColor="#90150517"
android:startColor="#90150517" />
</shape>
Этот способ устанавливается как фон.
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
android:layout_marginBottom="25dp"
android:layout_centerInParent="true"
android:background="@drawable/button"/>
Ответ 3
Если вы хотите сохранить общий стиль (закругленные углы и т.д.) И просто изменить цвет фона, тогда я использую свойство backgroundTint
android:backgroundTint="@android:color/holo_green_light"
Ответ 4
Если вы не возражаете против жесткого кодирования, вы можете сделать это ~ > android: background = "# eeeeee" и отказаться от любого гексагонального цвета, который вы хотите.
Похоже на это....
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView1"
android:text="@string/ClickMe"
android:background="#fff"/>
Ответ 5
Создайте /res/drawable/button.xml
со следующим содержимым:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" android:padding="10dp">
<!-- you can use any color you want I used here gray color-->
<solid android:color="#90EE90"/>
<corners
android:bottomRightRadius="3dp"
android:bottomLeftRadius="3dp"
android:topLeftRadius="3dp"
android:topRightRadius="3dp"/>
</shape>
И затем вы можете использовать следующее:
<Button
android:id="@+id/button_save_prefs"
android:text="@string/save"
android:background="@drawable/button"/>
Ответ 6
Не нужно быть таким хардкорным.
Попробуй это:
YourButtonObject.setBackground(0xff99cc00);
Ответ 7
Почему бы просто не использовать setBackgroundColor(getResources().getColor(R.color.holo_light_green))
?
Изменить: если вы хотите иметь нечто похожее на кнопку Android, вам нужно будет создать градиент и установить его как фон. Например, вы можете проверить этот вопрос.
Ответ 8
Чтобы сохранить стиль, используйте:
int color = Color.parseColor("#99cc00");
button.getBackground().mutate().setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC));
Ответ 9
В дополнение к ответу Марка Проктора:
Если вы хотите сохранить стиль по умолчанию, но у кнопки есть условная окраска, просто установите свойство backgroundTint
следующим образом:
android:backgroundTint="@drawable/styles_mybutton"
Создайте связанный файл /res/drawable/styles_mybutton.xml, затем используйте следующий шаблон и измените цвета в соответствии с вашими вкусами:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Disabled state-->
<item android:state_enabled="false"
android:color="@android:color/white">
</item>
<!-- Default state-->
<item
android:color="#cfc">
</item>
</selector>