Применить другой стиль к кнопке при нажатии - PullRequest
9 голосов
/ 16 сентября 2010

Есть ли способ применить стиль к кнопке при ее нажатии?

Если у меня есть стиль в style.xml :

<resources>
    <style name="test">
        <item name="android:textStyle">bold</item>
    </style>
</resources>

селектор в button.xml :

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/test_pressed"
              style="@style/test"
          android:state_pressed="true"/>
    <item android:drawable="@drawable/test_focused"
          android:state_focused="true"/>
    <item android:drawable="@drawable/test_normal"/>
</selector>

тогда как мне ссылаться на button.xml в моем макете?

<Button
        ...
        android:???="button"/>

Спасибо!

Ответы [ 7 ]

7 голосов
/ 10 октября 2011

Ромэн Гай говорит, что это невозможно:

http://code.google.com/p/android/issues/detail?id=8941

"Селектор работает только для рисования, а не для текстовых появлений. В настоящее время не планируется делать это."

5 голосов
/ 24 сентября 2010

Этого можно добиться, используя определение кнопки XML.

Создайте файл XML в своей папке для рисования следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

        <item android:state_pressed="true"
        android:drawable="@drawable/green_button" /> 

        <!-- <item android:state_focused="true"
        android:drawable="@drawable/button_focused" /> --> 

        <item android:drawable="@drawable/black_button" />
</selector>

Как видите, это позволяет определить различныеИзображения кнопок для использования в различных состояниях (black_button, green_button и т. д. также должны быть файлами .PNG в вашей папке для рисования)

Теперь из файла layout.xml можно просто установить фон кнопки, чтобы он указывал на кнопку.селектор:

<Button android:text="Play" android:id="@+id/playBtn"
            android:background="@drawable/button_selector"
            android:textColor="#ffffff" />

На XML селектора можно затем ссылаться из нарисованной папки, как любой файл изображения.

2 голосов
/ 21 сентября 2016

Вы можете использовать Ресурс списка состояний цвета

Пример по ссылке:

Файл XML сохранен в файле 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>

Этот формат XML будет применять список цветов к представлению:

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/button_text"
    android:textColor="@color/button_text" />
1 голос
/ 12 апреля 2018

Чтобы изменить кнопку Android при нажатии / нажатии цвета:

Определение значения цвета

Чтобы определить значение цвета, необходимо создать файл colors.xml в своем проектеЗначения каталога и добавьте следующее.res / values ​​/ colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="button_pressed">#ff8a00</color>
    <color name="button_focused">#ff8a00</color>
    <color name="button_default">#1c76bb</color>
</resources>

Создание файла XML в каталоге Drawable

Создайте файл button_background.xml в папке для рисования и нажмите кнопку добавления /нажал, сфокусирован и цвет по умолчанию.Окончательный код файла button_background.xml выглядит следующим образом.res / drawable / button_background.xml

<?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/button_pressed"/> <!-- pressed -->
    <item android:state_focused="true"
        android:drawable="@color/button_focused"/> <!-- focused -->
    <item android:drawable="@color/button_default"/> <!-- default -->
</selector>

Добавление кнопок

res / activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/button_background"
        android:text="Click Me"
        android:textColor="#fff" />

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button1"
        android:layout_marginTop="16dp"
        android:background="@drawable/button_background"
        android:text="Click Me"
        android:textColor="#fff" />

</RelativeLayout>

Источник здесь .

0 голосов
/ 24 сентября 2010

Чтобы обратиться к селектору, вы должны указать его в качестве фона для этой кнопки.

<Button
     android:background="@drawable/button"
/> 

А для Bold при нажатии я тоже не пробовал, но, возможно, вы можете упомянуть стиль текста в вашем селекторе, т.е. ссылаясь на стиль из него:

android:textStyle="bold"

Если это также не работает, вы можете сделать это с помощью кнопки onClick ().

0 голосов
/ 17 сентября 2010
<Button
        android:background="@drawable/button"/>
0 голосов
/ 16 сентября 2010

Я не пробовал, но, вероятно, вы могли бы просто включить android:id="button" в ваш селектор.

...