android gridview height set

时间:2016-02-23 14:30:12

标签: android gridview

我在scrollview中有一个gridview。应用SimpleAdapter后,gridview的内容(行数)可能会发生变化。但是,gridview的高度保持不变。

您知道如何动态更改gridview的高度吗?我尝试了几种方法来设置gridview的高度,但没有一种方法可以工作。

以下是我的代码的一部分:

RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(400, 500);
p.topMargin = 60;
p.height = 600;
gridView.setLayoutParams(p);

但是通过上述方法,gridview的高度保持不变......

覆盖gridview的onMeasure方法:

@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
    if(isExpanded()){
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);

        ViewGroup.LayoutParams params = getLayoutParams();
        params.height = getMeasuredHeight();
    }else{
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

}   

XML文件的一部分:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/advanced_interface"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="ntu.fyp.sjy.securitycontroller.MainActivity">

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView 
        android:id="@+id/contact_source" 
        android:layout_width="60dp" 
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp" 
        android:text="@string/contact"/>

    <Switch 
        android:id="@+id/contact_source_switch" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"     
        android:layout_alignBaseline="@+id/contact_source" 
        android:layout_alignBottom="@+id/contact_source"
        android:layout_marginLeft="70dp" 
        android:layout_marginTop="40dp"
        android:layout_alignParentRight="true" 
        android:layout_marginRight="26dp"
        android:onClick="contactSourceToggle"/>

    <ntu.fyp.sjy.securitycontroller.MyGridView
        android:id="@+id/contact_source_grid"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/contact_source"
        android:isScrollContainer="false"
        android:numColumns="1"
        android:verticalSpacing="1dp"/>

</RelativeLayout>

</ScrollView>

以下是要在gridview中调整的xml代码:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">


<TableLayout 
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" 
android:shrinkColumns="0">

<TableRow
    android:id = "@+id/source_tableRow1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/source_image"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:paddingLeft="10dp"
        android:scaleType="fitStart"/>

    <TextView
        android:id="@+id/source_app_title"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="0dp"/>

    <CheckBox
        android:id="@+id/source_app_check"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="0dp" />

</TableRow>

<TableRow
    android:id = "@+id/source_tableRow_internet"
    android:layout_width = "fill_parent"
    android:layout_height="wrap_content"
    android:gravity = "center_horizontal"
    android:visibility="gone">

        <TextView
            android:id="@+id/sink_internet"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/internet"/>

        <CheckBox
            android:id="@+id/sink_internet_check"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
</TableRow>

<TableRow
    android:id = "@+id/source_tableRow_file"
    android:layout_width = "fill_parent"
    android:layout_height="fill_parent"
    android:gravity = "center_horizontal"
    android:visibility="gone">

        <TextView
            android:id="@+id/sink_file"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/file"/>

        <CheckBox
            android:id="@+id/sink_file_check"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

</TableRow>

表格行source_tableRow_file&amp; source_tableRow_internet可能根据用户输入设置为可见或消失。如何根据总行数

调整gridview的高度

0 个答案:

没有答案