【Android】第7章(1) 簡單適配器和佈局-- 讓你的程式更優雅

来源:http://www.cnblogs.com/rainmj/archive/2016/02/09/5185425.html
-Advertisement-
Play Games

分類:C#、Android、VS2015; 創建日期:2016-02-09 修改日期:2016-02-13 一、在AssemblyInfo.cs文件中配置應用程式清單 前面的章節我們說過,除了在AndroidManifest.xml文件中配置應用程式清單外,還可以在AssemblyInfo.cs文件...


分類:C#、Android、VS2015;

創建日期:2016-02-09

修改日期:2016-02-13

一、在AssemblyInfo.cs文件中配置應用程式清單

前面的章節我們說過,除了在AndroidManifest.xml文件中配置應用程式清單外,還可以在AssemblyInfo.cs文件中配置應用程式清單。

實際上,用C#編寫Android應用程式時,可以完全不去考慮AndroidManifest.xml文件,這些內部處理的過程都讓編譯器替你去管理好了,反正最終生成的清單配置結果都是一樣的。但是,帶智能提示的配置方式要比你直接修改AndroidManifest.xml文件方便得多。

當然,這隻是VS2015編譯器給你提供的智能配置Android應用程式清單的另一種途徑而已,也是C#編程常用的配置清單的方式。不過,如果你仍然習慣於像Java編程那樣在項目中直接修改AndroidManifest.xml文件,而且也能容忍配置不一致時導致的莫名其妙的錯誤,也可以繼續使用直接修改AndroidManifest.xml文件的辦法,反正Java編程人員都已經習慣改過來改過去那種最原始的配置辦法了,也對這種方式麻木了,可對C#編程來說,這種弱智的到處讓編程人員自己去配置這配置那的實現思路實在是讓人無法容忍。

這一節先簡單演示一下如何在AssemblyInfo.cs文件中配置應用程式清單,這種方式既能讓你利用智能提示很直觀地看到到底有哪些可配置的選項,也能讓你一眼就能看出配置是否有錯。

 

二、創建更靈活些的自定義適配器

在前面章節的主界面中,我們使用的都是最簡單的辦法:直接創建一個字元串數組來列出示例導航。這種方式雖然簡單,但卻是最沒有靈活性的笨辦法。

這一節我們將學習如何讓主界面顯示的內容比上一章介紹的辦法更靈活些(為了讓你理解的深刻些,這一章先不用最優的辦法,等下一章再介紹比這個更好的辦法)。

1、在哪裡定義適配器

一般情況下,適配器針對哪個類,就在包含這個類的文件中去定義它。例如,要編寫針對MainActivity類中使用的適配器,就在MainActivity.cs文件中去定義它。

2、創建自己的列表項類

到底創建那些列表項,就看你的需要了。下麵的代碼演示瞭如何創建MyItems類:

public class MyItems

{

public string Title { get; set; }

public string Desc { get; set; }

}

3、創建自定義適配器的技巧

一旦有了自己的列表項(MyItems類),就可以在自定義的適配器中去指定它了。

下麵的截圖演示瞭如何快速創建自定義適配器:

image

單擊黃色燈泡右方的小三角符號,在彈出的下拉框中選擇【實現抽象類】,它就會自動添加所有需要重寫的方法,不需要你自己去一個一個地敲代碼。

註意:這裡提示的“不實現……”實際上應該是“沒有實現…..”,這是中文翻譯的問題,自己明白它的實際含義就行了。

三、本章示例主界面

本章示例的所有源程式都在ch07demos項目中。

項目名:ch07demos

項目模板:Blank App(Android)

1、運行截圖

主界面運行截圖如下:

image

2、修改發佈的目標版本

在解決方案資源管理器中,滑鼠右擊【ch07demos】項目,選擇【屬性】,將【Compile using Android version】的選項改為“API Level 19”,如下圖所示:

image

 

 

3、修改清單文件(AssemblyInfo.cs)

在該文件中添加應用程式級別的主題以及其他配置。添加後的AssemblyInfo.cs的完整內容如下:

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using Android.App;

[assembly: AssemblyTitle("ch07demos")]
[assembly: AssemblyDescription("佈局控制項的基本用法")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("毛毛雨的博客樂園(http://www.cnblogs/rainmj/)")]
[assembly: AssemblyProduct("rainmjAndroidDemos")]
[assembly: AssemblyCopyright("Copyright ©  2016")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("zh-CN")]
[assembly: ComVisible(false)]

[assembly:Application(Theme = "@android:style/Theme.DeviceDefault.Light")]

[assembly: AssemblyVersion("1.0.*")]

4、修改主界面(Main.axml)

將Main.axml改為下麵的代碼:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ListView
        android:minWidth="25px"
        android:minHeight="25px"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listView1" />
</LinearLayout>

5、修改主活動文件(MainActivity.cs)

本章示例全部完成後MainActivity.cs的代碼如下:

