#android #android-widget #widget #selector
#Android #android-виджет #виджет #селектор
Вопрос:
Я создаю виджет для рабочего стола. Виджет должен приобретать «обычные» цвета фона при нажатии и фокусировке. Прозрачный в других случаях.
Поэтому я определил селектор
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:state_pressed="true"
android:drawable="@drawable/widget_back_pressed" />
<item android:state_focused="false" android:state_pressed="true"
android:drawable="@drawable/widget_back_pressed" />
<item android:state_focused="true" android:drawable="@drawable/widget_back_selected" />
<item android:state_focused="false" android:state_pressed="false"
android:drawable="@drawable/transparent" />
В основном все работает нормально, кроме состояния фокусировки. Если виджет находится на рабочем столе и сфокусирован с помощью d-pad или клавиатуры (в эмуляторе), он не получит выбранный мной цвет. Выбранный цвет работает нормально.
Что не так?
Спасибо и с наилучшими пожеланиями,
До
Комментарии:
1. Виджеты приложений не попадают в фокус, AFAIK.
2. @CommonsWare Виджет GoogleReader изменяет цвет фона
Ответ №1:
У меня была такая же проблема. Я исправил это, сделав мой ImageView фокусируемым и убедившись, что его родительские макеты не были.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@ id/widget"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/transparent" >
<RelativeLayout
android:id="@ id/relativeLayoutWidget1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:id="@ id/logo"
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:maxHeight="72dp"
android:maxWidth="72dp"
android:scaleType="fitXY"
android:background="@drawable/btn_widget_background"
android:src="@drawable/widget_icon" />
</RelativeLayout>
</LinearLayout>
Также убедитесь, что вы правильно настроили свой onClickPendingIntent на элемент focusable, иначе ваш виджет не будет доступен для нажатия с помощью аппаратной кнопки. Итак, в этом случае в вашем AppWidgetProvider:
views.setOnClickPendingIntent(R.id.logo, pendingIntent);