前不久网上有人问如何在java代码里根据屏幕宽度动态设定每一行的单元格数。百度了好久,没结果,结果自己认真分析,实现了这个功能。
gridview可以在xml布局里面设定每一个单元的宽度,以及手机屏幕的宽度来确定,一行能够容纳的单元格数。怎样在java代码里,动态设定一行的单元格数呢?
package com.lin.test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.View; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.GridView; import android.widget.SimpleAdapter; import android.widget.Toast; public class SecondActivity extends Activity{ GridView gridView; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); List<HashMap<String,Object>> list=new ArrayList<HashMap<String,Object>>(); for(int i=0;i<MyProject001Activity.size;i++){ HashMap<String, Object> mp= new HashMap<String,Object>(); mp.put("image", R.drawable.ic_launcher); mp.put("text","第"+(i+1)+"关"); list.add(mp); } SimpleAdapter simpleAdapter=new SimpleAdapter(getApplicationContext(), list, R.layout.item, new String[]{ "image","text" }, new int[]{ R.id.imageView,R.id.tv }); gridView.setAdapter(simpleAdapter); gridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub Toast.makeText(getApplicationContext(), arg2, 3).show(); } }); } private void init() { // TODO Auto-generated method stub gridView=(GridView) findViewById(R.id.GridView); WindowManager wm = this.getWindowManager();//获取WindowManager int width = wm.getDefaultDisplay().getWidth();//获取到屏幕宽度 double width2=width/Math.sqrt(MyProject001Activity.size);//用屏幕的宽度比上单元格的个数,就是每一个单元格的宽度 System.out.println("width"+width); System.out.println("width2"+width2); gridView.setColumnWidth((int) width2);//gridview动态设置每一个单元格的宽度 } }
second.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <GridView android:id="@+id/GridView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:numColumns="auto_fit" android:stretchMode="columnWidth" android:gravity="center"> </GridView> </LinearLayout>
MyProject001Activity.java
package com.lin.test; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class MyProject001Activity extends Activity { /** Called when the activity is first created. */ EditText tv; public static int size=0; //定义静态变量,作为设定的每一行的单元格数。 //其实可以通过界面跳转intent传值,这里我简化了 Button button; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub final int bianchang= Integer.parseInt(tv.getText().toString()); size=bianchang*bianchang; startActivity(new Intent(MyProject001Activity.this,SecondActivity.class)); } }); } private void init() { // TODO Auto-generated method stub tv= (EditText) findViewById(R.id.tv); button= (Button) findViewById(R.id.button); } } main.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" > <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/tv" android:hint="正方形的边长?" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/button" android:text="提交" /> </LinearLayout>
item.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"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView" android:layout_gravity="center" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv" android:layout_gravity="center" /> </LinearLayout>
效果图:
在界面A,输入5,点击提交
在界面B保证长行列的单元格数相同
最后别忘了清单文件
<activity android:name=".SecondActivity"/>
相关推荐
C#语言开发,.net表格控件合并单元格代码
根据屏幕宽度动态设置GridView列数
任意改变GridView某一行颜色和任意单元格颜色的源代码
GridView合并单元格,引合并单元格,实际上是合并数据结构.然后把处理后的数据绑定到GridView控件中.
实现GridView的横向滑动,默认为纵向滑动,主要目标实现GridView中两个或多个相邻item的合并效果,满足项目的UI设计,同时解决了item选中放大被其他item遮挡的问题;用法简单,一目了然,可供参考
编辑GridView单元格 说明:单元格获取焦点,则单元格处于编辑状态,单元格失去焦点,则立即更新数据库。采用非Ajax技术。 1、访问Session中的数据 这个例子是用户使用Session中数据。鼠标点击编辑GridView单元格。...
GridView合并表头单元格 GridView合并表头单元格 GridView合并表头单元格
wpf GridView 合并单元格 Demo 简单 适合新手 使用工具vs2017
android Gridview分页实现的一个小例子
gridview合并单元格,将具有相同内容的单元格合并。
Android ScrollView+GridView左右滑动 创建时自动定位滑动到某一项以及点击按钮准确定位到某一项,附带源码,非常适合初学者。
实现嵌套中的gridview单元格修改 datalist嵌套gridview,
本资源是实现GridView最小实例的源代码,注意要成功运行还需自己将相应的图片资源添加到自己的项目,并与代码中的名称相对应。关于如何为自己的android项目添加图片资源,请自己查资料。
GridView突出显示某一单元格(例如金额低于多少,分数不及格等
主要介绍了利用Android中控件GridView实现设置行列分割线的方法,文中给出了详细的介绍与示例代码,相信对大家具有一定的参考价值,有需要的朋友们下面来一起看看吧。
安卓Android源码——gridview分页效果.zip
Android GridView完美横向滑动 ,并且可限制Gridview显示行数!
android gridview分页和滑动效