Фоновый цвет виджета Android при фокусировке - PullRequest
0 голосов
/ 13 апреля 2011

Я создаю виджет рабочего стола.Виджет должен получать «нормальные» цвета фона при нажатии и фокусировке.Прозрачный в других случаях.

Поэтому я определил селектор

<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 Ответ

0 голосов
/ 27 июня 2012

У меня была такая же проблема.Я исправил это, сделав мой 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 для фокусируемого элемента, иначе ваш виджет не будет кликабельным с аппаратнымкнопка.Так что для этого случая в вашем AppWidgetProvider:

views.setOnClickPendingIntent(R.id.logo, pendingIntent);
...