Исправлено: "Android: обнаружение фокуса/нажатый цвет"
Я пытаюсь определить фокус/нажатый цвет для кнопки и других элементов.
Это необходимо, потому что я разрабатываю новые компоненты, и важно, чтобы они выглядели как часть платформы.
Эти цвета являются ORANGE на android sdk и GREEN на HTC SenseUI.
Если бы я мог обнаружить этот цвет, мой компонент будет выглядеть как часть платформы на обеих версиях.
Кто-нибудь знает, как это сделать?
Можно создать "селектор", который использует настраиваемое изображение для стандартного состояния и платформы по умолчанию для фокуса/выбора.
Чтобы сделать это, выполните следующие действия:
1) создать файл xml с селектором в "res/drawable" (например, "red_button.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="@android:drawable/btn_default" >
</item>
<item android:state_focused="true"
android:drawable="@android:drawable/btn_default" >
</item>
<item
android:drawable="@drawable/btn_default_red" >
</item>
</selector>
2) из папки ".../android-sdk-mac/platform/android-1.5/data/res/drawable/" сделать снимок "btn_default_pressed.9.png" и изменить цвет по своему усмотрению (мне нужно было измените его на красный и для этого GIMP достаточно).
3) поместите измененное изображение в "res/drawable" (например, с именем "btn_default_red.9.png" )
4) определить кнопку:
<Button
android:id="@+id/info_button"
android:layout_width="wrap_content"
android:layout_height="37dip"
android:layout_marginTop="1dip"
android:background="@drawable/red_button"
android:text="[Info]" />
Что все.
Это результат:
alt text http://img200.imageshack.us/img200/1349/custombutton.png
Ответы
Ответ 1
У меня тоже была эта проблема. Как уже говорилось, проблема в том, что фоны - это не простые цвета, они - Drawables, которые могут принимать всевозможные проявления. Тем не менее, я нашел работу, которая может помочь. Если ваш пользовательский компонент выглядит как уже существующий, например. запись Button или ListView, вы можете просто украсть свой фон/селектор и установить это как фон для своего настраиваемого компонента. Например, в своем конструкторе пользовательских компонентов:
setBackgroundDrawable(new Button(context).getBackground());
или для фона, более подходящего для спискообразных компонентов:
setBackgroundDrawable(new ListView(context).getSelector());
Вы можете немного оптимизировать этот код, но вы получите эту идею.
Ответ 2
Это не цвета. Это несколько изображений с девятью патчами из StateListDrawable
. Я скептически отношусь к тому, что вы сможете определить, что такое цвет, надежный способ, который будет работать во всех устройствах и во всех версиях Android.
Ответ 3
Это почти дубликат: Цвет экрана Android ListView
Кроме того, почему вам нужно определять цвета? Просто ничего, и ваши виджеты будут вписываться в существующую внешность платформы.
Или, если вы пишете настраиваемую тему, просто наследуйте ее от android:Theme
.