Фокус в макете GridView - PullRequest
       31

Фокус в макете GridView

4 голосов
/ 16 апреля 2011

В моем приложении для Android у меня есть макет GridView с набором кнопок.Проблема в том, что я не могу правильно установить фокусировку (я имею в виду курсор, управляемый джойстиком на устройстве Android) на кнопках.Я могу описать мою проблему с помощью рисунка:

Focus in GridView layout

Я установил для кнопок GridView динамически в коде в BaseAdapter, используя LayoutInflater.В коде я установил текст кнопки, изображение (CompoundDrawable) и цвет фона, потому что мои кнопки работают как флажки (синий фон означает проверенный).

Кажется, что программа фокусирует поле сетки, а не саму кнопку.Я имею в виду что-то вроде ячейки таблицы, а не кнопки в таблице.Поскольку цвет фокуса по умолчанию (зеленый), я установил синий цвет в селекторе.Фокус пресса тоже не работает.И фокус явно за кнопкой, за пределами кнопки.Может кто-нибудь помочь мне с этой проблемой, пожалуйста?Код моих макетов XML:

main.xml:

...
<GridView
    android:id="@+id/channels"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="6dip"
    android:verticalSpacing="10dip"
    android:horizontalSpacing="10dip"
    android:numColumns="auto_fit"
    android:columnWidth="60dip"
    android:stretchMode="columnWidth"
    android:gravity="center"        
    android:background="@color/container_main">
</GridView>
...

channel.xml:

<Button
    android:id="@+id/channel"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:gravity="center_horizontal"         
    android:background="@color/willBeSetInAdapter" <!-- white/blue/darkblue focus background -->
    android:drawableTop="@drawable/willBeSetInAdapter" <!-- icon -->
    android:drawablePadding="0dip"         
    android:text="WillBeSetInAdapter" <!-- label text -->
    android:textColor="@color/text_container_main"
    android:textSize="12sp" 
    android:focusable="true" 
    android:focusableInTouchMode="false">
</Button>

Я пытался установить параметры фокуса в кнопке, а также в GridView.и много чего перепробовал, но, к сожалению, все равно не работает: (

Ответы [ 2 ]

10 голосов
/ 24 ноября 2011

Параметр android: downndantFocusability = "afterDescendants" для GridView решил мою проблему .Потому что программа сфокусирована на поле сетки, а не на самой кнопке.При использовании параметра lessndantFocusability я запрещаю фокусировать поле сетки и разрешаю фокусировать только кнопки.

1 голос
/ 16 апреля 2011

Вы пробовали установить android:drawSelectorOnTop="true" для вашего GridView?

...