изменить цвет текста кнопки при нажатии

Я сделал свою кнопку прозрачной, поэтому я хотел бы изменить цвет текста кнопки при нажатии кнопки. Можно ли это сделать, используя только xml-файлы?

5 ответов


см. Государственный Список в этой документации...Катры Ресурсов.

вы можете определить два разных Button xml-файлы один для прозрачного состояния "по умолчанию", а другой с кнопкой красного цвета для вашего состояния "нажата". Затем вы определяете selector который переключает привлекаемые ресурсы в разных состояниях.

EDIT: согласно комментарию devunwired, ресурс списка состояний цвета, вероятно, более подходит для изменение цвета, а не сам drawable.


Да, вы можете сделать это так:

layout / main_layout.XML-код:

.....
    <Button
      android:id="@+id/button"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="bonjour !"
      android:textColor="@color/button_text_color"
    />
.....

цвет/button_text_color.XML-код:

   <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:color="#c0c0c0" android:state_pressed="true"/>
     <item android:color="#ffffff"/>
   </selector>

мне нравится решение, предложенное Константином буровым в другом вопросе:Android настроенная кнопка; изменение цвета текста

вы можете управлять больше состояний, чем просто нажата и нормально. Но это должно решить проблему.

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Focused and not pressed -->
<item android:state_focused="true" 
      android:state_pressed="false" 
      android:color="#ffffff" />

<!-- Focused and pressed -->
<item android:state_focused="true" 
      android:state_pressed="true" 
      android:color="#000000" />

<!-- Unfocused and pressed -->
<item android:state_focused="false" 
      android:state_pressed="true" 
      android:color="#000000" />

<!-- Default color -->
<item android:color="#ffffff" />
</selector>

затем вы можете использовать этот селектор, отображаемый в вашей кнопке, изменяя атрибут цвета текста, как показано ниже. Обратите внимание, что селектор в приведенном ниже примере называется "button_text_color"

андроид:свойства textColor="@холст/button_text_color"

используя тот же drawable подход, вы также можете решить цвет фона кнопки. Просто помните, что в селекторе вместо использования атрибута "android:color" вам нужно использовать атрибут "android:drawable", как показано ниже.

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Focused and not pressed -->
<item android:state_focused="true" 
      android:state_pressed="false" 
      android:drawable="#ffffff" />

<!-- Focused and pressed -->
<item android:state_focused="true" 
      android:state_pressed="true" 
      android:drawable="#000000" />

<!-- Unfocused and pressed -->
<item android:state_focused="false" 
      android:state_pressed="true" 
      android:drawable="#000000" />

<!-- Default color -->
<item android:drawable="#ffffff" />
</selector>

а затем в самой кнопке, обратите внимание, что на этот раз имя селектора "button_background"

android: background= "@drawable / button_background"


вы должны сделать это в коде. Попробуйте это:

    mBtn = ((Button) findViewById( R.id.button1 ));
    mBtn.setOnClickListener( new OnClickListener() {

        @Override
        public void onClick(View v) {
            mBtn.setTextColor( Color.RED );
        }
    });

объявить:

private Button mBtn;

необходимо указать @drawable xml-ресурс в textColor attributte

вот пример: Android настроенная кнопка; изменение цвета текста