Android 之路39---GridView控件
2018-02-08 21:18
435 查看
导读
1.GridView的基本属性2.用GridView展示已安装的应用
3.用GridView加载网络图片
GridView的基本属性
自定义每个表格块的布局 simple_list_item_1.xml
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:textAppearance="?android:attr/textAppearanceListItem" android:gravity="center_vertical" android:textAlignment="viewStart" android:background="#ff0000" android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft" />
主页面布局文件 activity_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"> <GridView android:id="@+id/gv" android:layout_width="match_parent" android:layout_height="match_parent" android:columnWidth="90dp" android:numColumns="auto_fit" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:stretchMode="spacingWidth" android:gravity="center"></GridView> </LinearLayout>
java文件 MainActivity.java
package com.hala.view01; import android.app.Activity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.GridView; import android.widget.ListView; import java.util.ArrayList; import java.util.List; public class MainActivity extends Activity { private GridView gridView; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); gridView = (GridView)findViewById(R.id.gv); List<String> strList=new ArrayList<String>(); for(int i=0;i<12;i++){ strList.add("Emilia"+i); } ArrayAdapter<String> arrayAdapter=new ArrayAdapter<String>(MainActivity.this,R.layout.simple_list_item_1,strList); gridView.setAdapter(arrayAdapter); } }
显示结果
若将GridView布局文件改为
<?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"> <GridView android:id="@+id/gv" android:layout_width="match_parent" android:layout_height="match_parent" android:columnWidth="90dp" android:numColumns="auto_fit" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:stretchMode="columnWidth" android:gravity="center"></GridView> </LinearLayout>
显示结果
⚠️以上两种不同在于系统将多余部分分配给谁,columnWidth表示分配给列宽,而spacingWidth表示分配给两列之间的间距
用GridView展示已安装的应用
自定义每个表格块的布局 item_layout<?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:id="@+id/iv" android:layout_width="50dp" android:layout_height="50dp" android:scaleType="centerCrop"/> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:layout_marginLeft="10dp" android:gravity="center" android:text="测试"/> </LinearLayout>
主页面布局文件 activity_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"> <GridView android:id="@+id/gv" android:layout_width="match_parent" android:layout_height="match_parent" android:columnWidth="90dp" android:numColumns="auto_fit" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:stretchMode="columnWidth" android:gravity="center"></GridView> </LinearLayout>
自定义应用信息的类 AppInfo.java
package com.hala.view01; import android.graphics.drawable.Drawable; /** * Created by air on 2018/2/8. */ public class AppInfo { //应用名称 private String appName; //应用包名 private String packageName; //版本名称 private String versionName; //版本号 private int versionCode; //应用图标 private Drawable appIcon; public String getAppName() { return appName; } public void setAppName(String appName) { this.appName = appName; } public String getPackageName() { return packageName; } public void setPackageName(String packageName) { this.packageName = packageName; } public String getVersionName() { return versionName; } public void setVersionName(String versionName) { this.versionName = versionName; } public int getVersionCode() { return versionCode; } public void setVersionCode(int versionCode) { this.versionCode = versionCode; } public Drawable getAppIcon() { return appIcon; } public void setAppIcon(Drawable appIcon) { this.appIcon = appIcon; } }
适配器类 GriaAdapter.java
package com.hala.view01; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import java.util.List; /** * Created by air on 2018/2/8. */ public class GriaAdapter extends BaseAdapter { private Context context; private List<AppInfo> appInfos; public GriaAdapter(Context context, List<AppInfo> appInfos) { this.context = context; this.appInfos = appInfos; } @Override public int getCount() { return appInfos.size(); } @Override public Object getItem(int position) { return appInfos.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder=new ViewHolder(); if(convertView==null){ convertView=View.inflate(context,R.layout.item_layout,null); viewHolder.imageView=(ImageView)convertView.findViewById(R.id.iv); viewHolder.textView=(TextView)convertView.findViewById(R.id.tv); convertView.setTag(viewHolder); }else{ viewHolder= (ViewHolder) convertView.getTag(); } AppInfo appInfo=appInfos.get(position); viewHolder.imageView.setImageDrawable(appInfo.getAppIcon()); viewHolder.textView.setText(appInfo.getAppName()+" "+appInfo.getVersionName()); return convertView; } public class ViewHolder{ public ImageView imageView; public TextView textView; } }
java文件 MainActivity.java
package com.hala.view01; import android.app.Activity; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.GridView; import android.widget.ListView; import java.util.ArrayList; import java.util.List; public class MainActivity extends Activity { private GridView gridView; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); gridView = (GridView)findViewById(R.id.gv); GriaAdapter griaAdapter=new GriaAdapter(MainActivity.this,getAppList()); gridView.setAdapter(griaAdapter); } public List<AppInfo> getAppList(){ List<AppInfo> appInfoList=new ArrayList<AppInfo>(); PackageManager packageManager=getPackageManager(); List<PackageInfo> installedPackages=packageManager.getInstalledPackages(0); for(int i=0;i<installedPackages.size();i++){ PackageInfo packageInfo=installedPackages.get(i); AppInfo appInfo=new AppInfo(); //设置应用名称 appInfo.setAppName(packageInfo.applicationInfo.loadLabel(packageManager).toString()); //图标 appInfo.setAppIcon(packageInfo.applicationInfo.loadIcon(packageManager)); //包名 appInfo.setPackageName(packageInfo.packageName); //版本名称 appInfo.setVersionName(packageInfo.versionName); //版本号 appInfo.setVersionCode(packageInfo.versionCode); //if语句的作用是将系统自带的应用过滤掉,只显示用户自己下载的应用 //if((packageInfo.applicationInfo.flags& ApplicationInfo.FLAG_SYSTEM)==0) { appInfoList.add(appInfo); //} } return appInfoList; } }
显示结果
用GridView加载网络图片
配置文件 Manifest.xml<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hala.view01"> <uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
自定义每个表格块的布局 item_layout
<?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:id="@+id/iv" android:layout_width="50dp" android:layout_height="50dp" android:scaleType="centerCrop"/> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:layout_marginLeft="10dp" android:gravity="center" android:text="测试"/> </LinearLayout>
主页面布局文件 activity_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"> <GridView android:id="@+id/gv" android:layout_width="match_parent" android:layout_height="match_parent" android:columnWidth="90dp" android:numColumns="auto_fit" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:stretchMode="columnWidth" android:gravity="center"></GridView> </LinearLayout>
自定义图像信息的类 ImageInfo.java
package com.hala.view01; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; /** * Created by air on 2018/2/8. */ public class ImageInfo { private String imagePath; private Bitmap bitmap; private String text; public String getImagePath() { return imagePath; } public void setImagePath(String imagePath) { this.imagePath = imagePath; } public Bitmap getBitmap() { return bitmap; } public void setBitmap(Bitmap bitmap) { this.bitmap = bitmap; } public String getText() { return text; } public void setText(String text) { this.text = text; } }
适配器类 GriaAdapter.java
package com.hala.view01; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import java.util.List; /** * Created by air on 2018/2/8. */ public class GriaAdapter extends BaseAdapter { private Context context; private List<ImageInfo> appInfos; public GriaAdapter(Context context, List<ImageInfo> appInfos) { this.context = context; this.appInfos = appInfos; } @Override public int getCount() { return appInfos.size(); } @Override public Object getItem(int position) { return appInfos.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder=new ViewHolder(); if(convertView==null){ convertView=View.inflate(context,R.layout.item_layout,null); viewHolder.imageView=(ImageView)convertView.findViewById(R.id.iv); viewHolder.textView=(TextView)convertView.findViewById(R.id.tv); convertView.setTag(viewHolder); }else{ viewHolder= (ViewHolder) convertView.getTag(); } ImageInfo appInfo=appInfos.get(position); viewHolder.textView.setText(appInfo.getText()); if(appInfo.getBitmap()==null){ viewHolder.imageView.setImageResource(R.mipmap.ic_launcher); }else{ viewHolder.imageView.setImageBitmap(appInfo.getBitmap()); } return convertView; } public class ViewHolder{ public ImageView imageView; public TextView textView; } }
主页面java文件 MainActivity.java
package com.hala.view01; import android.app.Activity; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.Bundle; import android.widget.GridView; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; public class MainActivity extends Activity { private GridView gridView; private List<String> imageList; private List<ImageInfo> imageInfoList; private GriaAdapter griaAdapter; private ImageLoadTask imageLoadTask; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); gridView = (GridView)findViewById(R.id.gv); initData(); gridView.setAdapter(griaAdapter); } private void initData() { imageList = new ArrayList<String>(); imageList.add("http://img4q.duitang.com/uploads/item/201501/31/20150131204708_Cayzr.png"); imageList.add("http://newsimages.mainone.com/2013-10/10170906575.jpg"); imageList.add("http://t1.mmonly.cc/uploads/tu/zyf/tt/20160524/cabluql2zjc.jpg"); imageList.add("http://t1.mmonly.cc/uploads/tu/zyf/tt/20160524/kxpirbwnkic.jpg"); imageList.add("http://t1.mmonly.cc/uploads/tu/zyf/tt/20160524/ecush2i3eod.jpg"); imageList.add("http://img4.duitang.com/uploads/item/201409/04/20140904114650_rZxti.jpeg"); imageList.add("http://img3.imgtn.bdimg.com/it/u=3929947471,2848680780&fm=27&gp=0.jpg"); imageList.add("http://imgsrc.baidu.com/forum/w%3D580/sign=448cc5d88e1001e94e3c1407880e7b06/4fb13ef431adcbef9149f237afaf2edda3cc9f92.jpg"); imageList.add("http://img1.imgtn.bdimg.com/it/u=1537560281,1787967705&fm=214&gp=0.jpg"); imageInfoList = new ArrayList<ImageInfo>(); for(int i=0;i<9;i++){ ImageInfo imageInfo=new ImageInfo(); imageInfo.setImagePath(imageList.get(i)); imageInfoList.add(imageInfo); } griaAdapter = new GriaAdapter(MainActivity.this,imageInfoList); imageLoadTask = new ImageLoadTask(MainActivity.this,griaAdapter); imageLoadTask.execute(""); } public Bitmap getImageFromNetWork(String path){ try { URL url=new URL(path); HttpURLConnection urlConnection=(HttpURLConnection)url.openConnection(); urlConnection.setDoInput(true); urlConnection.setConnectTimeout(10000); urlConnection.connect(); InputStream inputStream=urlConnection.getInputStream(); Bitmap bitmap= BitmapFactory.decodeStream(inputStream); inputStream.close(); return bitmap; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } public class ImageLoadTask extends AsyncTask<String,Void,Void>{ private GriaAdapter griaAdapter; public ImageLoadTask(Context context,GriaAdapter griaAdapter) { this.griaAdapter=griaAdapter; } @Override protected Void doInBackground(String... params) { for(int i=0;i<griaAdapter.getCount();i++){ ImageInfo imageInfo= (ImageInfo) griaAdapter.getItem(i); String imagePath=imageInfo.getImagePath(); Bitmap bitmap=getImageFromNetWork(imagePath); imageInfo.setBitmap(bitmap); publishProgress(); } return null; } @Override protected void onProgressUpdate(Void... values) { super.onProgressUpdate(values); //UI刷新界面 griaAdapter.notifyDataSetChanged(); } } }
显示结果
相关文章推荐
- Android的GridView控件
- Android高级控件(View)之四TextSwitcher, Gallery, ImageSwitcher, GridView, ListView, ExpandableList
- Android GridView控件
- 【Android 开发】:UI控件之 GridView 网格控件的使用
- 系出名门Android(8) - 控件(View)之TextSwitcher, Gallery, ImageSwitcher, GridView, ListView, ExpandableList
- android控件学习——GridView学习
- Android高级控件——ViewPager、GridView、popwindow、SlideMenu(下)
- android gridview listview控件内容刷新 而不是整个页面刷新
- asp.net 学习之路之gridView控件之修改数据
- Android的GridView控件点击图片变暗效果
- Android的GridView控件点击图片变暗效果
- Android常用控件之GridView使用BaseAdapter
- Android:控件GridView的使用
- Android控件之GridView探究
- Android控件GridView之仿支付宝钱包首页带有分割线的GridView九宫格的完美实现
- Android常用控件之GridView与ExpandableListView的用法
- Android GridView控件(九宫格)
- Android 控件之GridView
- Android中ListView或者GridView的Item和Item中控件的事件冲突
- Android - GridView,自定义开关控件,状态选择器selector,自定义对话框,抽取style