Android中GridView通過自定義適配器(未優化)實現圖文視圖排列

来源:http://www.cnblogs.com/panhouye/archive/2016/11/23/6095668.html
-Advertisement-
Play Games

Android中GridView組件用來以網格方式排列視圖,與矩陣類似,當屏幕上有很多元素(文字、圖片或其他元素)需要顯示時,可以使用該組件。下麵我們通過代碼實現如下圖例(為了方便截圖,將事件處理(土司)設置到屏幕頂部) Layout下gridview.xml佈局文件: anroid:numColu ...


Android中GridView組件用來以網格方式排列視圖,與矩陣類似,當屏幕上有很多元素(文字、圖片或其他元素)需要顯示時,可以使用該組件。下麵我們通過代碼實現如下圖例(為了方便截圖,將事件處理(土司)設置到屏幕頂部敲打

Layout下gridview.xml佈局文件:

 

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical" android:layout_width="match_parent"
 4     android:layout_height="match_parent">
 5     <GridView
 6         android:id="@+id/gv"
 7         android:layout_width="match_parent"
 8         android:layout_height="match_parent"
 9         android:numColumns="3"
10         android:columnWidth="90dp"
11         android:stretchMode="columnWidth"
12         android:verticalSpacing="10dp"
13         android:horizontalSpacing="10dp">
14     </GridView>
15 </LinearLayout>

 

GridView屬性設置解析:

anroid:numColumns="3"GridView的列數設置為3

android:columnWidth="90dp",每列的寬度,也就是Item的寬度

android:stretMode="columnWidth" 縮放與列寬大小同步

android:verticalSpacing="10dp" 兩行之間的邊距

android:horizontalSpacing="10dp" 兩列之間的邊距

Layoutitem_layout.xml佈局文件(即為網格內每個單元格的佈局)

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:gravity="center"(此處設置gravity為center後便不需要在他處重覆設置)
 6     android:orientation="vertical">
 7     <ImageView
 8         android:id="@+id/iv"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:scaleType="centerCrop"
12         android:src="@mipmap/ic_launcher" />
13     <TextView
14         android:id="@+id/tv"
15         android:layout_width="wrap_content"
16         android:layout_height="wrap_content"
17         android:text="功能" (測試使用此處文本框內的文本設置可不添加)/>
18 </LinearLayout>
java代碼實現功能(核心為自定義適配器):
 1 public class GridViewDemo extends AppCompatActivity {
 2     private GridView gv;//聲明GridView視圖
 3     @Override
 4     protected void onCreate(@Nullable Bundle savedInstanceState) {
 5         super.onCreate(savedInstanceState);
 6         setContentView(R.layout.gridview);
 7         gv = (GridView) findViewById(R.id.gv);
 8         gv.setAdapter(new MyAdapter(this));//通過設置適配器實現網格內佈局
 9         //為每個單元格(item)添加單擊事件
10         gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
11             @Override
12             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
13                 TextView tv = (TextView) view.findViewById(R.id.tv);
14                 Toast t =Toast.makeText(GridViewDemo.this,tv.getText().toString(),Toast.LENGTH_SHORT);
15                 t.setGravity(Gravity.TOP,0,0);
16                 t.show();
17             }
18         });
19     }
20     //自定義適配器(通過繼承BaseAdapter)
21     class MyAdapter extends BaseAdapter {
22         Context context;//聲明適配器中引用的上下文
23         //將需要引用的圖片和文字分別封裝成數組
24         int[] images = {R.mipmap.ic_launcher, R.mipmap.
25                 ic_launcher, R.mipmap.ic_launcher, R.mipmap.
26                 ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher,};
27         String[] names = {"功能1", "功能2", "功能3", "功能4", "功能5", "功能6"};
28         //通過構造方法初始化上下文
29         public MyAdapter(Context context) {
30             this.context = context;
31         }
32         @Override
33         public int getCount() {
34             return names.length;//images也可以
35         }
36         @Override
37         public Object getItem(int position) {
38             return names[position];//images也可以
39         }
40         @Override
41         public long getItemId(int position) {
42             return position;
43         }
44         @Override
45         public View getView(int position, View convertView, ViewGroup parent) {
46             //通過佈局填充器LayoutInflater填充網格單元格內的佈局
47             View v = LayoutInflater.from(context).inflate(R.layout.item_layout, null);
48             //使用findViewById分別找到單元格內佈局的圖片以及文字
49             ImageView iv = (ImageView) v.findViewById(R.id.iv);
50             TextView tv = (TextView) v.findViewById(R.id.tv);
51             //引用數組內元素設置佈局內圖片以及文字的內容
52             iv.setImageResource(images[position]);
53             tv.setText(names[position]);
54             //返回值一定為單元格整體佈局v
55             return v;
56         }
57     }
58 }

