• 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.java
    
    package 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);
        }
    }



  • 相关阅读:
    arm gdbserver armlinuxgdb
    建立非模态对话框与在线程中建立非模态对话框
    AutoLock C++
    Uboot bootcmd 和bootargs
    SetRegistryKey
    飞凌OK6410 uboot支持网络
    uboot 源码修改 bootcmd,IP ,BOOTARGS等参数
    TextBox(richTextBox) 光标和滚动条到文本末尾
    Windbg中使用查找内存并设置访问断点
    opencv EXAMPLES 编译 VS2010 (C++)
  • 原文地址:https://www.cnblogs.com/niray/p/3884939.html
Copyright © 2020-2023  润新知