[Xamarin] GridView 高度使用 wrap_content
2016-07-26
為何要這樣做呢? 因為GridView 內建Scroll ,但是我希望用外層的ScrollView 來控管,但是這時候你會發現會長這樣
就算妳的height 設定成 wrap_content 也沒有用,依然會長這樣,這時候我們需要繼承GridView 來改寫一些東西
1. 我們參考這一篇的GridView 的sample ( http://no2don.blogspot.com/2016/07/xamarin-gridview.html )
2. 之後我們自己建一個class 繼承GridView DonmaGridView.cs :
using System;
using Android.Content;
using Android.Runtime;
using Android.Util;
using Android.Views;
using Android.Widget;
namespace TwoColumnListView
{
public class DonmaGridView:GridView
{
protected DonmaGridView(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
{
}
public DonmaGridView(Context context) : base(context)
{
}
public DonmaGridView(Context context, IAttributeSet attrs) : base(context, attrs)
{
}
public DonmaGridView(Context context, IAttributeSet attrs, int defStyleAttr) : base(context, attrs, defStyleAttr)
{
}
public DonmaGridView(Context context, IAttributeSet attrs, int defStyleAttr, int defStyleRes) : base(context, attrs, defStyleAttr, defStyleRes)
{
}
protected override void OnMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
int tmpHeight;
if (LayoutParameters.Height == LayoutParams.WrapContent)
{
tmpHeight = MeasureSpec.MakeMeasureSpec(int.MaxValue >> 2, MeasureSpecMode.AtMost);
}
else
{
tmpHeight = heightMeasureSpec;
}
base.OnMeasure(widthMeasureSpec, tmpHeight);
}
}
}
3.在View 的部分 改成 用ScollView 去包住她,並且將DonmaGridView 的height 改成 wrap_content
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TwoColumnListView.DonmaGridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:numColumns="2"
android:verticalSpacing="2dp"
android:horizontalSpacing="2dp"
android:scrollbarStyle="insideOverlay"
android:verticalScrollbarPosition="right"
android:scrollbars="vertical" />
</ScrollView>
這樣就正常了,之後妳要做一些特殊動作也可以在ScrollView 上面自己控管。
source : https://www.dropbox.com/s/wvmsoqirv9c50hw/TwoColumnListView_scrollview.7z?dl=0
reference :
https://developer.android.com/guide/topics/ui/layout/gridview.html
https://www.jayway.com/2012/10/04/how-to-make-the-height-of-a-gridview-wrap-its-content/