当前位置:首页 » 安卓系统 » androidgridview一行

androidgridview一行

发布时间: 2024-09-01 01:24:45

‘壹’ android的:tableLayout和gridview有什么不同

tableLayout是表格布局,用的比较少,实现如下图所示效果

‘贰’ 怎样动态设置GridView的宽和高(Android)

以下两种方式都可以做到:

一、在xml布局文件中设置,wrap_content即表示根据gridView的内容自使用宽高,代码如下:

android:layout_width="wrap_content"
android:layout_height="wrap_content"

二、在代码中动态设置,可以在对gridview赋值之后,计算gridview的宽高,然后进行设置:

java">intheight=20;//此处的高度需要动态计算		
intwidth=30;//此处的宽度需要动态计算
LinearLayout.LayoutParamslinearParams=newLayoutParams(width,height);
gridview.setLayoutParams(linearParams);//使设置好的布局参数应用到控件


需要注意的是:如果你的gridview是嵌套在ScrollView中,那么,你需要重写gridview控件,不然gridview只显示一行的问题(即高度不够),具体重写方式,可以参考下面代码:

/**
*@authorhnbcinfo
*自定义GridView控件,解决在ListView或ScrollView中使用GridView导致GridView显示不全的问题
*当前应用:时间轴中,图片显示
*/
{
publicGridViewForScrollView(Contextcontext,AttributeSetattrs){
super(context,attrs);
}

publicGridViewForScrollView(Contextcontext){
super(context);
}

publicGridViewForScrollView(Contextcontext,AttributeSetattrs,intdefStyle){
super(context,attrs,defStyle);
}

@Override
publicvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){

intexpandSpec=MeasureSpec.makeMeasureSpec(
Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec,expandSpec);
}
}

‘叁’ android中GridView默认是从左往右填写数据的,一行满了转至下行, 我如何实现从上往下填写数据呢

事件里面设置,内容改变则自动重置输入起点位置。

‘肆’ 为什么android gridview只能显示一行数据

因为在Android中,有这样一个限制,两ScrollView型的控件不能相互嵌套。像ListView和GridView就都是ScrollView型的控件。因为嵌套后,两个ScrollView型控件的滑动效果就丧失了,同时被嵌套控件的高度也被限定为一行的高度。那我们还能不能嵌套两个ScrollView型的控件呢?肯定是可以的。方法有两种:一是我们去需要自定义ListView或是GridView,并重写其onMeasure()方法。如下:

public class NoScrollGridView extends GridView {
public NoScrollGridView(Context context) {
super(context);
}
public NoScrollGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
ListView也同理。
还有一种方法是我们重新动态地计算我们现在需要的高度。在我们调用Adapter的时候,我们获得现在这个时候的GridView有多少个,单个GridView的高度,然后计算总高度。具体代码如下:

/**
* 重新计算listView高度
* @param listView
*/
public static void (ListView listView) {
// 获取ListView对应的Adapter
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}

int totalHeight = 0;
for (int i = 0, len = listAdapter.getCount(); i < len; i++) { // listAdapter.getCount()返回数据项的数目
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0); // 计算子项View 的宽高
totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
}

ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
// listView.getDividerHeight()获取子项间分隔符占用的高度
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
}
在我们setAdapter()的之前,我们调用上面的方法,如(accomplishmentStateListView);
因为我是在ListView中嵌套GridView,所以重新计算GridView的总高度的时候,要放在setAdapter(...GridViewAdapter)这个BaseAdapter的衍生类里。代码如下:

