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

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

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


分類:C#、Android、VS2015;

創建日期:2016-02-09

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

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

在AssemblyInfo.cs文件中配置應用程式清單是用C#編寫應用程式建議的做法。

在AssemblyInfo.cs文件中配置應用程式清單的優點是:由於鍵入C#代碼時有方便的智能提示,添加、修改清單配置都比直接在AndroidManifest.xml文件中配置容易多了。

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

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

總之,本人還是更喜歡在AssemblyInfo.cs文件中配置它,這種方式既能讓你利用智能提示很直觀地看到到底有哪些可配置的選項,也能讓你一眼就能看出配置是否有錯。

從這一章開始,我們將採用這種辦法配置在整個應用程式範圍內都起作用的清單,而不再去直接修改AndroidManifest.xml文件了。

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

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

這一節我們將學習如何讓主界面顯示的內容更靈活,這也是實際項目中常用的辦法。

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
更多相關文章
  • 筆記信息 複習: 表單作用: 從使用的角度上說:html提供了一個輸入內容的途徑。 從伺服器的角度:提供了一個收集信息的途徑。 以便客戶端和伺服器進行交互。 例:註冊頁面,上傳文件。 3種常見元素:input select textarea Input的十種常見類型: text,password,r
  • 今天就是一個網頁的入門,說實話我不太想當前端工程師。因為 那些東西 不會按照我的想法來實現對應的效果。我只想做一個大概。我想做後端開發。如果能是伺服器端就很happy。如果能有 android的部分 就很happy。 然後現在就只是單單來寫一些對應屬性就好: 1、基本屬性: <font> 字體標簽,
  • 一、對於KVC模式(Key Value Coding): 1、其實在實際開發中用得比較多得就是:接收到json數據之後,通過解析,解析成NSDictionary,然後再把字典對應的欄位建立一個Model,在Model裡面自定義一個類方法+(instancetype)modelWithDictiona
  • 分類:C#、Android、VS2015; 創建日期:2016-02-10 一、簡介 LinearLayout將容器內的組件一個挨著一個地橫向或縱向依次堆疊起來(不重疊)。該佈局和WPF的StackPanel控制項的功能非常相似,也是通過orientation屬性設置排列的方向是縱向(vertical
  • 構造函數 example1: static void Main(string [] args) { SE engineer=new SE(); engineer.Age=25; enginner.Name="艾邊成"; //省略其他屬性賦值操作 Console.WriteLine(engineer....
  • 郵箱發送今天終於解決了,從不會到會用了3個晚上才終於解決了,有好多問題都不是代碼的問題,而是郵箱的設置上的問題。下麵我一一的講解一下。 1.郵箱發送的原理,我使用圖片來解釋 左邊的[email protected]是發送的郵箱(下麵我就是用a郵箱指代),右邊的[email protected]是接收
  • 數據存儲層在項目Ninesky.DataLibrary中實現,整個項目只有一個類Repository。 Repository中實現增刪改查詢等方法供業務邏輯層調用,主要功能如下圖: 具體步驟 一、添加實體框架的引用。 1、打開解決方案,選擇項目Ninesky.DataLibrary,在引用上右鍵,選...
  • 用VS新建WinForm程式,窗體上是三個文本框和一個按鈕。可以自己構造正則表達式,自己修改匹配內容正則表達是要提取的部分為hewenqitext代碼如下: 1 using System; 2 using System.Text.RegularExpressions; 3 using System.
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...