一、ListViewhtml
在android開發中ListView是比較經常使用的組件,它以列表的形式展現具體內容,而且可以根據數據的長度自適應顯示。抽空把對ListView的使用作了整理,並寫了個小例子:前端
列表的顯示須要三個元素:java
1.ListVeiw 用來展現列表的View。android
2.適配器 用來把數據映射到ListView上的中介。數據庫
3.數據 具體的將被映射的字符串,圖片,或者基本組件。windows
根據列表的適配器類型,列表分爲三種,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter後端
其中以ArrayAdapter最爲簡單,只能展現一行字。SimpleAdapter有最好的擴充性,能夠自定義出各類效果。SimpleCursorAdapter能夠認爲是SimpleAdapter對數據庫的簡單結合,能夠方面的把數據庫的內容以列表的形式展現出來。數組
咱們從最簡單的ListView開始:瀏覽器
package com.example.helloandroid; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.app.Activity; import android.app.ListActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; public class AndroidControl2Activity extends Activity { private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_android_control2); listView = new ListView(this); listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,getData())); setContentView(listView); } private List<String> getData(){ List<String> data = new ArrayList<String>(); data.add("測試數據1"); data.add("測試數據2"); data.add("測試數據3"); data.add("測試數據4"); return data; } }
上面代碼使用了ArrayAdapter(Context context, int textViewResourceId, List<T> objects)來裝配數據,要裝配這些數據就須要一個鏈接ListView視圖對象和數組數據的適配器來二者的適配工做,ArrayAdapter的構造須要三個參數,依次爲this,佈局文件(注意這裏的佈局文件描述的是列表的每一行的佈局,android.R.layout.simple_list_item_1是系統定義好的佈局文件只顯示一行文字,數據源(一個List集合)。同時用setAdapter()完成適配的最後工做。運行後的顯示效果以下圖:app
SimpleAdapter
simpleAdapter的擴展性最好,能夠定義各類各樣的佈局出來,能夠放上ImageView(圖片),還能夠放上Button(按鈕),CheckBox(複選框)等等。下面的代碼都直接繼承了ListActivity,ListActivity和普通的Activity沒有太大的差異,不一樣就是對顯示ListView作了許多優化,方面顯示而已。
下面的程序是實現一個帶有圖片的類表。
首先須要定義好一個用來顯示每個列內容的xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFFFFFFF" android:textSize="22px" /> <TextView android:id="@+id/info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFFFFFFF" android:textSize="13px" /> </LinearLayout> </LinearLayout>
實現代碼:
package com.example.helloandroid; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.app.ListActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; public class AndroidControl2Activity extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SimpleAdapter adapter = new SimpleAdapter(this,getData(),R.layout.activity_android_control2, new String[]{"title","info"}, new int[]{R.id.title,R.id.info}); setListAdapter(adapter); } private List<Map<String, Object>> getData() { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Map<String, Object> map = new HashMap<String, Object>(); map.put("title", "G1"); map.put("info", "google 1"); list.add(map); map = new HashMap<String, Object>(); map.put("title", "G2"); map.put("info", "google 2"); list.add(map); map = new HashMap<String, Object>(); map.put("title", "G3"); map.put("info", "google 3"); list.add(map); return list; } }
使用simpleAdapter的數據用通常都是HashMap構成的List,list的每一節對應ListView的每一行。HashMap的每一個鍵值數據映射到佈局文件中對應id的組件上。由於系統沒有對應的佈局文件可用,咱們能夠本身定義一個佈局vlist.xml。下面作適配,new一個SimpleAdapter參數一次是:this,佈局文件(xml),HashMap的 title 和 info。佈局文件的組件id,title,info。佈局文件的各組件分別映射到HashMap的各元素上,完成適配。
二、Spinner
一般分5步:
第一步:添加一個下拉列表項的list,這裏添加的項就是下拉列表的菜單項
第二步:爲下拉列表定義一個適配器,這裏就用到裏前面定義的list。
第三步:爲適配器設置下拉列表下拉時的菜單樣式。
第四步:將適配器添加到下拉列表上
第五步:爲下拉列表設置各類事件的響應,這個事響應菜單被選中
XML:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id= "@+id/widget28" android:layout_width= "fill_parent" android:layout_height= "fill_parent" android:orientation= "vertical" xmlns:android= "http://schemas.android.com/apk/res/android" > <TextView android:id= "@+id/TextView_Show" android:layout_width= "fill_parent" android:layout_height= "wrap_content" android:text= "你選擇的是" android:textSize= "25sp" > </TextView> <Spinner android:id= "@+id/spinner_City" android:layout_width= "fill_parent" android:layout_height= "wrap_content" > </Spinner> </LinearLayout>
代碼:
package com.example.helloandroid; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TextView; public class AndroidControl3Activity extends Activity { private List<String> list = new ArrayList<String>(); private Spinner mySpinner; private TextView myTextView; private ArrayAdapter<String> spinneradapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_android_control3); //Spinner顯示 //第一步:添加一個下拉列表項的list,這裏添加的項就是下拉列表的菜單項 list.add("北京"); list.add("上海"); list.add("深圳"); list.add("廣州"); mySpinner = (Spinner)findViewById(R.id.spinner_City); myTextView = (TextView)findViewById(R.id.TextView_Show); //第二步:爲下拉列表定義一個適配器,這裏就用到裏前面定義的list。 spinneradapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, list); //第三步:爲適配器設置下拉列表下拉時的菜單樣式。 spinneradapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //第四步:將適配器添加到下拉列表上 mySpinner.setAdapter(spinneradapter); //第五步:爲下拉列表設置各類事件的響應,這個事響應菜單被選中 mySpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){ @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub myTextView.setText("您選擇的是:"+ spinneradapter.getItem(position)); /* 將mySpinner 顯示*/ view.setVisibility(View.VISIBLE); } @Override public void onNothingSelected(AdapterView<?> parent) { // TODO Auto-generated method stub } }); } }
三、GridView
GirdView的一些屬性:
android:numColumns="auto_fit" --------列數設置爲自動 android:columnWidth="90dp",----------每列的寬度,也就是Item的寬度 android:stretchMode="columnWidth"------縮放與列寬大小同步 android:verticalSpacing="10dp"----------垂直邊距 android:horizontalSpacing="10dp"-------水平邊距
一、準備數據源
二、新建適配器
三、加載適配器
GridView(網格視圖)是按照行列的方式來顯示內容的,通常用於顯示圖片,圖片等內容,好比實現九宮格圖,用GridView是首選,也是最簡單的,下面來個實例,
activity_android_control4.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#000" > <GridView android:id="@+id/gview" android:layout_width="match_parent" android:layout_height="wrap_content" android:numColumns="auto_fit" android:columnWidth="80dp" android:stretchMode="columnWidth" ></GridView> </LinearLayout>
item.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center" android:padding="10dp" > <ImageView android:src="@drawable/ic_launcher" android:id="@+id/image" android:layout_width="60dp" android:layout_height="60dp" /> <TextView android:id="@+id/text" android:layout_marginTop="5dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#ffffff" android:text="文字" /> </LinearLayout>
AndroidControl4Activity.java:
package com.example.helloandroid; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.GridView; import android.widget.SimpleAdapter; public class AndroidControl4Activity extends Activity { private GridView gview; private List<Map<String, Object>> data_list; private SimpleAdapter sim_adapter; // 圖片封裝爲一個數組 private int[] icon = { R.drawable.address_book, R.drawable.calendar, R.drawable.camera, R.drawable.clock, R.drawable.games_control, R.drawable.messenger, R.drawable.ringtone, R.drawable.settings, R.drawable.speech_balloon, R.drawable.weather, R.drawable.world, R.drawable.youtube }; private String[] iconName = { "通信錄", "日曆", "照相機", "時鐘", "遊戲", "短信", "鈴聲", "設置", "語音", "天氣", "瀏覽器", "視頻" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_android_control4); gview = (GridView) findViewById(R.id.gview); //新建List data_list = new ArrayList<Map<String, Object>>(); //獲取數據 getData(); //新建適配器 String [] from ={"image","text"}; int [] to = {R.id.image,R.id.text}; sim_adapter = new SimpleAdapter(this, data_list, R.layout.item, from, to); //配置適配器 gview.setAdapter(sim_adapter); } public List<Map<String, Object>> getData(){ //cion和iconName的長度是相同的,這裏任選其一均可以 for(int i=0;i<icon.length;i++){ Map<String, Object> map = new HashMap<String, Object>(); map.put("image", icon[i]); map.put("text", iconName[i]); data_list.add(map); } return data_list; } }
四、Dialog
在Android開發中,咱們常常會須要在界面上彈出一些對話框,好比詢問用戶或者讓用戶選擇。這些功能咱們叫它Android Dialog對話框,在咱們使用Android的過程當中,據我所知,Android Dialog的類型無非也就7種,下面我分別向你們介紹這7Android Dialog對話框的使用方法,但願對你們能有所幫助。
圖1
圖2
圖3
圖4
圖5
圖6
圖7
圖8
1、主窗體圖1的實現,在Lanyout中添加7個按鈕,代碼以下所示:
1 package zqvie.com; 2 import android.app.Activity; 3 import android.app.AlertDialog; 4 import android.app.AlertDialog.Builder; 5 import android.os.Bundle; 6 import android.view.View; 7 import android.view.View.OnClickListener; 8 import android.widget.Button; 9 10 public class DialogActivity extends Activity implements OnClickListener { 11 /** Called when the activity is first created. */ 12 @Override 13 public void onCreate(Bundle savedInstanceState) { 14 super.onCreate(savedInstanceState); 15 setContentView(R.layout.main); 16 But_One=(Button) findViewById(R.id.But_One); //註冊按鈕But_One 17 But_Two=(Button) findViewById(R.id.But_Two); 18 But_Three=(Button) findViewById(R.id.But_Three); 19 But_Four=(Button) findViewById(R.id.But_Four); 20 But_Five=(Button) findViewById(R.id.But_Five); 21 But_Six=(Button) findViewById(R.id.But_Six); 22 But_Seven=(Button) findViewById(R.id.But_Seven); 23 But_One.setOnClickListener(this); //爲按鈕But_One註冊偵聽器 24 } 25 Button But_One,But_Two,But_Three,But_Four,But_Five,But_Six,But_Seven; //定義按鈕 26 }
2、圖2的實現,設置單擊「按鈕1」時,彈出對話框,代碼以下所示:
public void onClick(View v) { // TODO Auto-generated method stub if(v.getId()==R.id.But_One) { AlertDialog.Builder builder=new AlertDialog.Builder(DialogActivity .this);//生成一個對話框對象 builder.setMessage("肯定要退出嗎?"); //設置對話框的顯示信息 builder.setTitle("提示"); //設置對話框的標題 builder.setPositiveButton("肯定",null); //設置第一個按鈕的Text,null處也可替換爲new OnClickListener() {} builder.setNegativeButton("取消",null); //設置第二個按鈕的Text builder.create().show(); //建立並顯示對話框 } }
3、圖3的實現,設置單擊「按鈕2」時,彈出對話框,代碼和效果圖2以下所示:
if(v.getId()==R.id.But_Two) { AlertDialog.Builder builder= new AlertDialog.Builder(DialogActivity.this);//生成一個對話框對象 builder.setIcon( android.R.drawable.btn_star);//設置對話框的圖標 builder.setTitle("喜愛調查"); //設置對話的標題 builder.setMessage("你喜歡李連杰的電影嗎"); //設置對話框的顯示信息 builder.setPositiveButton("很喜歡",null); builder.setNeutralButton("通常",null); builder.setNegativeButton("不喜歡",null); builder.create().show(); }
4、圖4的實現,設置單擊「按鈕3」時,彈出對話框,代碼和效果圖3以下所示:
1 if(v.getId()==R.id.But_Three) 2 { 3 AlertDialog.Builder builder=new AlertDialog.Builder(this); 4 builder.setTitle("請輸入"); 5 builder.setIcon(android.R.drawable.ic_dialog_info); //設置對話框的圖標 6 builder.setView(new EditText(this)); //設置對話框中顯示一個輸入框 7 builder.setPositiveButton("肯定",null); 8 builder.setNegativeButton("取消",null); 9 builder.show(); 10 }
5、圖5的實現,設置單擊「按鈕4」時,彈出對話框,代碼和效果圖4以下所示:
1 if(v.getId()==R.id.But_Four) 2 { 3 Builder builder=new AlertDialog.Builder(this); //生成一個對話框對象 4 builder.setTitle("單選框"); //設置對話框的標題 5 builder.setIcon(android.R.drawable.ic_dialog_info); //設置對話框的圖標 6 builder.setSingleChoiceItems( new String[] { "Item1", "Item2" }, 0,null); //設置對話框的單選項 7 builder.setNegativeButton("取消", null); 8 builder.create().show(); 9 }
6、圖6的實現,設置單擊「按鈕5」時,彈出對話框,代碼和效果圖5以下所示:
1 if(v.getId()==R.id.But_Five) 2 { 3 Builder builder=new AlertDialog.Builder(this); //生成一個對話框對象 4 builder.setTitle("複選框"); //設置對話框的標題 5 builder.setMultiChoiceItems( new String[] { "Item1", "Item2" }, null, null); //設置對話框的複選項 6 builder.setPositiveButton("肯定", null); //設置對話框的第一個按鈕"肯定" 7 builder.setNegativeButton("取消", null); //設置對話框的第二個按鈕"取消" 8 builder.show(); 9 }
7、圖7的實現,設置單擊「按鈕6」時,彈出對話框,代碼和效果圖6以下所示:
1 if(v.getId()==R.id.But_Six) 2 { 3 Builder builder=new AlertDialog.Builder(this); //生成一個對話框對象 4 builder.setTitle("列表框"); 5 builder.setItems(new String[]{"Item1","Item2"},null); 6 builder.setNegativeButton("肯定",null); 7 builder.create().show(); 8 }
8、圖8的實現,設置單擊「按鈕7」時,彈出自定義對話框,這種對話框相對上面講的要複雜一些,它須要經過一個.xml文件來傳遞你要呈現的佈局。代碼和效果圖7以下所示:
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_height="wrap_content" android:layout_width="wrap_content" 4 android:background="#ffffffff" android:orientation="horizontal" 5 android:id="@+id/mydialog"> 6 <TextView android:layout_height="wrap_content" 7 android:layout_width="wrap_content" 8 android:id="@+id/tvname" android:text="姓名:" /> 9 <EditText android:layout_height="wrap_content" 10 android:layout_width="wrap_content" android:id="@+id/etname" android:minWidth="100dip"/> 11 12 </LinearLayout>
1 if(v.getId()==R.id.But_Seven) 2 { 3 LayoutInflater inflater = getLayoutInflater(); 4 View layout = inflater.inflate(R.layout.mydialog, 5 null); 6 7 new AlertDialog.Builder(this).setTitle("自定義佈局").setView(layout) 8 .setPositiveButton("肯定", null) 9 .setNegativeButton("取消", null).show(); 10 }
感悟
學習了製做對話框,才發現其實對話框的製做也是很是簡單的,通常狀況下只需設置對話框的標題、信息、圖標、按鈕便可,有的時候還須要添加文本框、單選按鈕、複選框、列表項。然而比較複雜的狀況就是自定義對話框。在設置自定義對話框的時候,須要設計一個你的xml文件,裏面是你的自定義佈局,而後經過,主窗體調用xml來實現自定義對話框的製做。
五、ProgressDialog
先看效果:
佈局文件:
<?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"> <Button android:text="圓形進度條" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Button android:text="長型進度條" android:id="@+id/Button02" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> </LinearLayout>
代碼:
package com.example.helloandroid; import android.app.Activity; import android.app.ProgressDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class ProgressDialogActivity extends Activity { private ProgressDialog mpDialog; private Button btn1,btn2; private int mCount = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_progress_dialog); //獲得按鈕對象 btn1 = (Button)findViewById(R.id.Button01); btn2 = (Button)findViewById(R.id.Button02); btn1.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub mpDialog = new ProgressDialog(ProgressDialogActivity.this); mpDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);//設置風格爲圓形進度條 mpDialog.setTitle("提示");//設置標題 mpDialog.setIcon(R.drawable.clock);//設置圖標 mpDialog.setMessage("這是一個圓形進度條"); mpDialog.setIndeterminate(false);//設置進度條是否爲不明確 mpDialog.setCancelable(true);//設置進度條是否能夠按退回鍵取消 mpDialog.setButton("肯定", new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); mpDialog.show(); } }); //設置mButton02的事件監聽 btn2.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub mCount = 0; // 建立ProgressDialog對象 mpDialog = new ProgressDialog(ProgressDialogActivity.this); // 設置進度條風格,風格爲長形 mpDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // 設置ProgressDialog 標題 mpDialog.setTitle("提示"); // 設置ProgressDialog 提示信息 mpDialog.setMessage("這是一個長形對話框進度條"); // 設置ProgressDialog 標題圖標 mpDialog.setIcon(R.drawable.camera); // 設置ProgressDialog 進度條進度 mpDialog.setProgress(100); // 設置ProgressDialog 的進度條是否不明確 mpDialog.setIndeterminate(false); // 設置ProgressDialog 是否能夠按退回按鍵取消 mpDialog.setCancelable(true); // 讓ProgressDialog顯示 mpDialog.show(); new Thread() { public void run() { try { while (mCount <= 100) { // 由線程來控制進度。 mpDialog.setProgress(mCount++); Thread.sleep(100); } mpDialog.cancel(); } catch (InterruptedException e) { mpDialog.cancel(); } } }.start(); } }); } }
六、Menu
Android的菜單有三種:
Options Menu
當用戶按下menu button按鈕時顯示的菜單
Context Menu
當用戶長久按住屏幕,即被註冊顯示上下文菜單的視圖時顯示的菜單
Submenu
當用戶按下一個菜單的某個選項時彈出的子菜單
Options Menu建立選項菜單的步驟:
一、覆蓋Activity 的onCreateOptionMenu(Menu menu)方法,當菜單第一次被打開時調用
二、調用Menu 的add( )方法添加菜單項(MenuItem),同時能夠調用MenuItem 的setIcon( )方法來爲菜單項設置圖標
三、當菜單項(MenuItem)被選擇時,覆蓋Activity 的onOptionsItemSelected(MenuItem item)來響應事件
Context Menu顧名思義,與上下文(環境)有關。思想相似於Windows中的右鍵單擊彈出的快捷菜單。操做時須要長時間按住某個東東不放。
建立上下文菜單的步驟:
一、覆蓋Activity 的onCreateContextMenu(Menu menu)方法,調用Menu的add()方法添加菜單項(MenuItem)。
二、覆蓋Activity 的onContextItemSelected(MenuItem iitem)來響應事件。
三、調用registerForContextMenu( )方法來爲視圖註冊上下文菜單。
佈局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="${relativePackage}.${activityClass}" > <Button android:id="@+id/ContextButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="20" android:text="按我彈出Context Menu" /> </RelativeLayout>
代碼:
package com.example.helloandroid; import android.app.Activity; import android.os.Bundle; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MenuActivity extends Activity { private Button btnContext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_menu); btnContext = (Button) findViewById(R.id.ContextButton); registerForContextMenu(btnContext); } @Override public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub //當用戶按下menu button按鈕時顯示的菜單 menu.add(0, 1, 1, "香蕉"); menu.add(0, 2, 2, "蘋果"); //當用戶按下一個菜單的某個選項時彈出的子菜單 SubMenu subMenu = menu.addSubMenu(1, 100, 100, "桃子"); subMenu.add(2, 101, 101, "大桃子"); subMenu.add(2, 102, 102, "小桃子"); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub if(item.getItemId() == 1){ Toast t = Toast.makeText(this, "你選的是蘋果", Toast.LENGTH_LONG); t.show(); } else if(item.getItemId() == 2){ Toast t = Toast.makeText(this, "你選的是香蕉", Toast.LENGTH_SHORT); t.show(); } return true; } //Context Menu @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub if(v==btnContext){ menu.setHeaderTitle("這是1"); menu.add(200, 200, 200, "Context Menu 1"); menu.add(200, 201, 201, "Context Menu 2"); } super.onCreateContextMenu(menu, v, menuInfo); } }
效果圖:
七、AutoCompleteTextView
自動完成文本框,它實際上也是一個文本編輯框,能夠理解爲對EditText功能的擴展,它對輸入的內容能夠進行提示而且自動完成。本文會講解經常使用屬性設置,以及如何向AutoCompleteTextView增長提示數據.
說明
自動完成文本框(AutoCompleteTextView),能夠從官方文檔上看出,是從EditText繼承而來,因此它實際上也是一個文本編輯框,只是多了一個自動提示輸入補全的功能。功能相似於:當用戶輸入必定字符以後,自動完成文本框會顯示一個下拉列表,供用戶從中選擇,當用戶選擇某個菜單項以後,AutoCompleteTextView會按照的選擇自動填寫該文本框。
經常使用屬性
由於是繼承自EditText,因此AutoCompleteTextView除了可使提供用Edit的屬性和方法以外,還支持以下一些特殊的屬性及方法,這裏只介紹一些經常使用的,具體請參見官方文檔:
填充選擇數據
在Android程序中,爲了展現數據,一般會用到一個Adapter的接口。沒錯,這是一個接口,是鏈接後端數據和前端顯示的橋樑,是data souce和UI(View)之間一個重要的紐帶。下圖展現了Adapter在Android程序中的關係:
對於Adapter,它是一個接口,Android爲其聲明瞭各類實現類,對於在AutoCompleteTextView控件中,通常使用ArrayAdapter<T>便可完成功能,對於一些其餘實現類的應用場景,之後會慢慢介紹。
ArrayAdapter<T>繼承自一個抽象類BaseAdapter,而這個抽象類實現了Adapter接口,因此繼承關係應該是:Adapter→BaseAdater→ArrayAdapter<T>。
從名字上能夠看出,ArrayAdapter<T>是以一個數組的形式去存儲數據的,它也確實是這麼作的,而且能夠傳遞一個數組對其進行構造。因此咱們只須要填充一個數組對象,就完成ArrayAdapter對象的初始化工做,在把獲得的ArrayAdapter對象傳遞給AutoCompleteTextView控件,便可對其進行選擇數據設置。
佈局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="${relativePackage}.${activityClass}" > <AutoCompleteTextView android:id="@+id/autotext" android:completionHint="Famous Citi" android:completionThreshold="1" android:layout_width="match_parent" android:layout_height="wrap_content" /> </RelativeLayout>
代碼:
package com.example.helloandroid; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; public class AutoCompleteTextViewActivity extends Activity { private AutoCompleteTextView autotext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_auto_complete_text_view); autotext=(AutoCompleteTextView)findViewById(R.id.autotext); //設置數據源 String[] autoStrings=new String[]{"New York","Tokyo","beijing","london","Seoul Special","Los Angeles"}; //設置ArrayAdapter,而且設定以單行下拉列表風格展現(第二個參數設定)。 ArrayAdapter<String> adapter=new ArrayAdapter<String>(AutoCompleteTextViewActivity.this, android.R.layout.simple_dropdown_item_1line, autoStrings); autotext.setAdapter(adapter); } }
八、SeekBar
拖動條(SeekBar)和進度條很是類似,只是進度條採用顏色填充來代表進度完成的程度,而拖動條則經過滑塊的位置來標識數值----並且拖動條容許用戶拖動滑動塊來改變值,所以拖動條一般用於對系統的某種數值進行調節,好比音量調節。
SeekBar容許用戶改變拖動條的滑塊外觀,改變滑塊外觀經過以下屬性來指定
android:thumb 指定一個Drawable對象,該對象將做爲自定義滑塊。
爲了讓程序能響應拖動條滑塊位置的改變,程序能夠考慮爲他綁定一個OnSeekBarChangerListener監聽器。
經過一個實例:經過滑動塊來改變圖片的透明度,來看看SeekBar。
佈局XML:
<?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/image" android:layout_width="fill_parent" android:layout_height="240px" android:src="@drawable/world" /> <SeekBar android:id="@+id/seekbar" android:layout_width="fill_parent" android:layout_height="wrap_content" android:max="255" android:progress="255" android:thumb="@drawable/ic_launcher" /> </LinearLayout>
代碼:
package com.example.helloandroid; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.ImageView; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; public class SeekBarActivity extends Activity { private ImageView image; private SeekBar seekBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_seek_bar); image = (ImageView)this.findViewById(R.id.image); seekBar = (SeekBar)this.findViewById(R.id.seekbar); seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBar seekBar) { } @Override public void onStartTrackingTouch(SeekBar seekBar) { } //當拖動條的滑塊位置發生改變時觸發該方法 @Override public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) { image.setAlpha(arg1); } }); } }
效果以下: