Android - GridView高度到最大高度

时间:2012-03-23 02:41:35

标签: android android-layout

我在scrollview中有一个GridView,GridView有4个图像加载到它(通过ImageAdapter)。我的问题是我可以获得3个图像,但第4个没有。在进一步调查之后,我发现gridview的高度只是行的高度,所以如果我将xml中的gridview高度设置为700dp,那么就会显示出来。

以下是截图:

enter image description here

正如您所看到的,我已将GridView的背景设置为HotPink以说明GridView的位置。

这是main_menu的XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/llLayoutContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >    

    <!-- <LinearLayout android:id="@+id/llMiddle"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="horizontal"> -->

        <LinearLayout
            android:id="@+id/llLeft"
            android:layout_width="400dp"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:background="@drawable/layout_left"
            android:paddingLeft="5dp"
            android:paddingRight="5dp"> 
            <ScrollView 
                android:id="@+id/svMenu"
                android:layout_width="400dp"
                android:layout_height="match_parent"
                >
            </ScrollView>           
        </LinearLayout>

        <LinearLayout
            android:id="@+id/llRight"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="vertical"
            android:background="@drawable/layout_right"
            android:padding="0dp"> 
        </LinearLayout>
    <!-- </LinearLayout> -->
</LinearLayout>

LinearLayout“llLeft”是加载菜单项的布局(在ScrollView中)。 layout_left只是一个在绿色背景周围绘制黑色轮廓的形状。

这是包含GridView的main_menu_header.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingTop="5dp">

    <TextView
             android:id="@+id/tvDashboardHeader"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:text="Dashboard Main Menu"
             android:textSize="20dp"
             style="@style/TextShadow"
             android:paddingTop="5dp"
             android:gravity="left"
             android:background="@drawable/menu_item_bg"        
            />
    <GridView 
        android:id="@+id/gvMenuItems"
        android:layout_width="400dp"
        android:layout_height="match_parent"
        android:columnWidth="110dp"
        android:numColumns="auto_fit"    
        android:verticalSpacing="10dp"    
        android:horizontalSpacing="10dp"    
        android:stretchMode="columnWidth"
        android:background="@color/HotPink"
        android:gravity="center" >
    </GridView>

</LinearLayout>

以下是我填充GridView的方法:

        ScrollView sv = (ScrollView)findViewById(R.id.svMenu);
        LayoutInflater liInflater = getLayoutInflater();
        ViewGroup vg = (ViewGroup)liInflater.inflate(R.layout.main_menu_header, sv, false);
        sv.addView(vg);

        //Setup the Main Menu items on the left side.
        GridView gvMenuItems = (GridView) findViewById(R.id.gvMenuItems);    
        gvMenuItems.setAdapter(new ImageAdapter(this));

ImageAdapter类:

ImageAdapter类:

public class ImageAdapter extends BaseAdapter {
    private Context mContext;    

    public ImageAdapter(Context c) {
        mContext = c;    
    }    

    public int getCount() {        
        return mThumbIds.length;    
    }    

    public Object getItem(int position) {        
        return null;    
    }    

    public long getItemId(int position) {        
        return 0;    
    }    

    // create a new ImageView for each item referenced by the Adapter    
    public View getView(int position, View convertView, ViewGroup parent) {        

        ImageView imageView;

        if (convertView == null) {
            // if it's not recycled, initialize some attributes            
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(parent.getLayoutParams().width, 125)); //new GridView.LayoutParams(400, 125));             
            //imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
            imageView.setMaxHeight(50);
            imageView.setMaxWidth(50);
            //imageView.setPadding(30, 0, 0, 0);
            //imageView.setPadding(40, 30, 20, 30);

            } else {            
                imageView = (ImageView) convertView;        
            }        

        imageView.setImageResource(mThumbIds[position]);

        return imageView;
    }    

    // references to our images    
    private Integer[] mThumbIds = {
            R.drawable.home,
            R.drawable.open_folder, 
            R.drawable.paper_pen,
            R.drawable.person
    };
}

我认为android:layout_height =“match_parent”的gridview属性可以工作,但事实并非如此。关于如何在scrollview中使GridView占据整个左侧的任何想法?

1 个答案:

答案 0 :(得分:1)

我最好的猜测是scrollview给你带来了问题。

为什么你需要scrollview

网格视图将处理滚动。这有点多余。所以请将其删除并直接将膨胀的视图直接添加到llLeft。那将解决问题。


事实上,使用xml解决UI问题会更优雅。在<include>中使用main_menu.xml标记。这是如何

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/llLayoutContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >    

<!-- <LinearLayout android:id="@+id/llMiddle"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:orientation="horizontal"> -->

    <LinearLayout
        android:id="@+id/llLeft"
        android:layout_width="400dp"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="@drawable/layout_left"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"> 
        <include
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         layout="@layout/main_menu_header" />           
    </LinearLayout>

    <LinearLayout
        android:id="@+id/llRight"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical"
        android:background="@drawable/layout_right"
        android:padding="0dp"> 
    </LinearLayout>
<!-- </LinearLayout> -->