导读
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();
}
}
}
显示结果