您的位置:首页 > 移动开发 > Android开发

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();
}
}

}


显示结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: