我想创建多个horizontalgridview,每个gridview上面都有标题。我已经成功完成了,结果是我想要的,但我的应用程序变得如此沉重。
我目前的观点是这样的:
我有一个LinearLayout,它包含textview和horizontalgridview。我们称之为item_layout
我将动态地将多个item_layout添加到main_layout中的自定义LinearLayout(我将其命名为SectionedView)。代码大致是这样的(不是我的真实代码):
public class SectionedView extends LinearLayout{
...
public void setData(ArrayList<Object> object){
for(Object o:object){
View view = ...
title = (TextView)view.findViewById(R.id.title);
gridView = (GridView)view.findViewById(R.id.content);
title.setText(o.getTitle());
adapter = new Adapter(o.getItems());
gridView.setAdapter(adapter);
addView(view);
}
}
...
}
main_layout中的自定义LinearLayout位于ScrollView内。
这个是main_layout里面的LinearLayout的例子(基本上和以前的图像一样)。
我的问题是,是否有人知道更好的解决方法,如何以及为什么? 谢谢!
修改: 我正在创建一个Android TV应用,所以我需要关注每个项目以进行导航。但我在RecyclerView中尝试过RecyclerView,内部的RecyclerView无法获得焦点:(
答案 0 :(得分:0)
基本上,您的布局看起来像Google Play当前设计。您可以通过使用包含Horizontal RecyclerViews和TextView作为标题的Single RecyclerView来实现此目的。
答案 1 :(得分:0)
尝试使用TwoWayGridView
。它可以用作普通Android GridView的替代品。可以将Android GridView配置为水平或垂直滚动。
属性:
以下是演示布局中的一个示例,其中配置为纵向垂直滚动并横向滚动:
<?xml version="1.0" encoding="utf-8"?>
<com.jess.ui.TwoWayGridView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#E8E8E8"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
app:cacheColorHint="#E8E8E8"
app:columnWidth="80dp"
app:rowHeight="80dp"
app:numColumns="auto_fit"
app:numRows="auto_fit"
app:verticalSpacing="16dp"
app:horizontalSpacing="16dp"
app:stretchMode="spacingWidthUniform"
app:scrollDirectionPortrait="vertical"
app:scrollDirectionLandscape="horizontal"
app:gravity="center"/>
答案 2 :(得分:0)
首先,您需要使用Vertical LayoutManager创建RecyclerView。 recyclerView项目将是TextView(标题)和带有水平LayoutManager的RecyclerView。 在水平的RecyclerView中,您将放置您的内容。
要让RecyclerView的项目获得焦点,您需要将android:descendantFocusability="afterDescendants"
放入RecyclerView。
对于您可能需要添加的项目:
android:focusable="true"
android:focusableInTouchMode="true"
android:clickable="true"
初始焦点可能有问题,但在这种情况下,您需要在需要开始聚焦的视图中使用yourView.requestFocus()
手动设置它。
然后只需为RecyclerView项目添加一个Drawable,指示它是否有焦点。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/your_pressed" /> <!-- pressed -->
<item android:state_focused="true"
android:drawable="@drawable/your_focused" /> <!-- focused -->
<item android:state_hovered="true"
android:drawable="@drawable/your_hovered" /> <!-- hovered -->
<item android:drawable="@drawable/your_default" /> <!-- default --> </selector>