我已经在xml布局中声明了GirdView,如下所示。
<GridView
android:id="@+id/movies_gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:drawSelectorOnTop="true"
android:columnWidth="92dp"
android:numColumns="auto_fit"
android:stretchMode="spacingWidthUniform"
android:gravity="center_horizontal" />
我打算在此GridView.
中显示固定大小的图片(垂直矩形而不是方形)我已将columnWidth
设置为auto_fit
,以便{{1}可以最佳地使用水平空间1}}根据可用的屏幕大小。
我已将GridView.
设置为stretchMode
,以便将列放置在距离所有边相等的位置。
我想将spacingWidthUniform
设为等于verticalSpacing
。我不能在xml中执行此操作,因为在运行时horizontalSpacing
将取决于屏幕上的可用空间。此外,当更改设备方向时,horizontalSpacing
将更改。
我的问题是:
如何确保horizontalSpacing
始终等于verticalSpacing
?
如何让horizontalSpacing
从头开始布局其第一列加上最后一列的填充和结束布局到GridView
的末尾减去填充?
编辑1
我尝试使用@simas解决方案来使用提到的自定义网格视图。 为此,
我将此类复制到我的源目录。
在布局xml中包含此网格视图,如下所示。
GridView
将适配器设置为此gridview,如下所示
<com.aviras.ashish.popularmoviesapp.widgets.CustomGridView
android:id="@+id/movies_gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnWidth="@dimen/grid_item_width"
android:drawSelectorOnTop="true"
android:gravity="center_horizontal"
android:numColumns="auto_fit"
android:stretchMode="spacingWidthUniform"
tools:listitem="@layout/grid_item_movie_poster" />
它仍然显示列和行的不同间距,如下所示。
编辑2
@simas在第二个问题中通过&#39;开始布局&#39;我的意思是
CustomGridView moviesGridView = (CustomGridView) rootView.findViewById(R.id.movies_gridview);
moviesGridView.setAdapter(new MoviesAdapter(rootView.getContext().getApplicationContext(), mMovies));
应该开始在GridView
的开头绘制第一列,GridView
的最后一列应该在GridView
的末尾结束。此外,列和行应具有相等的间距。
如果这更能澄清我的问题,请告诉我。
答案 0 :(得分:1)
您可以创建自定义GridView类并修改setHorizontalSpacing
和setVerticalSpacing
的功能,如下所示:
public class CustomGridView extends GridView {
public CustomGridView(Context context) {
super(context);
}
public CustomGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomGridView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public CustomGridView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public void setHorizontalSpacing(int horizontalSpacing) {
super.setHorizontalSpacing(horizontalSpacing);
// Call parent class to set the vertical spacing to be equal to the horizontal spacing
super.setVerticalSpacing(horizontalSpacing);
}
@Override
public void setVerticalSpacing(int verticalSpacing) {
// Prevent the derived class from modifying the vertical spacing
/*super.setVerticalSpacing(verticalSpacing);*/
}
}
然后在xml中使用自定义类,如下所示:
关于你的第二个问题:我无法理解“开始布局”的含义。
您想要的结果的图像示例将有很大帮助。
答案 1 :(得分:0)
你可以使用custome gridview woth textview并按照你想要的方式放置空间,也可以轻松地将其设置为水平或垂直。
答案 2 :(得分:0)
<GridView
android:id="@+id/gridView"
android:layout_width="fill_parent"
android:layout_height="350dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="10dp"
android:clickable="true"
android:columnWidth="80dp"
android:drawSelectorOnTop="true"
android:focusable="true"
android:gravity="center"
android:numColumns="auto_fit"
android:smoothScrollbar="true"
android:splitMotionEvents="true"
android:stretchMode="columnWidth"
android:verticalSpacing="5dp" />
and textview that is :
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_gravity="bottom"
android:background="#55d3d3d3"
android:gravity="center_vertical|center_horizontal"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:text="asdfasdadasds"
android:textColor="#77FFFFFF" />