Leanback焦点问题

时间:2017-08-11 11:59:04

标签: android android-tv leanback

大家好,我正在处理应用程序,我的布局结构如下:

  RelativeLayout:

   CompoundView: 

   CompoundView:
          RelativeLayout:
            Button
            Button
            RecyclerView

   BrowseFragment:
          Only rows

我的问题是当我到达第一行浏览片段及其中的第一项并且我想上升(D-PAD-UP)来聚焦按钮它什么都不做它只有当它工作时我向左推(D-PAD-LEFT)。有人有解决方案吗?

2 个答案:

答案 0 :(得分:2)

因为某些原因问题出在BrowseFrameLayout中,为了解决这个问题,我不得不重写onFocusSearchListener并自己管理焦点。

在我扩展的BrowseFragment中,我有这个方法:

public void workaroundFocus(){
    if(getView() != null) {
        View viewToFocus  = getActivity().findViewById(R.id.view_to_focus);
        BrowseFrameLayout browseFrameLayout = getView().findViewById(android.support.v17.leanback.R.id.browse_frame);
        browseFrameLayout.setOnFocusSearchListener((focused, direction) -> {
            if (direction == View.FOCUS_UP) {
                return viewToFocus;
            }
            else {
                return null;
            }
        });
    }
}

然后:

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    workaroundFocus();
    /*
      Rest of the code
    */
}

瞧它有效。

答案 1 :(得分:1)

由于您使用的是RelativeLayout,因此您应按照要导航的顺序布置组件。

使用RelativeLayout参考文档中提供的XML属性,您也可以建立导航订单:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="16dp"
    android:paddingRight="16dp" >
    <EditText
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/reminder" />
    <Spinner
        android:id="@+id/dates"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/name"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@+id/times" />
    <Spinner
        android:id="@id/times"
        android:layout_width="96dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/name"
        android:layout_alignParentRight="true" />
    <Button
        android:layout_width="96dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/times"
        android:layout_alignParentRight="true"
        android:text="@string/done" />
</RelativeLayout>

此处dates Spinner低于name EditText以及times Spinner左侧的times组件低于namedone Button低于times。见下图:

enter image description here

有关更多与电视相关的详细信息,请参阅Build Basic TV Layouts指南。