GirdView的一些属性:
columnWidth(每列的宽度)
numColunms=”auto_fit”(列数根据屏幕大小自适应)
verticalSpacing(垂直方向的间距)
horizontalSpacing(水平方向的间距)
Demo1:显示文字
public class ExampleActivity1 extends AppCompatActivity{
public GridView mGridView;
@Override
public void onCreate( Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_example1);
mGridView = (GridView)findViewById(R.id.grid_view);
//准备数据
List<String> data = new ArrayList<>();
for (int i = 0; i < 9; i++) {
data.add("aaaaa"+i);
}
//准备适配器 android.R.layout.simple_list_item_1 系统提供的简单条目布局
ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,data);
//设置Adapter
mGridView.setAdapter(adapter);
}
}
Xml
<GridView
android:id="@+id/grid_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnWidth="10dp"
android:numColumns="3"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
/>
Demo2:显示应用列表
这里面几个重要的方法:
//获取系统应用信息
PackageManager packageManager = getPackageManager();
List installedPackages = packageManager.getInstalledPackages(0);
//获取包的所有信息
PackageInfo packageInfo = installedPackages.get(i);
再挨个遍历获取信息
这是第二种获取应用信息的方法,第一种在ListView学习里有写。
if((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM)==0){//判断不为系统应用 //则添加到数据集合
appInfoList.add(info);
}
public class ExampleActivity2 extends AppCompatActivity {
private GridView mGridVoid;
private List<AppInfo> appInfoList;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_example1);
mGridVoid = (GridView)findViewById(R.id.grid_view);
//准备数据
getAppInfos();
//准备适配器
mGridVoid.setAdapter(new MyGridViewAdapter(ExampleActivity2.this,appInfoList));
}
//GridView数据源
public List<AppInfo> getAppInfos() {
appInfoList = new ArrayList<>();
//获取系统应用信息
PackageManager packageManager = getPackageManager();
List<PackageInfo> installedPackages = packageManager.getInstalledPackages(0);
for (int i = 0; i <installedPackages.size(); i++) {
AppInfo info = new AppInfo();
//获取包的所有信息
PackageInfo packageInfo = installedPackages.get(i);
//获取包信息里的应用名称
info.setAppName(packageInfo.applicationInfo.loadLabel(packageManager).toString());
//获取包图片
info.setAppIcon(packageInfo.applicationInfo.loadIcon(packageManager));
//获取包名
info.setAppPackageName(packageInfo.packageName);
//获取版本号
info.setAppVersionCode(packageInfo.versionCode);
//获取版本信息
info.setAppVersionInfo(packageInfo.versionName);
//添加到集合
// appInfoList.add(info);
if((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM)==0){//判断不为系统应用
//则添加到数据集合
appInfoList.add(info);
}
}
return appInfoList;
}
}
class MyGridViewAdapter extends BaseAdapter{
private Context context;
private List<AppInfo> appInfoList = new ArrayList<>();
public MyGridViewAdapter(Context context, List<AppInfo> appInfoList) {
this.context = context;
this.appInfoList = appInfoList;
}
@Override
public int getCount() {
return appInfoList.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = new ViewHolder();
if(convertView == null){
convertView = View.inflate(context,R.layout.item_example2,null);
holder.appIcon = (ImageView)convertView.findViewById(R.id.img_icon);
holder.appName = (TextView)convertView.findViewById(R.id.tv_name);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.appName.setText(appInfoList.get(position).getAppName()+"....."+appInfoList.get(position).getAppVersionInfo());
holder.appIcon.setImageDrawable(appInfoList.get(position).getAppIcon());
return convertView;
}
//准备ViewHolder
class ViewHolder {
private ImageView appIcon;
private TextView appName;
}
}
demo3 网络加载
public class ExampleActivity3 extends AppCompatActivity {
private GridView gridView;
private List<String> imgList;
private List<ImageInfo>imageInfoList;
private GridAdapter3 gridAdapter;
private ImageLoadTask imageLoadTask;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_example1);
initUi();
initData();
}
private void initData() {
imgList=new ArrayList<String>();
imgList.add("http://img5.duitang.com/uploads/item/201406/26/20140626164837_dzKds.jpeg");
imgList.add("http://img2.imgtn.bdimg.com/it/u=3980629563,3881837630&fm=21&gp=0.jpg");
imgList.add("http://img5q.duitang.com/uploads/item/201505/08/20150508155052_XJaNW.jpeg");
imgList.add("http://img4.duitang.com/uploads/item/201407/02/20140702105736_FdN5P.jpeg");
imgList.add("http://img2.imgtn.bdimg.com/it/u=2866652161,3841912673&fm=21&gp=0.jpg");
imgList.add("http://img4.imgtn.bdimg.com/it/u=883757693,2063816225&fm=21&gp=0.jpg");
imgList.add("http://cdn.duitang.com/uploads/item/201309/26/20130926110955_QtUdX.jpeg");
imgList.add("http://zjimg.5054399.com/allimg/160815/14_160815161625_9.jpg");
imgList.add("http://i-7.vcimg.com/trim/09ce7067d2467c54cf05bbd271ee3ec8430415/trim.jpg");
imageInfoList=new ArrayList<ImageInfo>();
for(int i=0;i<9;i++)
{
ImageInfo imageInfo=new ImageInfo();
imageInfo.setmUrl(imgList.get(i));
imageInfo.setmText("图片"+i);
imageInfoList.add(imageInfo);
}
gridAdapter=new GridAdapter3(this,imageInfoList);
gridView.setAdapter(gridAdapter);
imageLoadTask =new ImageLoadTask(this,gridAdapter);
imageLoadTask.execute();
}
private void initUi() {
gridView= (GridView) findViewById(R.id.grid_view);
}
public Bitmap getImagefromNetWork(String path)
{
try {
URL url=new URL(path);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setDoInput(true);
urlConnection.setConnectTimeout(10*1000);
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
inputStream.close();
return bitmap;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public class ImageLoadTask extends AsyncTask<String,Void,Void>
{
private GridAdapter3 gridAdapter;
public ImageLoadTask(Context context,GridAdapter3 gridAdapter)
{
this.gridAdapter=gridAdapter;
}
@Override
protected Void doInBackground(String... params) {
for(int i=0;i<gridAdapter.getCount();i++)
{
ImageInfo imageInfo= (ImageInfo) gridAdapter.getItem(i);
String imagePath = imageInfo.getmUrl();
Bitmap bitmap = getImagefromNetWork(imagePath);
imageInfo.setmBitmap(bitmap);
publishProgress();
}
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
Log.e("Main","刷新");
gridAdapter.notifyDataSetChanged();
}
}
}
public class GridAdapter3 extends BaseAdapter {
private Context context;
private List<ImageInfo> imageInfoList;
public GridAdapter3(Context context, List<ImageInfo> imageInfoList) {
this.imageInfoList = imageInfoList;
this.context = context;
}
@Override
public int getCount() {
return imageInfoList.size();
}
@Override
public Object getItem(int position) {
return imageInfoList.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = View.inflate(context, R.layout.item_example2, null);
holder = new ViewHolder();
holder.imageView = (ImageView) convertView.findViewById(R.id.img_icon);
holder.textView = (TextView) convertView.findViewById(R.id.tv_name);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
ImageInfo imageInfo = imageInfoList.get(position);
holder.textView.setText(imageInfo.getmText());
// Glide.with(context).load(imageInfo.getmUrl()).placeholder(R.mipmap.ic_launcher).centerCrop().into(holder.imageView);
if(imageInfo.getmBitmap()==null)
{
holder.imageView.setImageResource(R.mipmap.ic_launcher);
}
else
{
holder.imageView.setImageBitmap(imageInfo.getmBitmap());
}
return convertView;
}
public class ViewHolder {
ImageView imageView;
TextView textView;
}
}