/**
* 计算gridview高度
* @param gridView
*/
public static void (GridView gridView) {
// 获取GridView对应的Adapter
ListAdapter listAdapter = gridView.getAdapter();
if (listAdapter == null) {
return;
}
int rows;
int columns = 0;
int horizontalBorderHeight = 0;
Class<?> clazz = gridView.getClass();
try {
// 利用反射,取得每行显示的个数
Field column = clazz.getDeclaredField("mRequestedNumColumns");
column.setAccessible(true);
columns = (Integer) column.get(gridView);
// 利用反射,取得横向分割线高度
Field horizontalSpacing = clazz
.getDeclaredField("mRequestedHorizontalSpacing");
horizontalSpacing.setAccessible(true);
horizontalBorderHeight = (Integer) horizontalSpacing.get(gridView);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
// 判断数据总数除以每行个数是否整除。不能整除代表有多余,需要加一行
if (listAdapter.getCount() % columns > 0) {
rows = listAdapter.getCount() / columns + 1;
} else {
rows = listAdapter.getCount() / columns;
}
int totalHeight = 0;
for (int i = 0; i < rows; i++) { // 只计算每项高度*行数
View listItem = listAdapter.getView(i, null, gridView);
listItem.measure(0, 0); // 计算子项View 的宽高
totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
}
ViewGroup.LayoutParams params = gridView.getLayoutParams();
params.height = totalHeight + horizontalBorderHeight * (rows - 1);// 最后加上分割线总高度
gridView.setLayoutParams(params);
}
这样我们就可以在ListView中添加GridView了。。。
注:两个SrcollView型的控件可以是:

<ListView, GridView>;

<GridView,ListView>;

<ListView,ListView>;

<GridView, GridView>;

<ListView, ScrollView>;

<ScrollView,ListView>;

<GridView, ScrollView>;

<ScrollView, GridView>;

<ScrollView, ScrollView>;

... ...

‘伍’ Android gridview默认只显示第一行数据,点击按钮显示全部数据,再点击按钮回到默认状态

提供一种思路:可以先在List中只存储第一行的数据,点击按钮后加入其余数据,然后再调用adapter.notifyDataSetChanged();再次点击按钮时,移除List中第一行数据以外的其它数据,再次调用adapter.notifyDataSetChanged();

‘陆’ android ScrollVIew中嵌套GridView,如何显示GridView

GridView(网格视图)是按照行列的方式来显示内容的,一般用于显示图片,图片等内容,比如实现九宫格图,用GridView是首选,也是最简单的。主要用于设置Adapter。

1.GridView常用的XML属性

属性名称 描述

android:columnWidth 设置列的宽度。

android:gravity 设置此组件中的内容在组件中的位置。可选的值有:top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical可以多选,用“|”分开。

android:horizontalSpacing 两列之间的间距。

android:numColumns 设置列数。

android:stretchMode 缩放模式。

android:verticalSpacing 两行之间的间距。


2.实例1

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/GridView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:columnWidth="90dp"
android:numColumns="3"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>
</LinearLayout>

运行效果:

‘柒’ Android gridview动态添加一条数据,并且是放在第一个的位置,求大神分享下

gridview的adapter数据源是一个list,然后你想添加的时候用list.add(0,数据)把数据添加到第一个位置,然后adapter在notify一下就行了

‘捌’ 如何实现android中横向滚动的gridView

法1.直接用tablelayout gridview是根据你每行的单元数自动生成的行数;
法2.可以在代码里根据view数来动态设置列数,比如有10记录可以设置列数为10/3+1,这样就有三行四列了。
如果您对我的回答有不满意的地方,还请您继续追问;
答题不易,互相理解,互相帮助!

热点内容
支付宝支付密码如何修改 发布:2024-11-25 06:38:47 浏览:922
java开发要学习什么技术 发布:2024-11-25 06:20:28 浏览:999
java猿 发布:2024-11-25 06:18:36 浏览:126
如何刷安卓44 发布:2024-11-25 06:18:32 浏览:528
安卓手机怎么限制app时间 发布:2024-11-25 06:14:15 浏览:402
福建虚拟服务器管理软件云服务器 发布:2024-11-25 06:05:46 浏览:105
android加载图片 发布:2024-11-25 06:05:00 浏览:167
linux的ls 发布:2024-11-25 05:47:56 浏览:843
oracle存储过程游标实例 发布:2024-11-25 05:40:32 浏览:804
xpsql2000 发布:2024-11-25 05:20:20 浏览:372