我在使用GridView時遇到了一些麻煩。首先,如果物品太高,它會裁剪最後一排。 有趣的是,我在我使用的自定義適配器的getView()
中計算它們的高度。我只想讓GridView顯示5行,其高度取決於它的高度。將父高度和dayHeight打印到控制檯會給出正確的值。Android GridView作物項目並沒有正確更新它們
適配器類:對包含在GridView片段
public View getView(int position, View convertView, ViewGroup parent) {
View day = convertView;
if (day == null) {
day = inflater.inflate(R.layout.calendar_day_gridcell, parent, false);
}
int dayHeight = parent.getHeight()/5; // month can spread over at most 5 weeks
TextView tvDay = (TextView) day.findViewById(R.id.calendar_grid_cell);
tvDay.setHeight(dayHeight);
// set text and background colour of tvDay depending on position
}
XML佈局
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<
TextView />
<LineaLayout /> <!-- horizontal layout with 7 children -->
<GridView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1.0"
android:id="@+id/calendar_grid"
android:numColumns="7"/>
</LinearLayout>
此外我有根據位置我設置一定的文字顏色的問題爲網格單元格。
所以我們假設我希望所有具有position < X1
的元素都有藍色文本,其他元素爲紅色。當我生成一個新的數據集(在調用notifyDataSetChanged()
的公共成員函數中完成)和X2 < X1
時,那麼所有包含position < X1
的項目都具有藍色文本,即使其中一些文本應該具有紅色文本(即位置爲X1 - X2
的文本)。但是背景顏色設置正確。有任何想法嗎?
編輯
我發現裁剪被android.support.design.widget.CoordinatorLayout
引起的。我使用AndroidStudio設置了該項目,並使用上述佈局創建了activity_main.xml。將其更改爲LinearLayout可修復裁剪問題。 但是,第二個問題依然存在。
GridView的重點在於,如果它們的物體呈現的不止可以在顯示器上顯示,它將滾動您的物品。如果你不想滾動,而只是想要一個二維視圖,爲什麼不用一個GridLayout呢? –
@DougStevenson原因GridView有一個OnItem(長)ClickListener,afaik,GridLayout沒有?我認爲GridView更有效率,因爲它重用了佈局?可能不是什麼大事,因爲我只顯示32項,但仍然是。除此之外,我的GridView甚至不會滾動,直到完全看到最後一行。它只是削減了最後的項目。 – Ricky