How to support dpad controls for RecyclerView

后端 未结 3 1524
野性不改
野性不改 2021-02-20 08:53

I am currently trying to port Android mobile app to Android TV. I have a RecyclerView that seems to be displaying correctly in my Android TV app. I am using linearLayout for my

相关标签:
3条回答
  • 2021-02-20 09:29

    Make root view of your item layout android:focusable="true"

    0 讨论(0)
  • 2021-02-20 09:35

    Try setting android:descendantFocusability="afterDescendants" on the RecyclerView

    0 讨论(0)
  • 2021-02-20 09:39

    What my code was having problems doing was giving focus to the first child of the recyclerview. Once it was there it seemed to handle dpad controls well.

    Without seeing more of your code, this is the best suggestion. Please provide your activity and full xml if this doesn't work. Good Luck!

    In your xml:

          <!-- make sure this is an attribute for the layout that would
                 get focus before the recycler view -->
           android:nextFocusDown="@+id/RecyclerView"
    
    
    
       <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          android:id="@+id/RecyclerView"
          android:layout_width="240dp"
          android:layout_height="match_parent"
          android:layout_gravity="left"
          android:background="@color/nav_bg"
          android:scrollbars="vertical"
          tools:showIn="@layout/activity_content" 
    
          android:focusable="true"
      />
    

    In your activity:

        public static final int BANNER = 0;
        public static final int RECVIEW1 = 1;
        public static final int RECVIEW2 = 2;
        private static int currFocus = 0;
    
        //you will need to do something similar to this listener for all focusable things
        RecyclerView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                @Override
                public void onFocusChange(View v, boolean hasFocus) {
                    Log.i("ONFOCUSCHANGE- reclist", "focus has changed I repeat the focus has changed! current focus = " + currFocus);
                    if(currFocus != RECVIEW1){
                        currFocus = RECVIEW1;
                        RecyclerView.getChildAt(0).requestFocus();
                    }
                }
            });
    
    0 讨论(0)
提交回复
热议问题