0

我想創建多個horizo​​ntalgridview,每個gridview標題上面有標題。我已經成功完成了,結果是根據我想要的,但是我的應用程序變得如此沉重。android-多個horizo​​ntalgridview標題

我目前的觀點是這樣的:

我有一個包含一個TextView和horizo​​ntalgridview一個LinearLayout中。我們將其稱爲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

的和這個人是例如內部main_layout所述的LinearLayout的(基本上是與以前的圖像相同)。

enter image description here

我的問題是沒有人知道這個更好的解決辦法,怎麼了,爲什麼呢? 謝謝!

編輯: 我正在創建一個Android TV應用程序,所以我需要專注於每個項目進行導航。但我已經試過RecyclerView內RecyclerView,內RecyclerView沒能集中:(

回答

0

首先,您需要使用垂直LayoutManager創建RecyclerView。 recyclerView項目將是一個TextView(標題)和一個帶有水平佈局管理器的RecyclerView。 在水平的RecyclerView裏面,你會放置你的內容。

要讓RecyclerView的物品獲得焦點,您需要在您的RecyclerView中放入android:descendantFocusability="afterDescendants"

而對於項目,你可能需要添加:

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> 
+0

我正在使用Horizo​​ntalGridView(這是leanback庫中的回收視圖)而不是使用水平佈局管理器的RecyclerView,但基本上它們都是我認爲的相同。 「後人」部分很重要,因爲內部回收站內的物品如果沒有這些,就無法正確對焦!謝謝! – Kyk

0

基本上您的佈局看起來像谷歌播放電流design.You可以通過使用含有水平RecyclerViews用的TextView作爲標題單RecyclerView實現這一目標。

+0

嗨!我只是嘗試了你所說的,但是Horizo​​ntalGridView裏面不能獲得焦點。我忘了提及我正在創建一個電視應用程序,所以我需要關注每個項目 – Kyk

+0

你的意思是通過focus.i沒有得到it.i沒有任何關於電視應用程序的想法。 – Joker

0

嘗試使用TwoWayGridView,它可以用作普通Android GridView的替代品,可以將Android GridView配置爲水平或垂直滾動​​。

屬性:

  • scrollDirectionPortrait(垂直|水平) - 當設備處於縱向取向
  • scrollDirectionLandscape網格將滾動的方向(垂直|水平) - 方向上的網格將在設備處於橫向方向時滾動
  • numRows(整數) - 在橫向滾動時的網格視圖中的行數荷蘭國際集團模式
  • verticalSpacing(尺寸) - 網格行之間的垂直間距的高度
  • rowHeight的(尺寸) - 每個網格行

這裏的高度是從演示佈局的示例,其中它配置爲在縱向和橫向上縱向滾動:

<?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"/> 
相關問題