如何在Android TV中编写自定义Leanbacks VerticalGridView?

时间:2017-11-29 13:55:07

标签: android leanback

我想在Row库的详细信息屏幕中将Leanback实现为自定义屏幕。该行将是下面的那一行。我已经实现了HorizontalGridView,并设法让项目显示出来。

Sample Image

我的布局:

<android.support.v17.leanback.widget.HorizontalGridView
android:id="@+id/detail_related"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

我的Java:

RecyclerView.Adapter mAdapter = new SimilarAssetsAdapter();
mBinding.detailRelated.setAdapter(mAdapter);

我遇到的问题是我无法专注于任何项目,但重点是整个HorizontalGridView。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:0)

如果您的视图是自定义视图,请确保将以下内容添加到自定义视图中以获得焦点:

setFocusable(true);
setFocusableInTouchMode(true);

答案 1 :(得分:0)

自定义视图中的问题是您需要在java代码中添加焦点更改侦听器。将适配器内的焦点侦听器添加到适配器项的根视图。

在适配器项的oncreate中为rootview添加焦点。

yourView.setFocusable(true);      
yourView.setFocusableInTouchMode(true);

然后在onBind中添加focuschangeListener。

 yourRootView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {

        if(hasFocus){
           //focus gained
        }else {
          //focus lost
        }
    }
});

答案 2 :(得分:0)

要解决此问题,请使用VerticalGridView代替HorizontalGridView

<android.support.v17.leanback.widget.VerticalGridView
    android:id="@+id/detail_related"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

要将ArrayObjectAdapter设置为VerticalGridView,请使用ItemBridgeAdapter

ItemBridgeAdapter adapter = new ItemBridgeAdapter();
adapter.setAdapter(mRowsAdapter);
adapter.setPresenter(new SinglePresenterSelector(new ListRowPresenter()));
mBinding.detailRelated.setAdapter(adapter);

答案 3 :(得分:0)

试着放 android:descendantFocusability="afterDescendants" 在您的 .xml 文件

<android.support.v17.leanback.widget.HorizontalGridView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:descendantFocusability="afterDescendants"/>