Кнопка Android с различными цветами фона
Я хочу изменить фоновый цвет кнопки с помощью selector-xml файла. Мой подход в основном таков из примера внизу этой страницы: http://developer.android.com/guide/topics/resources/color-list-resource.html
У меня есть res/color/button_text.xml, который выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="#ffff0000"/> <!-- pressed -->
<item android:state_focused="true"
android:color="#ff0000ff"/> <!-- focused -->
<item android:color="#ff000000"/> <!-- default -->
</selector>
и мой макет содержит следующий код:
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/button_text"
**android:background="@color/button_text"** />
(** только там, чтобы показать вам, что я использую android: background вместо android: textcolor)
этот код сработает. он говорит, что для тега Binary XML file line # 4 требуется атрибут drawable или дочерний тег, определяющий drawable. Но если я попробую его с android: textColor, как описано в приведенной выше ссылке, он отлично работает. Поэтому это должно быть проблема фона. не хочу создавать 9patch-png, если это не необходимо (в принципе, мне просто нужен "кликабельный" прямоугольник, поэтому я использую кнопку с цветным фоном)
Ответы
Ответ 1
Как указано в вашей ошибке, вы должны определить допустимый атрибут для элементов (по какой-то причине это требуется, когда дело доходит до определения фона), поэтому:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@color/red"/> <!-- pressed -->
<item android:state_focused="true" android:drawable="@color/blue"/> <!-- focused -->
<item android:drawable="@color/black"/> <!-- default -->
</selector>
Также обратите внимание, что атрибут drawable не принимает исходные значения цвета, поэтому вам нужно определить цвета как ресурсы. Создайте файл colors.xml в папке res/values:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="black">#000</color>
<color name="blue">#00f</color>
<color name="red">#f00</color>
</resources>
Ответ 2
В URL-адресе, на который вы указали, button_text.xml используется для установки атрибута textColor. Это причина, по которой у них был файл button_text.xml в папке res/color, и поэтому они использовали @color/button_text.xml
Но вы пытаетесь использовать его для атрибута фона. Атрибут background ищет что-то в папке res/drawable.
проверьте это, я получил эту селекторную пользовательскую кнопку из интернета. У меня нет ссылки. Но я благодарю плакат за это. Это помогло мне. Это в папке с возможностью рисования
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape>
<gradient
android:startColor="@color/yellow1"
android:endColor="@color/yellow2"
android:angle="270" />
<stroke
android:width="3dp"
android:color="@color/grey05" />
<corners
android:radius="3dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
<item android:state_focused="true" >
<shape>
<gradient
android:endColor="@color/orange4"
android:startColor="@color/orange5"
android:angle="270" />
<stroke
android:width="3dp"
android:color="@color/grey05" />
<corners
android:radius="3dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
<item>
<shape>
<gradient
android:endColor="@color/white1"
android:startColor="@color/white2"
android:angle="270" />
<stroke
android:width="3dp"
android:color="@color/grey05" />
<corners
android:radius="3dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
</selector>
И я использовал в моем макете main.xml, как этот
<Button android:id="@+id/button1"
android:layout_alignParentLeft="true"
android:layout_marginTop="150dip"
android:layout_marginLeft="45dip"
android:textSize="7pt"
android:layout_height="wrap_content"
android:layout_width="230dip"
android:text="@string/welcomebtntitle1"
android:background="@drawable/custombutton"/>
Надеюсь, это поможет. Вик прав.
EDIT: Вот colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="yellow1">#F9E60E</color>
<color name="yellow2">#F9F89D</color>
<color name="orange4">#F7BE45</color>
<color name="orange5">#F7D896</color>
<color name="blue2">#19FCDA</color>
<color name="blue25">#D9F7F2</color>
<color name="grey05">#ACA899</color>
<color name="white1">#FFFFFF</color>
<color name="white2">#DDDDDD</color>
</resources>
Ответ 3
Вы должны поместить файл selector.xml в папку drwable.
Затем написать:
android:background="@drawable/selector"
.
Это заботится о прессованных и сосредоточенных состояниях.
Ответ 4
в Mono Android вы можете использовать фильтр следующим образом:
your_button.Background.SetColorFilter(new Android.Graphics.PorterDuffColorFilter(Android.Graphics.Color.Red, Android.Graphics.PorterDuff.Mode.Multiply));