【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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...