using Android.App;
using Android.Views;
using Android.Widget;
using Android.OS;
using System.Collections.Generic;
using ch07demos.SrcDemos;

namespace ch07demos
{
    [Activity(Label = "ch07demos", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Main);
            List<MyItems> items = new List<MyItems>()
            {
                new MyItems {Title="Demo01--LinearLayout",Desc="演示線性佈局的基本用法" },
                new MyItems {Title="Demo02--GridLayout",Desc="演示網格佈局的基本用法" },
                new MyItems {Title="Demo03--TableLayout",Desc="演示表格佈局的基本用法" },
                new MyItems {Title="Demo04--RelativeLayout",Desc="演示相對佈局的基本用法" },
                new MyItems {Title="Demo05--FrameLayout",Desc="演示幀佈局的基本用法" }
            };
            ListView listView1 = FindViewById<ListView>(Resource.Id.listView1);
            listView1.Adapter = new MyAdapter(this, items);
            listView1.ItemClick += (s, e) =>
            {
                int index = e.Position + 1;
                switch (index)
                {
                    case 1:
                        StartActivity(typeof(Demo01LinearLayout));
                        break;
                    case 2:
                        StartActivity(typeof(Demo02GridLayout));
                        break;
                    case 3:
                        StartActivity(typeof(Demo03TableLayout));
                        break;
                    case 4:
                        StartActivity(typeof(Demo04RelativeLayout));
                        break;
                    case 5:
                        StartActivity(typeof(Demo05FrameLayout));
                        break;
                }
            };
        }
    }

    public class MyItems
    {
        public string Title { get; set; }
        public string Desc { get; set; }
    }

    public class MyAdapter : BaseAdapter<MyItems>
    {
        private List<MyItems> items;
        private Activity context;

        public override int Count
        {
            get
            {
                return items.Count;
            }
        }

        public override MyItems this[int position]
        {
            get
            {
                return items[position];
            }
        }

        public MyAdapter(Activity context, List<MyItems> items)
        {
            this.context = context;
            this.items = items;
        }

        public override long GetItemId(int position)
        {
            return position;
        }

        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            var item = items[position];
            View view = null;
            view = context.LayoutInflater.Inflate(Android.Resource.Layout.SimpleListItem2, null);
            view.FindViewById<TextView>(Android.Resource.Id.Text1).Text = item.Title;
            view.FindViewById<TextView>(Android.Resource.Id.Text2).Text = item.Desc;
            return view;
        }
    }
}

OK,這一章的第1講就到這裡了。


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

-Advertisement-
Play Games
更多相關文章
  • UIConllectionView和UITableView類似,也是展示數據,但不同於UITableView那種規則的佈局,UICollectionView可以實現不規則的佈局,即瀑布流。 創建UICollectionView UICollectionView *collectionView = [
  • 前言: 首先展示一下這個iOS小示例的彩色進度條動畫效果: 閱讀本文先說說好處:對於基礎不好的讀者,可以直接閱讀文末尾的"如何使用彩虹動畫進度條"章節,然後將我封裝好的這個功能模塊類用到你的工程項目中即可。 這個效果的示例是老外Nick Jensen在2013年寫的一個作品:使用CAGradient
  • UCZProgressView 是一個帶有通用的圓形圖片進度下載控制項。動畫效果不錯 特性 Customizable indicator (line width, radius, and color) Display a label with the current progress. Customi
  • 分類:C#、Android、VS2015; 創建日期:2016-02-11 一、簡介 TableLayout也是用行和列劃分單元格,但不會顯示Row、Column以及Cell的邊框線,其子元素有許多TableRow組成,每個TableRow定義表的一行(Row),每個Row擁有0個或多個單元格(Ce
  • 概念介紹 使用aspose生成word報表步驟: 載入word模板 提供數據源 填充 載入模板 提供了4種重載方法 ? 1 2 3 4 5 public Document(); public Document(Stream stream); public Document(string fileNa
  • 其中功能如下(附上一些參考截圖): 1.支持多個文件同時上傳。對文件批量操作 2.支持大文件上傳(文件大小上限為 500M)。 3.實時顯示上傳的進度:上傳百分比,上傳速度,上傳時間,剩餘時間等。 4.一次只能同時上傳5個文件,完成後自動上傳 隊列里的 等待文件。 5.把 已完成、正在上傳、以刪除
  • 出處:http://www.cnblogs.com/wintersun/ Memcached是開源高性能分散式緩存組件,目前已經廣泛應用各類互聯網領域. 具有多種語言的客戶端開發包,包括:Perl/PHP/JAVA/C/Python/Ruby/C#/MySQL. 這此站點已經在使用YouTube,R
  • (1).Net .Net指.Net平臺或者是.Net Framework框架。 如果你把.Net平臺想象成一個廚房,那麼.Net Framework框架就是其中的柴米油鹽醬醋茶。 如果你把.Net平臺想象成中國移動,那麼.Net Framework框架就是中國移動的信號塔。 所以說,.Net Fra
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...