首页 > 代码库 > Android 让GridView的高度为Wrap_content根据内容自适应高度
Android 让GridView的高度为Wrap_content根据内容自适应高度
From:http://www.jayway.com/2012/10/04/how-to-make-the-height-of-a-gridview-wrap-its-content/
如果把GridView放到一个垂直方向滚动的布局中,设置其高度属性为 wrap_content ,则该GridView的高度只有一行内容,其他内容通过滚动来显示。 如果你想让该GridView的高度为所有行内容所占用的实际高度,则可以通过覆写GridView的 onMeasure 函数来修改布局参数:
package com.jayway.components;import android.content.Context;import android.util.AttributeSet;import android.widget.GridView;public class MyGridView extends GridView { public MyGridView(Context context) { super(context); } public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } public MyGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int heightSpec; if (getLayoutParams().height == LayoutParams.WRAP_CONTENT) { // The great Android "hackatlon", the love, the magic. // The two leftmost bits in the height measure spec have // a special meaning, hence we can‘t use them to describe height. heightSpec = MeasureSpec.makeMeasureSpec( Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); } else { // Any other height should be respected as is. heightSpec = heightMeasureSpec; } super.onMeasure(widthMeasureSpec, heightSpec); }}
activity_main.xml<?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="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <!-- Header One --> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:focusable="true" android:text="Header 1" /> <!-- Custom grid view holding the ‘Group 1‘ items --> <com.jayway.components.MyGridView android:layout_width="match_parent" android:layout_height="wrap_content" android:numColumns="3" android:stretchMode="columnWidth" android:id="@+id/grid_view_1" /> <!-- Header 2 --> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Header 2" /> <!-- Custom grid view holding the ‘Group 2‘ items --> <com.jayway.components.MyGridView android:layout_width="match_parent" android:layout_height="wrap_content" android:numColumns="3" android:stretchMode="columnWidth" android:id="@+id/grid_view_2" /> </LinearLayout></ScrollView>
MainActivity.javapackage com.jayway.app;import java.util.ArrayList;import android.os.Bundle;import android.widget.ArrayAdapter;import android.app.Activity;import com.jayway.components.MyGridView;public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArrayList labels = new ArrayList(); for (int i = 0; i < 24; i++) { labels.add("Item " + i); } ArrayAdapter adapter = new ArrayAdapter( this, android.R.layout.simple_list_item_1, labels); MyGridView grid1 = (MyGridView) findViewById(R.id.grid_view_1); grid1.setAdapter(adapter); MyGridView grid2 = (MyGridView) findViewById(R.id.grid_view_2); grid2.setAdapter(adapter); }}
使用原生GridView实现的最终效果如下图:
使用修改过的GridView效果如下图:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。