至此代碼全部完成,為了實現功能本次未對圖片以及文本樣式做精細化處理,感興趣的朋友們可以自己試著敲著玩玩。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、ListView的理解 1.什麼ListView? 一種用來顯示多個可滑動項(Item)列表的的ViewGroup 需要使用Adapter將集合數據和每一個Item所對應的佈局動態適配到ListView中顯示 顯示列表: listView.setAdapter(adapter) 更新列表: ad ...
  • 前言 學習本系列內容需要具備一定 HTML 開發基礎,沒有基礎的朋友可以先轉至 "HTML快速入門(一)" 學習 本人接觸 React Native 時間並不是特別長,所以對其中的內容和性質瞭解可能會有所偏差,在學習中如果有錯會及時修改內容,也歡迎萬能的朋友們批評指出,謝謝 文章第一版出自簡書,如果 ...
  •   現在直播越來越火,儼然已經成為了下一個紅海。作為一個資深碼農(我只喜歡這樣稱呼自己,不喜歡別人這樣稱呼我),我必須趕上時代的潮流,開始研究視頻直播。發現視屏直播類的文章上來就講拉流、推流、採集、美顏等第三方類的使用,我是小白很不懂啊。所以我決定開始系統分享從音頻、視頻類到視頻 ...
  • 不知不覺團隊已經有了4個iOS開發,大家的代碼風格完全不一樣,所以每次改起別人的代碼就頭疼,理解起來不是那麼順暢,如鯁在喉。所以,就開了場分享會,把一些基本調用方法和代碼風格統一了一下。 前言 主要參考了: "view層的組織和調用方案" "更輕量的View Controllers" "整潔的Tab ...
  • 思路: 實現: UILabel *label = [[UILabel alloc] init]; label.text = @"你好,這是UILabel的自動換行測試內容,主要實現多行數據的自動換行,自適應不同行數的數據"; NSDictionary *attribute = @{NSFontAtt ...
  • 一.Runtime是用C和彙編寫的 對於C語言,函數的調用在編譯的時候會決定調用哪個函數。對於OC的函數,屬於動態調用過程,在編譯的時候並不能決定真正調用哪個函數,只有在真正運行的時候才會根據函數的名稱找到對應的函數來調用。 二.Runtime常用頭文件 #import<objc/runtime.h ...
  • UITableView或UIScrollVIew上的UIButton的高亮效果 原文地址:http://www.jianshu.com/p/b4331f06bd34 最近做項目的時候發現,UIScrollView上的UIButton點擊的時候沒有高亮狀態,但是確實觸發了點擊事件,不過這樣會造成一個假 ...
  • 本文原文地址:http://www.cnblogs.com/qianLL/p/6095988.html 有時候 我們接收數據的時候 後臺給的數據室一串HTML 的字元串 但是 我們要顯示出來 這是 我們會發現文字可以自適應大小,但是有些圖片並不能自適應大小 這是 我們就需要去修改img的CSS樣式 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...