gridview列中的自动间距?

时间:2014-04-18 10:47:01

标签: java android android-gridview

我有一个简单的GridView。以下是XML

        <LinearLayout
        android:id="@+id/calendar_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:layout_marginRight="@dimen/activity_horizontal_margin"
        android:orientation="vertical" >

       <GridView
            android:id="@+id/grid_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:numColumns="7"
            android:verticalSpacing="2dp"
            android:rotationY="180" >
        </GridView>
    </LinearLayout>

我创建一个TextView并将其作为项目插入gridview中。基本上,我们的想法是创建一个自定义日历。

在适配器中我有

    @Override
public View getView(int position, View convertView, ViewGroup parent) {
    TextView textView = new TextView(mContext);
    textView.setText(days.get(position).toString());
    textView.setRotationY(180);
    textView.setGravity(Gravity.CENTER);

    textView.setBackground(mContext.getResources().getDrawable(R.drawable.grey_box));

    int x = mContext.getResources().getDimensionPixelSize(R.dimen.calendar_slot);
    textView.setLayoutParams(new GridView.LayoutParams(x, x));
    return textView;
}

R.dimen.calendar_slot等于30dp。

我无法理解的是,鉴于上述原因,为什么我的gridview如下所示? 。我需要将列合并在一起。但他们之间有空格。

有人可以帮忙吗? Screenshot

1 个答案:

答案 0 :(得分:1)

gridview列之间存在大量空间的原因是布局中的textview不占用网格视图提供的完整列空间

要避免此问题,您必须分别计算设备的屏幕宽度和高度,并将其除以列数和行数。这将为您提供单个textview所需的精确宽度和高度。将其设置为文本视图的尺寸。您将在行和列之间获得相等的空间

代码如下

    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/columns;   //width for text view
     int view_height=screen_height/rows;   //height for text view

     textview.getgetLayoutParams().width=view_width;
     textview.getgetLayoutParams().height=view_height;