編輯:關於android開發
分類:C#、Android、VS2015;創建日期:2016-02-06
第3章雖然通過百度地圖應用展示了你可能感興趣的內容,但是,如果你是一個初學者,一開始就看懂和理解代碼可能會非常費勁。為了解決此問題,從這一章開始,本模塊將從最基本的內容講起,帶你逐步進入用C#進行Android應用開發的樂園。
要用C#開發Android應用程序,首先需要對項目的基本結構有一個感性認識。如下圖所示:
Android應用程序使用的是單一入口,源程序中並不能一眼看出程序從哪開始運行,當應用程序加載到內存中時,Android操作系統會自動從內部自定義的入口處開始運行該應用程序。這種獨特的架構可讓程序員設計的代碼直接和Android操作系統交互,但其缺點也很明顯:即使一個非常簡單的程序,也會變得很復雜。
為了方便找到程序入口點,當新建一個Android項目時,默認情況下,在MainActivity.cs文件的特性聲明中通過“MainLauncher = true”表示程序從這個Activity開始執行:
[Activity(Label = "myDemos", MainLauncher = true)]
public class MainActivity : Activity
{
//……
}
注意MainActivity.cs的前綴,一般表示它控制的是布局文件Main.axml(但不是必須這樣做)。比如,如果把Main.axml改為First.axml,那麼它對應的Activity類最好命名為FirstActivity.cs,換言之,前綴只是為了方便查看它和界面的對應關系而已,這僅僅是一種命名習慣,而不是對文件命名的必然要求。
實際上,你可以把“MainLauncher = true”放到任何一個繼承自Activity的類中。總之,你將其放到哪個類的特性聲明中,程序就從哪個Activity開始執行。
在Android應用程序中,每個組件都是一個獨立的模塊,但並不是所有組件都是用戶進入程序的真實入口,其中一些要依賴於其它組件。
Android內置了四種不同的應用程序組件:Activity、Service、Content Provider和Broadcast recevicer。除此之外,還可以自定義組件並將其保存到項目的Components文件夾下。
在後面的章節中,還會專門介紹這些內容,這裡你只需要記住真正掌握Android應用開發技術,必須理解這些組件的含義和具體使用場合即可。
Assets文件夾包含了運行App需要的所有原始文件。該文件夾下可保存任意類型的文件:text、xml、fonts、music、video、……等。
下面的代碼演示了如何讀取Assets下的.txt文件:
using Android.App; using Android.OS; using Android.Widget; using System.IO; namespace MyTestProj { [Activity(Label = "Activity1")] public class Activity1 : Activity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); base.OnCreate(savedInstanceState); var textView1 = new TextView(this); string content; using (StreamReader sr = new StreamReader(Assets.Open("readme.txt"))) { content = sr.ReadToEnd(); } textView1.Text = content; SetContentView(textView1); } } }
一個Android App由代碼、資源文件以及自定義的組件構成。
資源文件保存到Resources文件夾下,包括圖片,音頻文件,以及任何與程序可見內容相關的東西。例如,自定義的動畫、菜單、風格、顏色以及由.axml文件(帶設計界面)或.xml文件(不帶設計界面)描述的用戶交互頁面的布局等。
Resources文件夾下保存的資源不包括代碼文件,而是指隨項目一起編譯和打包的除了代碼文件之外的其他文件,如聲音、視頻、圖像、字符串、布局文件等。
將資源單獨組織的優點是:代碼分離,這樣就可以適用於多平台,同時也能在編譯時進行檢查,並在編譯通過後為鍵入C#代碼提供智能提示。
使用資源可使修改程序的特征變得很容易,同時不必修改代碼。而且通過可選擇的資源集合,能為不同的設備配置優化程序(例如不同的國家語言和不同的屏幕尺寸等)。
系統搭建工具會自動為Android項目使用的每一個資源都定義一個唯一的整型ID,程序通過ID獲得代碼中的資源或者.xml或.axml中的其它資源的引用。例如,程序包含了一個名叫logo.png (保存在 Resources/drawable/ 目錄下)的圖片文件,工具就會生成一個叫做Resource.drawable.logo的資源ID,程序中可以用這個ID引用該圖片。
分隔資源的一個重要能力是為不同的設備配置提供可選擇的資源文件。例如,在XML中定義UI字符串,就可以把這些字符串翻譯成其它的國家語言,並在分隔的文件中分別保存。然後,根據追加到資源目錄名中的國家語言修飾符(例如res/values-fr/是法語字符串的值)和用戶對國家語言的設置,Android系統就會提供適當的國家語言字符串到UI中。
Android支持很多不同的修飾符以支持可選的資源。這些修飾符都是被加入到資源目錄名中的簡短字符串。這樣定義是為了定義設備的特定配置,以保證這個目錄下的資源可能會被使用到。
項目中常用的資源文件夾如下。
Drawable:保存通用的圖片文件。
drawable-ldpi:保存低分辨率手機專用的圖片文件。
drawable-mdpi:保存中等分辨率手機專用的圖片文件。
drawable-hdpi:保存高分辨率手機專用的圖片文件。
drawable-xdpi:保存超高分辨率手機專用的圖片文件。
drawable-xxdpi:保存超超高分辨率手機專用的圖片文件。
layout文件夾:用於保存所有界面文件(包括帶設計界面的.axml文件和不帶設計界面的.xml文件),如果你高興,可隨時將.xml更換為.axml,反之亦然。
Main.axml:默認的App主窗體布局文件,有Design和Source兩種模式。
Values文件夾:存放用字符串描述的資源文件信息(strings、integers、colors等),這些都是文本資源,在文件夾中有一些約定的文件名稱。(具體內容待以後詳解)
下表列出了默認的所有資源類型:
當將資源文件添加到項目中時,管道會自動將該資源描述添加到資源中,並自動生成對應的類(保存在Resource.designer.cs文件中),自動生成的類會為每個資源自動分配一個唯一的ID。
有兩種存取和管理資源的方式:
格式:@[<PackageName>.]Resource.<ResourceType>.<ResourceName>
例如:
SetContentView(Resource.Layout.Main); EditText phoneNumberText = FindViewById<EditText>(Resource.Id.PhoneNumberText);
格式:@[<PackageName>:]<ResourceType>/<ResourceName>
例如(見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"> <ImageView android:id="@+id/myImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/flag" /> </LinearLayout>
備用資源也是保存在Resources文件夾下,子文件夾的格式為:
<ResourceType>-<Qualifier>
即:<資源類型>-<限定標識符>
例如:drawable-hdpi
當有多個限定符時,各限定符之間用短劃線分隔。
限定符必須按下表列出的順序出現(該表實際是按優先級從高到低排列):
例如,v11的目標是API level 11 (Android 3.0)設備。.下圖列出了Android的判斷規則:
清單(Manifest)可以定義應用程序及其組件的結構和元數據。
AndroidManifest.xml文件包含在每個安卓應用程序中,該文件向系統描述了本程序所包括的組件、所實現的功能、所能處理的數據、要請求的資源等。
該文件的功能類似於網站中的Web.conig文件。
在AndroidManifest.xml文件中添加或刪除權限時,最常用的是通過VS2015主菜單下的項目屬性來設置與權限(Permissions)相關的屬性:
設置後,它會自動更新項目中Properties文件夾下的AndroidManifest.xml文件。如果項目的Properties文件夾下不存在該文件,系統會自動創建它。
在Android系統能夠啟動一個程序組件之前, 系統必須通過讀取程序的AndroidManifest.xml文件來知道這個組件是否存在。因此對於Java開發者要求程序必須在這個文件中聲明它所有的組件。
除了聲明程序組件外,這個配置文件還做一些其它的工作,例如:
但是,如果用C#來開發,“直接在AndroidManifest.xml文件中聲明”並不是必需的,因為用帶有智能提示的特性聲明來聲明它,然後讓編譯器自動生成合適的代碼添加到這個文件中更方便。
當然,如果你希望直接在該文件中添加聲明,也可以這樣做。換言之,C#開發給你提供了多種聲明清單的方式,你只需要按自己的習慣去選擇一種合適的方式即可。這些方式有:
通過這些方式,你就擁有了最大的靈活性,同時也是代碼看起來簡潔而直觀,
VS2015調試模式(Debug)使用的是可適應多種CPU架構的模式,發布模式(Release)用於選擇某種具體型號的手機,然後部署。
在調試狀態(Debug)下,下面的兩個選項默認是選中的:
這兩個選項選中後。可防止調試時指定某種具體的CPU架構(CPU Architectures),即在下面的配置中,下面這些選項是不可更改的:
通常情況下,實際發布應用程序時需要明確配置使用的CPU體系結構或架構。當更改為發布(Release)模式時,它會自動不勾選“Use Shared Runtime”和“Use Fast Delployment…”復選框,這樣一來,上圖中的選項就可選了。
Xamarin.Android提供下面的架構:
在Release模式下,Xamarin.Android默認指定的是armeabi-v7a,其性能比armeabi高。如果發布目標是64-bit ARM平台(例如Nexus 9),此時需要選擇arm64-v8a。如果發布到x86設備,就選擇x86,如果發布目標是64-bit的CPU架構,就選擇x86_64。
注意:由於在64位架構上可運行32位程序(例如Nexs 9就是64-bit ARM設備),因此,發布到64位手機設備上的時候,不是必須選擇arm64-v8a或x86_64,仍然可以繼續選擇32位架構,這樣做的優點是可避免應用程序占用過多的內存。
面向多平台的優點是可同時調試多種CPU,缺點是這會導致.apk文件很大,如果希望減少.apk文件的大小,發布時只選擇一個平台就行了。
注意:雖然在Xamarin.Android 5.1.x或更高版本中也可以體驗64位的功能,但實際發布時並不使用它。
安卓應用的界面編程(5),安卓界面編程第四組UI組件:AdapterView及其子類 AdapterView組件是一組重要的組件,Adapte
android 自定義圖片合集(自定義控件) 留守公司就剩下幾個人了。我沒有年假故還在堅守。廢話不多說,閒來無事。想練習一下自定義控件的應用以及學習圖片類操作以及處理
深入透析Android事件分發機制 一、 Android分發機制概述: Android如此受歡迎,就在於其優秀的交互性,這其中,Android優秀的事件分發機制功不
使用ViewPager切換Fragment時,防止頻繁調用OnCreatView,fragmentoncreat使用ViewPager切換Fragment,我原先使用系統
模擬QQ側滑控件 實現三種界面切換效果(知識點:回調機制,解析網絡jso