如何在 Android TV 中编写自定义 Leanbacks VerticalGridView?
How to write a custom Leanbacks VerticalGridView in Android TV?
我想将 Leanback
库的详细信息屏幕中的 Row
实现到自定义屏幕中。该行将是下面的行。我已经实施了 HorizontalGridView
并设法显示了项目。
我的布局:
<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
。我该如何解决?
如果您的视图是自定义视图,请确保将以下内容添加到自定义视图中以获得焦点:
setFocusable(true);
setFocusableInTouchMode(true);
自定义视图中的问题是您需要将 java code.Add 适配器中的焦点更改监听器添加到适配器项的根视图中。
在适配器项目的 oncreate 中为根视图添加焦点。
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
}
}
});
要解决此问题,请使用 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);
试着放
android:descendantFocusability="afterDescendants"
在您的 .xml
文件中
<android.support.v17.leanback.widget.HorizontalGridView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:descendantFocusability="afterDescendants"/>
我想将 Leanback
库的详细信息屏幕中的 Row
实现到自定义屏幕中。该行将是下面的行。我已经实施了 HorizontalGridView
并设法显示了项目。
我的布局:
<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
。我该如何解决?
如果您的视图是自定义视图,请确保将以下内容添加到自定义视图中以获得焦点:
setFocusable(true);
setFocusableInTouchMode(true);
自定义视图中的问题是您需要将 java code.Add 适配器中的焦点更改监听器添加到适配器项的根视图中。
在适配器项目的 oncreate 中为根视图添加焦点。
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
}
}
});
要解决此问题,请使用 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);
试着放
android:descendantFocusability="afterDescendants"
在您的 .xml
文件中
<android.support.v17.leanback.widget.HorizontalGridView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:descendantFocusability="afterDescendants"/>