2017-10-06 63 views
1

我想創建一個由15x20 textviews組成的gridview,我希望textviews從下到上填充。例如getChildAt(0)將指向左下方的網格。現在它總是引用左上角的網格。我試過從底部的Android GridView堆棧

android:stackFromBottom="true" 

但它不工作。下面是我的代碼,希望有人可以提供一些見解我做錯了什麼。謝謝!

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/sample_main_layout"> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="313dp" 
    android:layout_weight="0.18"> 

    <GridLayout 
     android:id="@+id/map_grid" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentStart="true" 
     android:columnCount="15" 
     android:descendantFocusability="afterDescendants" 
     android:gravity="center" 
     android:horizontalSpacing="30dp" 
     android:paddingLeft="20dp" 
     android:rowCount="20" 
     android:stackFromBottom="true" 
     android:stretchMode="columnWidth" 
     android:verticalSpacing="30dp"> 

    </GridLayout> 

使用你們建議的一些解決方案,我創建了一個函數來糾正我的網格索引。它將引用最後一個位置的網格。

編輯:

public int correctIndex(int index) { 
    int mul = (int) Math.floor(index /15); 
    int remainder = index%15; 
    remainder = 15-remainder; 
    int correctedIndex = 300-(mul*15+remainder); 
    return correctedIndex; 
    } 

回答

1

您不需要按相反順序填入GridView ..您只需要按相反順序閱讀它。

相反的:

gridView.getChildAt(position); 

用途:

gridView.getChildAt(gridView.getChildCount() - position); 

當然,你應該通過變量替換正在使用

+0

謝謝!這工作!但是我已經加入了一些計算來完成相反的操作! – Jackelll

1

android:stackFromBottom="true"並不意味着你的項目將被放置在相反的順序。

這只是表示如果由於較少的項目而存在額外的差距,空間將留在最上面。

要放置在相反的順序中的項目,你將需要使用覆蓋getItem(int position)方法以相反的順序在GridView的適配器返回項目。

1

爲了使android:stackFromBottom="true"工作,你必須使用<GridView>代替<GridLayout>

1

我可能是錯的,但如果你的東西一樣加載在網格視圖中的數據數組,那麼你可以扭轉陣列加載它之前,還是做什麼@ W0rmH0lesaid上述