Android 之路39---GridView控件

导读

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

}

显示结果
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值