新的一年,新的開始,2016,我要作什麼,你們要作什麼,啦啦啦。php
OK,上篇已經介紹了幾個簡單的控件,此次,咱們繼續說說控件。可是可能有人認爲這有什麼難的,問題不在這裏,而在於,若是你注意了每個空間,或者你就會發現,在不少的應用裏面,不少的玩意都是直接用的控件。html
1、Visual Studio 工具箱佈局android
一、Other Widgets 這裏就一個Switch,其實也就是一個開關佈局git
二、Images & Media 這裏面的有ImageButton、ImageView、MediaController、VideoView等等。這裏的這些就是引用的一些基本的播放器,能夠直接從字面意思領略。ide
三、Layouts 佈局我就不說了工具
四、Composite 通俗的說,這裏面的基本上都是相似列表的的那種控件,好比,ExpandableListView能夠作一個手風琴那樣的樣式(http://blog.csdn.net/gyflyx/article/details/6461242)再如ListView,也就是一個簡單的風格(http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html)GridView(http://www.cnblogs.com/tinyphp/p/3855224.html)。。等等。佈局
五、Advanced 裏面的這些我尚未看,不過感受仍是和佈局有關的。post
六、Form Widgets 這裏面就是一些經常使用的,好比button、text、checkbox等等。測試
七、Text Fields 如E-mail(http://www.2cto.com/kf/201209/153859.html),Password這類的,怎麼說,感受這個就屬於和系統交互數據的那部分組件。this
八、Time & Date 這裏的包含了日期控件和時間控件等等。
九、Other Layouts 從字面意思就能理解這是其餘的佈局了
感受寫了這些沒什麼做用,仍是直接說怎麼用吧。百度網盤API下載:http://pan.baidu.com/s/1hqUeF6O
這些個API能夠直接查詢,好比,我要查詢前面說到的ImageButton
咱們能夠直接經過API來查詢,來找一些屬性,寫代碼應該都是這個道理了,寫的多了,理解了,也就記住了。
2、控件
1、ImageView
<ImageView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/imageView1" />
這裏這麼寫的目的是爲了介紹幾個方法:
①、SetImageDrawable
private void Set_iv_url() { ImageView iv1 = FindViewById<ImageView>(Resource.Id.imageView1); iv1.SetImageDrawable(Resources.GetDrawable(Resource.Drawable.myapk)); }
這裏的SetImageDrawable這裏訪問的Resorce,也就是說訪問的是
如圖,也就是說我這裏的寫法是直接經過在Resources的文件夾下面的drawable來訪問的,由於只要是資源文件,都有一個ID,也就是這裏的resID,可是確定會發現上面還有一個level.
②、SetImageLevel
道理也是同樣,可是這裏傳遞的就是
iv1.SetImageLevel(Android.Resource.Drawable.AlertDarkFrame);
也就是說這裏的這個引用的是系統的資源,而不是上面的那個咱們拷貝進去的資源,固然,還有一些,好比SetImageBitmap,直接按照正常的寫法寫就能夠了。
2、CheckBox
<CheckBox android:text="是否顯示" android:layout_width="match_parent" android:layout_height="wrap_content" android:checked="true" android:id="@+id/cb_test" />
這個咱們就看一下CheckBox選中就能夠,可是怎麼在界面上獲得這個值呢。
CheckBox cb = FindViewById<CheckBox>(Resource.Id.cb_test); cb.CheckedChange += Cb_CheckedChange;
由於在Android全部的界面元素都要去尋找,因此強轉是每一步必需要寫的。
/// <summary> /// 是否選擇,選擇提示框 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Cb_CheckedChange(object sender, CompoundButton.CheckedChangeEventArgs e) { //e.CheckedId //是否選中 Toast.MakeText(this, e.IsChecked.ToString(), ToastLength.Long).Show(); }
這裏能夠看到Toast.MakeText這個方法,是須要添加命名空間 Android.Widget 的,固然引用都同樣,直接 using就能夠了,至於裏面的ToastLength是一個內置的枚舉值,後面的Show()方法,纔是重點,就是這個,才能打印到界面上,能夠嘗試一下。
3、RadioGroup
關於這個控件,你們應該能猜想是什麼了,直接拖到界面上,你就曉得了,而後把裏面的RadioButton的值變一變什麼的,你懂的
private void Rb_RatingBarChange(object sender, RatingBar.RatingBarChangeEventArgs e) { Toast.MakeText(this, e.CheckedId.ToString(), ToastLength.Long).Show(); }
固然了,這個組件也是CheckedChange這個方法,直接調用這個方法,而後寫一個方法,委託給它就好。其中,由於這個是一組RadioButton,咱們經過如今的CheckedId能夠獲取到的就是以下這個ID,有了這個ID,咱們又能夠作不少事情了,啦啦啦。
4、日期和時間控件
爲何要直接這麼說呢,你們直接在工具欄就能夠看到 Time & Date,就在那裏面你一個個的去脫,就知道了。
一、AnalogClock 就是一個石英錶的錶盤,直接拖過來就能看到效果的。
二、DigitalClock 這個呢,是一個數字時鐘,能夠調解爲24小時制的,也能夠是上午下午的那種。
三、TimePicker 這就是一個時間控件。做爲時間控件,那麼咱們首先確定要獲取到值。
TimePicker tp = FindViewById<TimePicker>(Resource.Id.timePicker1); tp.SetIs24HourView(Java.Lang.Boolean.True); tp.TimeChanged += Tp_TimeChanged;
在這裏,必定要注意SetIs24HourView()這個方法,尼瑪,各類坑爹,也就是說這個方法原本的值其實也就是true或者false,可是在這裏傳遞的時候,必須是Java.Lang.Boolean.True,Ok,說到這裏,請你們必定要注意,這就是個坑,
在Vs2015裏面,只要是加了Java,好麼,你就照着寫就行,別想那麼多,雖然咱們都明白Boolean和Bool一個德行,可是呢,你懂的。
private void Tp_TimeChanged(object sender, TimePicker.TimeChangedEventArgs e) { int hour = e.HourOfDay; int min = e.Minute; Toast.MakeText(this, hour.ToString() + ":" + min.ToString(), ToastLength.Short).Show(); }
如上,直接經過代碼獲取值就能夠了。不過可能由於虛擬機的關係,個人反應仍是至關慢的,可是放到實體機器上面,效率仍是不錯的。
如圖,在紅色框裏面的信息就是咱們的Toast.MakeText方法,Show()以後獲得的效果,仍是不錯的麼,哈哈。
5、RatingBar
相信我,當我把這個控件拖到頁面上的時候,我瞬間驚呆了,尼瑪,這不就是訂餐軟件的打分、諸如天貓、京東此類的打分麼,個人個神呀。
OK,咱們說說,怎麼獲取吧,看代碼
RatingBar rb = FindViewById<RatingBar>(Resource.Id.ratingBar1); rb.Rating = 13f;//分數 rb.RatingBarChange += Rb_RatingBarChange;
private void Rb_RatingBarChange(object sender, RatingBar.RatingBarChangeEventArgs e) { if (e.FromUser) { Toast.MakeText(this, e.FromUser + "--" + e.Rating, ToastLength.Short).Show(); } }
其餘的我就不說了,就說一下這裏的FormUser的意思就是是否人爲改變,意思就是究竟是不是有效操做了,Rating,註釋也加了,分數,相信本身運行一下,大家有沒有感受其實咱們也是很叼的樣子。
6、開關
ToggleButton和Switch都有點開關的樣子,我也沒有具體看,直接就跳過了,看下效果圖。
3、發短信和打電話
一、發短信
直接來界面代碼
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/et_sms_per" android:inputType="phone" android:textSize="48px" android:hint="聯繫人" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/et_sms_content" android:inputType="phone" android:textSize="48px" android:hint="請輸入內容" /> <!--wrap_content:包裹內容--> <ImageButton android:src="@drawable/resizeApi" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/img_btn_sms" /> </LinearLayout>
順便說下這裏面能夠的 xmlns:android="http://schemas.android.com/apk/res/android" 這一段申明絕對不能漏掉,看效果圖。
順便說下,這個按鈕圖片是網上找的,隨便找了一個,可能至關難看,不要問我爲何,額,就這樣。
後臺代碼:
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); //獲取button ImageButton img_btn_sms = FindViewById<ImageButton>(Resource.Id.img_btn_sms); img_btn_sms.Click += delegate { btn_Send(); }; } private void btn_Send() { //要發送的對象 EditText et_per = FindViewById<EditText>(Resource.Id.et_sms_per); //要發送的內容 EditText et_content = FindViewById<EditText>(Resource.Id.et_sms_content); //執行發送 //得到默認的消息管理器 SmsManager smsManager = SmsManager.Default; if (!string.IsNullOrEmpty(et_per.Text)) { if (!string.IsNullOrEmpty(et_content.Text)) { //拆分信息 IList<string> list = smsManager.DivideMessage(et_content.Text); //循環發送 foreach (string str in list) { //發送短信 smsManager.SendTextMessage(et_per.Text, null, str, null, null); //顯示發送成功 Toast.MakeText(this, "發送成功!!", ToastLength.Long).Show(); } } else { //沒有短信內容 Toast.MakeText(this, "沒有短信內容!", ToastLength.Long).Show(); } } else { //顯示發送成功 Toast.MakeText(this, "沒有填寫聯繫人!", ToastLength.Long).Show(); } }
簡單的解釋一下,首先,咱們要用到Android.Telephony,這個就是發短信的管理器,必需要用到這個系統運用。也就是SmsManager。
短信有一個弊端,也就是說不能大於70字,理論值是這樣,那麼咱們在這裏採用DivideMessage() 這個就是用來拆分消息,拆分紅多條,可是,問題就來了,用戶接受到的確定是多條短信,因而呢,就有了 sendMultipartTextMessage() 這個方法,這個的目的就是說短信發送的時候其實仍是70個字這樣的截取的,收費仍是這麼收費的,可是,在接收的時候,咱們看到的是一條短信,至於到底爲何這樣,額,這個問題,對於我來講,有點高深,我也是百度的。。雖然我已經親自測試這個方法可用。
接下來就說說我發短信遇到的問題吧,剛有代碼是不夠的,首先,由於我本地下載的是 API23 和API 15,大爺的,每次默認的都是創建的API23的程序,可是我只有一個API15的虛擬機,因此說,第一次啓動都失敗了。
打開AVD Manage能夠看到咱們如今創建的虛擬機究竟是那個版本,而後程序→右鍵→屬性
先看下是否是匹配,而後再繼續,問題又來了,就像咱們操做Android手機同樣,不是有一個root麼,也就是說要有權限,坑爹呀,一樣,右鍵屬性
對,就是這裏,權限勾選上,OK,終於成了。
2、打電話
打電話相對而言就簡單了。一樣的,寫一個EditText,獲取要撥打的電話號碼,而後寫一個Button就能夠
後臺代碼
Button button = FindViewById<Button>(Resource.Id.MyButton); button.Click += delegate { btn_Call(); };
private void btn_Call() { /* 報錯:權限問題 既CALL_PHONE的權限(右鍵→屬性→Android Mainifest) */ EditText et_num = FindViewById<EditText>(Resource.Id.tel_num); //調用系統的撥打號碼界面 //必須是 tel 開頭的 Intent intent = new Intent(Intent.ActionCall, Android.Net.Uri.Parse("tel:" + et_num.Text)); //啓動撥打界面 StartActivity(intent); }
我想這個我就不解釋了,直接看註釋,我也是百度的,必需要注意的就是,在這裏的Android.Net.Uri.Parse 在這裏直接傳值是不能夠的,必需要有一個tel的識別符號,而後我也試着把冒號刪除掉,也不行,雖然我用10086測試的,哈哈。
OK,本次就到這裏,但願你們動動您的雙手,給小弟點個贊,或者給點寶貴意見也能夠。