Фоновый цвет виджета Android при фокусировке

#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);