Android - 使GridView更小,垂直放置而不滚动

时间:2015-03-02 18:20:54

标签: android gridview scroll imageview

我有一个Gridview,它位于屏幕的一半左右。它填充了ImageViews,它们是二次的。问题是GridView填充了整个宽度,因此使其垂直滚动。

我想减少GridView的宽度,使其垂直放置而不滚动。我既不希望图像变形也不想改变列大小。

我已经尝试了不同的android:stretchMode,但除了columnWidth以外的其他人,它根本没有显示gridView。

简单地添加填充或边距不是我想要的,因为它应该适合所有屏幕尺寸。

这是我的布局文件:

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

    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <GridView
            android:id="@+id/gridViewPlayer2"
            android:layout_width="match_parent"
            android:layout_height="match_parent"        
            android:numColumns="3"
            android:gravity="center"
            android:layout_gravity="center"
            android:stretchMode="columnWidth"
            android:horizontalSpacing="3dp"
            android:verticalSpacing="3dp" >

        </GridView>

    </LinearLayout>



    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Chronometer
            android:id="@+id/timer_p2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:textSize="20sp"
            android:text="Chronometer"
            android:gravity="right"
            android:rotation="180" />

         <Chronometer
            android:id="@+id/timer_p1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:textSize="20sp"
            android:gravity="right" />

     </LinearLayout>



    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <GridView
            android:id="@+id/gridViewPlayer1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"        
            android:numColumns="3"
            android:gravity="center"
            android:layout_gravity="center"
            android:stretchMode="columnWidth"
            android:horizontalSpacing="3dp"
            android:verticalSpacing="3dp" >

        </GridView>

    </LinearLayout>

</LinearLayout>

提前致谢。

2 个答案:

答案 0 :(得分:1)

好的,我找到了一个非常好的工作方式,它完全符合我的要求。这非常简单:

由于我的GridView是二次方,我设法得到LinearLayout的高度,并设置GridView的宽度与该值。 (我没有直接在GridView上设置宽度,而是在我添加的另一个LinearLayout上解决了一些导入问题。

所以这是我的xml:

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

    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="center">

        <LinearLayout 
            android:id="@+id/layout_help_p2"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center_horizontal"
            android:orientation="vertical">

            <GridView
                android:id="@+id/gridViewPlayer2"
                android:layout_width="match_parent"
                android:layout_height="match_parent"        
                android:numColumns="3"
                android:gravity="center"
                android:layout_gravity="center"
                android:stretchMode="columnWidth"
                android:horizontalSpacing="3dp"
                android:verticalSpacing="3dp"
                android:rotation="180" >

            </GridView>

        </LinearLayout>
    </LinearLayout>



    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Chronometer
            android:id="@+id/timer_p2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:textSize="20sp"
            android:text="Chronometer"
            android:gravity="right"
            android:rotation="180" />

         <Chronometer
            android:id="@+id/timer_p1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:textSize="20sp"
            android:gravity="right" />

     </LinearLayout>



    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="center"
        android:id="@+id/layout_grid_p1">

        <LinearLayout 
            android:id="@+id/layout_help_p1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center_horizontal"
            android:orientation="vertical">

            <GridView
                android:id="@+id/gridViewPlayer1"
                android:layout_width="match_parent"
                android:layout_height="match_parent"        
                android:numColumns="3"
                android:gravity="center"
                android:layout_gravity="center"
                android:stretchMode="columnWidth"
                android:horizontalSpacing="3dp"
                android:verticalSpacing="3dp" >

            </GridView>

         </LinearLayout>
    </LinearLayout>

</LinearLayout>

以下是我管理所述过程的方法:

&#13;
&#13;
final LinearLayout mLayoutP1 = (LinearLayout) findViewById(R.id.layout_grid_p1);
final LinearLayout mLayoutHelpP1 = (LinearLayout) findViewById(R.id.layout_help_p1);
final LinearLayout mLayoutHelpP2 = (LinearLayout) findViewById(R.id.layout_help_p2);
		
mLayoutP1.post(new Runnable(){

    @Override
    public void run() {
      layoutHeightP1 = mLayoutP1.getHeight();
	  mLayoutHelpP1.setLayoutParams(new LinearLayout.LayoutParams(layoutHeightP1, LinearLayout.LayoutParams.MATCH_PARENT));
	  mLayoutHelpP2.setLayoutParams(new LinearLayout.LayoutParams(layoutHeightP1, LinearLayout.LayoutParams.MATCH_PARENT));
	}
			
});
&#13;
&#13;
&#13;

结果是:http://abload.de/img/4cu7w.jpg

此解决方法仅适用,因为我的GridView是二次方的。如果有人找到了一种方法来自动缩小GridView / ListView的宽度,使其在屏幕上垂直放置而不滚动,请随时在此处分享!

答案 1 :(得分:0)

我不明白你究竟在寻找什么。但您可以动态设置网格视图的宽度和网格视图的列宽。