Как изменить цвет фона кнопки в Android с помощью темы Holo? - PullRequest
1 голос
/ 15 сентября 2011

Работая над приложением для Android, я столкнулся с этой проблемой.Я не могу изменить стиль кнопки при использовании голо-темы для Android 3.0.

В моем файле theme.xml это:

 <resources>
     <style name="Test" parent="android:Theme.Holo">
     </style>
 </resources>

Мой файл manifest.xml имеет следующее:

<application android:icon="@drawable/my_icon"
    android:label="@string/app_name" android:debuggable="false" android:theme="@style/Test">

Если я запущу приложение в этот момент, я получу кнопки по умолчанию в стиле Holo.Но я хочу изменить их цвет.Кажется, это проблема прозрачности, но я не уверен, где искать.

Я попытался создать собственный стиль кнопки.Что-то простое, как это:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_selected="true" android:color="@android:color/black" />
        <item android:state_focused="true" android:color="@android:color/white" />
        <item android:state_pressed="true" android:color="@android:color/white" />
        <item android:color="#f8f8f8" />
    </selector>

Это не работает для меня, хотя.Каждая комбинация, которую я пробовал, не работает.

Я знаю, что она должна наследовать какое-то свойство, делающее его прозрачным, но я не знаю, какое именно.

Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 21 февраля 2012

Попробуйте использовать android: drawable вместо android: color.

, например

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:drawable="@android:color/black" />
    <item android:state_focused="true" android:drawable="@android:color/white" />
    <item android:state_pressed="true" android:drawable="@android:color/white" />
    <item android:drawable="#f8f8f8" />
</selector>
0 голосов
/ 04 апреля 2012

Так как кнопка имеет нарисованный фон, вы можете подкрасить этот фон. Следует отметить, что этот фон является полупрозрачным, поэтому оттенок не будет 100%. Тем не менее, на темной теме Холота это выглядит довольно красиво.

Вот как вы это делаете:

Drawable bgDrawable = button.getBackground();

ColorMatrix cmDesat = new ColorMatrix();
cmDesat.setSaturation( 0 );
ColorMatrix cm = new ColorMatrix();
cm.set( new float[]{
  r, 0, 0, 0, 0, 
  0, g, 0, 0, 0, 
  0, 0, b, 0, 0, 
  0, 0, 0, 1, 0
} );
cmDesat.postConcat( cm );
bgDrawable.setColorFilter( new ColorMatrixColorFilter( cmDesat ) );

Попробуйте поэкспериментировать с матрицей, поскольку она может дать разные результаты. Также вместо ColorMatrixColorFilter вы можете просто использовать LightingColorFilter, который проще в обращении, но не такой гибкий.

...