安卓GridView使用實體
GridView與ListView的用法基本一致,不同的只是布局,當我們打開手機,應用會以宮格顯示,那就是GridView, 以代碼形式展示,本次配接器使用BaseAdapter,熟悉了配接器的用法,就只需要注意幾個GridView的屬性即可,
1、GridView首先必須了解的地方😆
-
GridView組件用來以網格方式排列視圖,與矩陣類似,當螢屏上有很多元素(文字、圖片或其他元素)需要顯示時,可以使用該組件 -
GridView是一個在二維可滾動的網格中展示內容的控制元件,網格中的內容通過使用adapter自動插入到布局中, -
程式中,首先使用findViewById方法獲取到了GridView控制元件,接下來使用setAdapter方法給它設定提供資料的配接器, -
常用屬性:android:numColumns="auto_fit" ---------列數設定為自動android:columnWidth="90dp",----------每列的寬度,也就是Item的寬度android:stretchMode="columnWidth"------縮放與列寬大小同步android:verticalSpacing="10dp"-----------垂直邊距android:horizontalSpacing="10dp"---------水平邊距
-
基本步驟:1、
準備資料源2、
新建配接器3、
加載配接器
寫在前面:🍎
如果在程式中遇到字符亂碼問題,請在build.gradle中android部分內加入以下代碼//參照物:buildToolsVersion "29.0.3" Code> android{compileOptions.encoding="GBK"} //參照物defaultConfig {...}
2、分步決議
1、首先打開布局檔案,添加GridView控制元件,推薦在RelativeLayout內進行
<GridView
android:id="@+id/grid"
android:layout_centerInParent="true"
android:paddingVertical="150dp" //與上下邊的間距
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingHorizontal="30dp"//與左右邊的間距
android:numColumns="2"/>
2、創建子布局,本實體僅使用文字
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
********************
android:padding="30dp">
// android:padding行高設定引數
<TextView
android:gravity="center"
android:id="@+id/text"
android:layout_centerInParent="true"
android:layout_width="200dp"
android:layout_height="100dp"/>
</RelativeLayout>
寫在中間:🍊
?
假如發現inflater.inflate()方法找不到自己的子布局時,重啟Andorid Studio就可以了
3、創建Adapter(本次使用BaseAdapter)
public class gridadapter extends BaseAdapter {
private int[] colors; //背景顏色
private String[] titles; //文字內容
private Context context;
private LayoutInflater inflater;
public gridadapter(int[] colors,String[] titles, Context context) {//配接器
super();
this.colors = colors;
this.titles = titles;
this.context = context;
this.inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return titles.length;
}
@Override
public Object getItem(int position) {
return titles[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View v, ViewGroup parent) {
v = inflater.inflate(R.layout.item, null);
v.setBackgroundColor(colors[position]);
TextView tv= (TextView) v.findViewById(R.id.text);
tv.setText(titles[position]);
return v;
}
}
4、MainActivity內容
public class MainActivity extends AppCompatActivity {
private String[] string = { "足球場", "游泳館",
"羽毛球館", "籃球場",
"網球場","奧體用餐中心"};
private int[] color = {
Color.parseColor("#C908B1EE"),
Color.parseColor("#C9168DFA"),
Color.parseColor("#C985ABE2"),
Color.parseColor("#C907AB68"),
Color.parseColor("#C9DF7808"),
Color.parseColor("#C9E45816")};
private GridView gd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gd = findViewById(R.id.grid);
gd.setAdapter(new gridadapter(color,string, this));
}
}
5、點擊事件參考:
gd.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
int po=position+1;
switch (position){
case 0:
Toast.makeText(MainActivity.this, "Clicked "+po+" !",
Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(MainActivity.this, "Clicked "+po+" !",
Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(MainActivity.this, "Clicked "+po+" !",
Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(MainActivity.this, "Clicked "+po+" !",
Toast.LENGTH_SHORT).show();
break;
case 4:
Toast.makeText(MainActivity.this, "Clicked "+po+" !",
Toast.LENGTH_SHORT).show();
break;
}
}
});
3、附贈:
1、BaseAdapter,有幾個必須實作的方法,如下所示:
方法 | 介紹 |
|---|---|
getCount() | getCount() 回傳需要展示的GridView的項數, |
getItem() | getItem(int position) 回傳給定位置的資料物件 |
getItemId() | getItemId(int position) 回傳該項的行id |
getView() | getView(int position, View convertView, ViewGroup parent) 必須要實作的方法,該方法控制GridView中資料項的顯示,方法中的convertView視圖是被復用的視圖,在實作時對其進行判斷,如果為null,則新建視圖,否則直接復用視圖, |
2、布局檔案中GridView的重要屬性
布局屬性 | 相關方法 | 介紹 |
|---|---|---|
android:columnWidth | setColumnWidth(int) | 定義每一列的固定寬度 |
android: gravity | set Gravity(int) | 定義每一個單元格的重心 |
android:horizontalSpacing | setHorizontalSpacing(int) | 定義了兩列之間的水平間隔 |
android:numColumns | setNumColumns(int) | 定義了展示的列數,int或auto_fit |
android:stretchMode | setStretchMode(int) | 定義了列拓展填充有限閑置空間的方式 |
android:verticalSpacing | setVerticalSpacing(int) | 定義兩行之間的垂直間隔,屬性設定要求同android:columnWidth |
Gravity的引數:
常量 | 值 | 描述 |
|---|---|---|
top | 0x30 | 將物件放在它的容器的頂部,不會改變它的大小 |
bottom | 0x50 | 將物件放在它的容器的底部,不會改變它的大小 |
left | 0x03 | 將物件放在它的容器的左面,不會改變它的大小 |
right | 0x05 | 將物件放在它的容器的右面,不會改變它的大小 |
center_vertical | 0x10 | 將物件放在它的容器垂直方向的中心,不會改變它的大小 |
fill_vertical | 0x70 | 如果需要改變物件的垂直大小以完全填充它的容器 |
center_horizontal | 0x01 | 將物件放在它的容器水平方向的中心,不會改變它的大小 |
fill_horizontal | 0x07 | 如果需要改變物件的水平大小以完全填充它的容器 |
center | 0x11 | 將物件放在它的容器的中心,不會改變它的大小 |
fill | 0x77 | 如果需要改變物件的水平和垂直方向的大小以完全填充它的容器 |
clip_vertical | 0x80 | 附加選項被設定用來將子視圖的上面或下面邊緣裁剪到它的容器的邊界,這個裁剪基于垂直方向的重心:top重心將會裁剪底部邊緣,bottom重心將會裁剪頂部邊緣,不會同時裁剪兩邊 |
clip_horizontal | 0x08 | 附加選項被設定用來將子視圖的左面或右面邊緣裁剪到它的容器的邊界,這個裁剪基于水平方向的重心:left重心將會裁剪右面邊緣,right重心將會裁剪左面邊緣,不會同時裁剪兩邊 |
start | 0x00800003 | 將物件放在它的容器的起始位置,不會改變它的大小 |
end | 0x00800005 | 將物件放在它的容器的末尾位置,不會改變它的大小 |
3、重要方法
ListAdapter:getAdapter()
回傳關聯的Adapterint:getColumnWidth()
回傳列的寬度int:getGravity()
回傳描述子視圖被放置的方式的標識,默認為Gravity. LEFT,int:getHorizontalSpacing()
回傳列間的水平間隔大小,
僅會計算當前布局,如果呼叫了setHorizontalSpacing(int)來設定間隔,但布局還沒有完成,這個方法會回傳一個舊值,如果想要明確地獲取這個間隔,使用getRequestedHorizontalSpacing()方法請求,int:getNumColumns()
回傳列數,如果網格沒有被布局,則回傳AUTO_FIT,int:getRequestedColumnWidth()
回傳請求的列寬度,
這可能不是真實的列寬度,使用getColumnWidth()獲取當前真實的列寬度,int:getRequestedHorizontalSpacing()
回傳請求的列間的水平間隔,
這個值可能是布局期間的區域樣式,也可能是默認的樣式,或是使用setHorizontalSpacing(int)方法設定的值,如果布局尚未完成或GridView計算得到了一個和請求的不同的水平間隔,它與getHorizontalSpacing()將有不同的回傳值,int:getStretchMode()
回傳擴展模式,int:getVerticalSpacing()
回傳行間的垂直間隔,onInitializeAccessibilityNodeInfoForItem(View view, int position, AccessibilityNodeInfo info)
使用串列中實際項的資訊初始化一個AccessibilityNodeInfo,
4、具體示例
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:background="@mipmap/timg">
<GridView
android:layout_centerInParent="true"
android:id="@+id/grid"
android:paddingVertical="150dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingHorizontal="30dp"
android:numColumns="2"/>
</RelativeLayout>
item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="40dp">
<TextView
android:gravity="center"
android:id="@+id/text"
android:layout_centerInParent="true"
android:layout_width="200dp"
android:layout_height="100dp"/>
</RelativeLayout>
MainActivity.java
package com.example.a4_3_3;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.Toast;
public class MainActivity extends Activity {
private GridView gd;
private String[] string = { "足球場", "游泳館", "羽毛球館", "籃球場", "網球場","奧體用餐中心" };
private int[] color = {Color.parseColor("#C908B1EE"),Color.parseColor("#C9168DFA"),
Color.parseColor("#C985ABE2"),Color.parseColor("#C907AB68"),
Color.parseColor("#C9DF7808"),Color.parseColor("#C9E45816"),};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
gd.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
int po=position+1;
switch (position){
case 0:
Toast.makeText(MainActivity.this, "Clicked "+po+" !", Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(MainActivity.this, "Clicked "+po+" !", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(MainActivity.this, "Clicked "+po+" !", Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(MainActivity.this, "Clicked "+po+" !", Toast.LENGTH_SHORT).show();
break;
case 4:
Toast.makeText(MainActivity.this, "Clicked "+po+" !", Toast.LENGTH_SHORT).show();
break;
}
}
});
}
private void initView() {
// TODO Auto-generated method stub
gd= (GridView) findViewById(R.id.grid);
}
private void initData() {
// TODO Auto-generated method stub
gd.setAdapter(new gridadapter(color,string, this));
}
}
gridadapter.java
package com.example.a4_3_3;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class gridadapter extends BaseAdapter {
private int[] colors;
private String[] titles;
private Context context;
private LayoutInflater inflater;
public gridadapter(int[] colors,String[] titles, Context context) {
super();
this.colors = colors;
this.titles = titles;
this.context = context;
this.inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return titles.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return titles[position];
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View v, ViewGroup parent) {
v = inflater.inflate(R.layout.item, null);
v.setBackgroundColor(colors[position]);
TextView tv= (TextView) v.findViewById(R.id.text);
tv.setText(titles[position]);
return v;
}
}
寫在最后🥇
了解更多:https://blog.csdn.net/Urchin_dong/article/details/50985079?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/399590.html
標籤:其他
