Keyboard navigation with Android GridView doesn't scroll grid -
i'm trying use keyboard navigate through gridview of items.
in short demo, contains gridview (containing item views android:focusable="true"), can see none of items gain focus - grid thing scrolls (the items don't turn orange).

adding android:descendantfocusability="afterdescendants" allows each item focused first, still, doesn't continue scroll gridview can navigate down:

clicking on item (with mouse or pressing return if item focused, after descendent focusability fix) turns item blue - indicating it's in pressed state.

@layout/activity_my.xml:
<?xml version="1.0" encoding="utf-8"?> <gridview xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" android:numcolumns="2" /> @layout/dummy_item.xml:
<?xml version="1.0" encoding="utf-8"?> <textview xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dummy_item_parent" android:layout_width="match_parent" android:layout_height="150dp" android:gravity="center" android:focusable="true" android:clickable="true" android:background="@drawable/item_background" /> @drawable/item_background.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:color/holo_blue_light" /> <item android:state_focused="true" android:drawable="@android:color/holo_orange_light" /> <item android:drawable="@android:color/holo_red_light" /> </selector> myactivity.java (with listadapter):
public class myactivity extends activity { @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_my); abslistview listview = (abslistview) findviewbyid(r.id.listview); listview.setadapter(new dummyadapter(getlayoutinflater())); } private static class dummyadapter extends baseadapter { private static final int count = 25; private final layoutinflater layoutinflater; dummyadapter(layoutinflater layoutinflater) { this.layoutinflater = layoutinflater; } @override public int getcount() { return count; } @override public string getitem(int position) { return "item " + position; } @override public long getitemid(int position) { return position; } @override public view getview(int position, view convertview, viewgroup parent) { view view = convertview; if (view == null) { view = layoutinflater.inflate(r.layout.dummy_item, parent, false); } ((textview) view).settext(getitem(position)); return view; } } } swapping gridview listview, without changing adapter, or item views/item view attributes, behave expected - items can focused , listview scroll bottom, items can focused using keyboard input. also, using recyclerview linearlayoutmanager / gridlayoutmanager work correctly.
i have tried on api 16 , 22 same results. have tried settings android:descendantfocusability attribute on gridview afterdescendents same result.
i tried code , doesn't work gridview, said, have issue listview. listview scrolls correctly, first item of every page highlighted.
with these little modifications can achieve effect want on both gridview , listview.
remove android:descendantfocusability in activity_my.xml:
<?xml version="1.0" encoding="utf-8"?> <gridview xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" android:numcolumns="2" /> remove android:focusable in dummy_item.xml:
<?xml version="1.0" encoding="utf-8"?> <textview xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dummy_item_parent" android:layout_width="match_parent" android:layout_height="150dp" android:gravity="center" android:clickable="true" android:background="@drawable/item_background" /> change android:state_focused android:state_selected in item_background.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:color/holo_blue_light" /> <item android:state_selected="true" android:drawable="@android:color/holo_orange_light" /> <item android:drawable="@android:color/holo_red_light" /> </selector>
Comments
Post a Comment