Android:减少GridView中列之间的空间

时间:2011-09-15 03:31:37

标签: android android-layout

请参阅随附的屏幕截图,我试图减少GridView中列之间的空间。

我的main.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<GridView 
android:id="@+id/gridview"
android:layout_width="wrap_content" 
android:layout_height="wrap_content"
android:stretchMode="columnWidth"
android:gravity="center"
/>
<LinearLayout 
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
    <ImageView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/logo"/>
    <TextView
    android:text="@string/game_score"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_gravity="center"/>
</LinearLayout>
</LinearLayout>

我在Bitmap中创建了我的代码中的ImageViews。但是,我没有指定任何填充或间距或其他。

如何减少列之间的空间?我在GridViews和ImageViews上尝试了各种设置,但没有运气

图片为here

由于

7 个答案:

答案 0 :(得分:23)

尝试修复网格的xml文件中所需的列数,并将stretchMode设置为columnwidth

android:numColumns="3"
android:columnWidth="60dp"
android:stretchMode="columnWidth"

或在xml中为网格

设置水平和垂直间距
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"

答案 1 :(得分:11)

删除重力属性并使用以下模式

android:stretchMode="NONE"

答案 2 :(得分:4)

列之间的空格是因为gridview元素没有完全占据网格视图提供的列空间。

删除列之间空间的解决方案是测量设备的屏幕宽度和高度,并将其除以列数和行数。这将给出每个网格视图元素的宽度和高度。

您必须将此高度和宽度指定给imageview,并缩放位图以匹配图像视图。

代码:

  DisplayMetrics displayMetrics=getResources().getDisplayMetrics();
  screen_width=displayMetrics.widthPixels;    //width of the device screen
  screen_height=displayMetrics.heightPixels;   //height of device screen

     int view_width=screen_width/number of columns;   //width for imageview
     int view_height=screen_height/number of rows;   //height for imageview


   Imageview myImageView=(ImageView)findViewById(R.id.my_id);
   myImageView.getLayoutParams().width=view_width;
   myImageView.getLayoutParams().height=view_height;

   Bitmap myImage=Bitmap.createScaledBitmap(src, view_width, view_height, true);//scaling the image to match the size of image view

答案 3 :(得分:3)

嗨,我遇到了mygridView.setStretchMode(GridView.NO_STRETCH);

解决的同样问题

答案 4 :(得分:1)

我遇到类似的问题,即在少数设备的列之间有轻微的水平间距。 (我没需要任何空间。)我通过将网格项宽度除以总宽度来正确计算它。我只在联想设备上遇到此问题。

以下代码处于与网格相关的活动中。

int myRequestedColumnWidth = myGridViewContentMain.getRequestedColumnWidth();

Point size = new Point();
getWindowManager().getDefaultDisplay().getSize( size );
int width = size.x;
int height = size.y;

int myGridColumns = width / myRequestedColumnWidth;

if ( myGridColumns == 0 || myGridColumns == 1 )
    myGridColumns = 2;
myColumnWidth = ( width / myGridColumns );

myGridViewContentMain.setNumColumns(myGridColumns);

以下代码在网格布局xml中

<GridView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/gridViewContentMain"
    android:layout_centerHorizontal="true"
    android:numColumns="2"
    android:columnWidth="200dp"
    android:verticalSpacing="0dp"
    android:layout_below="@+id/relativeLayoutMainHeader"
    android:layout_above="@+id/relativeLayoutProgressBar"
    />

更改拉伸模式值后,我无法解决问题。

但是在GridView的布局xml中跟随值可以解决这个问题。

    android:horizontalSpacing="0dp"

我希望,像我这样的人可能会觉得这很有帮助。

问候。

答案 5 :(得分:1)

我遇到了同样的问题。我通过这样做最小化了列空间

for gridView

 public function add() {
        if ($this->request->is('post')) {
            $this->User->create();
            if ($this->User->saveAll($this->request->data)) {
                $components = array('Session'); 
                $this->Session->setFlash('Welcome !');
                return $this->redirect(array('action' => 'index'));
            }
            $this->Session->setFlash(
                __('The user could not be saved. Please, try again.')
            );
        }
    }

for imageView

android:numColumns="2"
android:columnWidth="90dp"
android:verticalSpacing="0dp"
android:horizontalSpacing="-30dp"
android:stretchMode="columnWidth"

答案 6 :(得分:0)

你可以通过设置android:horizo​​ntalSpacing =&#34; -10dp&#34;来减少空间b / w列。 (一些负数)