Android常用UI

来源:互联网 发布:ipad淘宝免费试用在哪 编辑:程序博客网 时间:2024/04/28 12:14
详细介绍列表视图(ListView)、单选(RadioGroup)、多选(CheckBox)、下拉列表(Spinner)、菜单(Menu)、内容提示文本框(AutoCompleteTextView)、手势识别(GestureOverlayView)、网页视图(WebView)。

1.列表视图(ListView)

 

XML配置

     在主界面中配置<ListView>标签

     在res/layout/文件夹下创建一个新的xml文件指定每个条目的布局

Java代码构建ListView

     获取ListView对象

     设置一个Adapter

          用适配器封装有两种方式:

             1.SimpleAdapter:以List<Map<String,?>>形式封装数据

             2.SimpleCursorAdapter:以Cursor对象封装数据,Cursor中需要有“_id”一列

添加OnItemClickListener

     调用ListView的getItemAtPosition(int)方法可以获取封装数据的容器

     如果传入的是SimpleAdapter,获取到的就是一个Map<String,?>

     如果传入的是SimpleCursorAdapter,获得到的就是一个Cursor,并且Cursor以指向选中的一条记录

 

 示例:

用SimpleAdapter进行数据绑定

[java] view plaincopy
  1. public class MainActivity extends Activity {  
  2.     private PersonService service;  
  3.     @Override  
  4.     public void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.main);  
  7.         service = new PersonService(this);  
  8.         ListView listView = (ListView) this.findViewById(R.id.listView);  
  9.           
  10.         //获取到集合数据  
  11.         List<Person> persons = service.getScrollData(010);  
  12.         List<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>();  
  13.         for(Person person : persons){  
  14.             HashMap<String, Object> item = new HashMap<String, Object>();  
  15.             item.put("id", person.getId());  
  16.             item.put("name", person.getName());  
  17.             item.put("phone", person.getPhone());  
  18.             item.put("amount", person.getAmount());  
  19.             data.add(item);  
  20.         }  
  21.        //创建SimpleAdapter适配器将数据绑定到item显示控件上  
  22.        SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item,   
  23.                 new String[]{"name""phone""amount"}, new int[]{R.id.name, R.id.phone, R.id.amount});  
  24.        //实现列表的显示  
  25.        listView.setAdapter(adapter);  
  26.        //条目点击事件  
  27.        listView.setOnItemClickListener(new ItemClickListener());  
  28.     }  
  29.        //获取点击事件      
  30.     private final class ItemClickListener implements OnItemClickListener{  
  31.   
  32.         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {  
  33.             ListView listView = (ListView) parent;  
  34.             HashMap<String, Object> data = (HashMap<String, Object>) listView.getItemAtPosition(position);  
  35.             String personid = data.get("id").toString();  
  36.             Toast.makeText(getApplicationContext(), personid, 1).show();  
  37.         }  
  38.     }  
  39. }  


 用SimpleCursorAdapter进行数据绑定

[java] view plaincopy
  1. public class MainActivity extends Activity {  
  2.     private PersonService service;  
  3.     @Override  
  4.     public void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.main);  
  7.         service = new PersonService(this);  
  8.         ListView listView = (ListView) this.findViewById(R.id.listView);  
  9.         //获取游标  
  10.         Cursor cursor = service.getCursorScrollData(010);  
  11.         //创建SimpleCursorAdapter适配器将数据绑定到item显示控件上  
  12.         SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.item, cursor,   
  13.                 new String[]{"name""phone""amount"}, new int[]{R.id.name, R.id.phone, R.id.amount});  
  14.         listView.setAdapter(adapter);  
  15.         //条目点击事件  
  16.         listView.setOnItemClickListener(new ItemClickListener());  
  17.     }  
  18.       
  19.     private final class ItemClickListener implements OnItemClickListener{  
  20.   
  21.         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {  
  22.             ListView listView = (ListView) parent;  
  23.             Cursor cursor = (Cursor) listView.getItemAtPosition(position);  
  24.             String personid = String.valueOf(cursor.getInt(cursor.getColumnIndex("_id")));  
  25.             Toast.makeText(getApplicationContext(), personid, 1).show();  
  26.         }  
  27.     }  
  28. }  

 

2.单选(RadioGroup)

定义<RadioGroup> 

在<RadioGroup>中定义<RadioButton>和<Button>

处理Button点击事件

根据ID获取RadioGroup对象,调用其getCheckedRadioButtonId()方法可以获取其中被选中的RadioGroup的ID

 main.xml:

[html] view plaincopy
  1. <RadioGroup  
  2.   android:id="@+id/radioGroup"  
  3.   android:layout_width="fill_parent"   
  4.   android:layout_height="wrap_content"   
  5.   android:orientation="horizontal"  
  6.   >  
  7.     <RadioButton  
  8.       android:id="@+id/java"  
  9.       android:layout_width="fill_parent"   
  10.       android:layout_height="wrap_content"   
  11.       android:text="Java"  
  12.       android:layout_weight="1"  
  13.     />    
  14.     <RadioButton  
  15.       android:id="@+id/net"  
  16.       android:layout_width="fill_parent"   
  17.       android:layout_height="wrap_content"   
  18.       android:text=".NET"  
  19.       android:layout_weight="1"  
  20.     />    
  21.     <RadioButton  
  22.       android:id="@+id/php"  
  23.       android:layout_width="fill_parent"   
  24.       android:layout_height="wrap_content"   
  25.       android:text="PHP"  
  26.       android:layout_weight="1"  
  27.     />    
  28.      <Button  
  29.       android:id="@+id/php"  
  30.       android:layout_width="fill_parent"   
  31.       android:layout_height="wrap_content"   
  32.       android:text="确定"  
  33.       android:onClick="submitRadio"  
  34.       android:layout_weight="1"  
  35.      />  
  36. </RadioGroup>  

MainActivity:

[java] view plaincopy
  1. public void submitRadio(View view){  
  2.     //获取选中按钮的ID  
  3.     int id =radioGroup.getCheckedRadioButtonId();  
  4.     RadioButton radioButton=(RadioButton)findViewById(id);  
  5.     Toast.makeText(this,radioButton.getText(), 0).show();  
  6. }  


3.多选(CheckBox)

定义若干<CheckBox>和一个<Button>

处理Button的点击事件

根据findViewById获取每个CheckBox,调用其isChecked()方法判断是否被选中

[html] view plaincopy
  1. <LinearLayout  
  2.     android:layout_width="fill_parent"  
  3.     android:layout_height="wrap_content"  
  4.     >  
  5.     <CheckBox  
  6.       android:id="@+id/javaCheckBox"  
  7.         android:layout_width="fill_parent"   
  8.         android:layout_height="wrap_content"   
  9.       android:text="Java"  
  10.       android:layout_weight="1"  
  11.     />    
  12.     <CheckBox  
  13.       android:id="@+id/netCheckBox"  
  14.         android:layout_width="fill_parent"   
  15.         android:layout_height="wrap_content"   
  16.       android:text=".NET"  
  17.       android:layout_weight="1"  
  18.     />    
  19.     <CheckBox  
  20.       android:id="@+id/phpCheckBox"  
  21.         android:layout_width="fill_parent"   
  22.         android:layout_height="wrap_content"   
  23.       android:text="PHP"  
  24.       android:layout_weight="1"  
  25.     />    
  26.        <Button  
  27.         android:layout_width="fill_parent"   
  28.         android:layout_height="wrap_content"   
  29.       android:text="确定"  
  30.       android:onClick="submitCheckBox"  
  31.       android:layout_weight="1"  
  32.      />  
  33.  </LinearLayout>  


4.下拉列表(Spinner)

定义<Spinner>标签

创建一个适配器

获取Spinner标签,调用setAdapter(SpinnerAdapter adapter)方法设置一个适配器

调用setOnItemSelectedListener(OnItemSelectedListener listener)方法设置监听器监听选中事件

使用字符串构建适配器

[java] view plaincopy
  1. public void onCreate(Bundle savedInstanceState) {  
  2.     super.onCreate(savedInstanceState);  
  3.     setContentView(R.layout.main);  
  4.     spinner = (Spinner) findViewById(R.id.spinner);  
  5.     generateSpinner();  
  6. }  
  7.   
  8. private void generateSpinner() {  
  9.     //android.R.layout.simple_spinner_item下拉列表的样式  
  10.     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);  
  11.     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);  
  12.     adapter.add("Java");  
  13.     adapter.add(".NET");  
  14.     adapter.add("PHP");  
  15.     spinner.setAdapter(adapter);  
  16.     //监听器  
  17.     spinner.setOnItemSelectedListener(new OnItemSelectedListener(){  
  18.         public void onItemSelected(AdapterView<?> parent, View view,  
  19.                 int position, long id) {  
  20.             String selection=(String)parent.getItemAtPosition(position);  
  21.             Toast.makeText(getApplicationContext(), selection, 0).show();  
  22.         }  
  23.         public void onNothingSelected(AdapterView<?> arg0) {  
  24.         }  
  25.     });  
  26. }  

使用JavaBean构建适配器

[java] view plaincopy
  1. private void generateSpinnerByJavaBean() {  
  2.     ArrayAdapter<User> adapter = new ArrayAdapter<User>(this, android.R.layout.simple_spinner_item);  
  3.     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);  
  4.     adapter.add(new User(1,"aaa","aaa@163.com"));  
  5.     adapter.add(new User(2,"bbb","bbb@163.com"));  
  6.     adapter.add(new User(3,"ccc","ccc@163.com"));  
  7.     spinner.setAdapter(adapter);  
  8.     //监听器  
  9.     spinner.setOnItemSelectedListener(new OnItemSelectedListener(){  
  10.         public void onItemSelected(AdapterView<?> parent, View view,  
  11.                 int position, long id) {  
  12.             User user=(User)parent.getItemAtPosition(position);  
  13.             Toast.makeText(getApplicationContext(), user.toString(), 0).show();  
  14.         }  
  15.         public void onNothingSelected(AdapterView<?> arg0) {  
  16.         }  
  17.     });  
  18. }  

使用资源文件构建适配器

支持国际化

资源文件:

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <string-array name="items">  
  4.         <item>Java</item>  
  5.         <item>.NET</item>  
  6.         <item>PHP</item>  
  7.     </string-array>  
  8. </resources>  


MainActivity

[java] view plaincopy
  1. private void generateSpinnerByResource() {  
  2.     ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.items, android.R.layout.simple_spinner_item);  
  3.     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);  
  4.     spinner.setAdapter(adapter);  
  5.     spinner.setOnItemSelectedListener(new OnItemSelectedListener(){  
  6.         public void onItemSelected(AdapterView<?> parent, View view,  
  7.                 int position, long id) {  
  8.             CharSequence selection=(CharSequence)parent.getItemAtPosition(position);  
  9.             Toast.makeText(getApplicationContext(), selection, 0).show();  
  10.         }  
  11.         public void onNothingSelected(AdapterView<?> arg0) {  
  12.         }  
  13.     });  
  14. }  


 

自定义适配器样式

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.custom, R.id.content);

R.layout.custom 布局文件ID

R.id.content 哪一个组件用来显示文本

自定义布局文件:

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.   xmlns:android="http://schemas.android.com/apk/res/android"  
  4.   android:layout_width="fill_parent"  
  5.   android:layout_height="wrap_content"  
  6.   >  
  7.   <ImageView  
  8.       android:layout_width="wrap_content"  
  9.       android:layout_height="wrap_content"  
  10.       android:src="@android:drawable/btn_radio"  
  11.   />  
  12.   <TextView  
  13.       android:id="@+id/content"  
  14.       android:layout_width="wrap_content"  
  15.       android:layout_height="wrap_content"  
  16.       android:layout_marginLeft="30dp"  
  17.       android:textColor="#FFFF0000"  
  18.       android:textSize="30sp"  
  19.   />  
  20. </LinearLayout>  

activity:

[java] view plaincopy
  1. private void generateSpinnerByResource() {  
  2.     ArrayAdapter<String> adapter =new ArrayAdapter<String>(this,R.layout.item,R.id.content);  
  3.     adapter.add("java");  
  4.     adapter.add(".NET");  
  5.     adapter.add("php");  
  6.     spinner.setAdapter(adapter);  
  7. }  

5.菜单(Menu)

    

添加菜单项

1.重写Actvity的onCreateOptionsMenu(Menu menu)方法

2.添加菜单项

     调用方法中参数menu的add(CharSequence title) 方法

3.添加子菜单

    调用menu对象的addSubMenu(final CharSequence title)

    该方法返回一个SubMenu对象

4.添加子菜单的菜单项

   调用SubMenu对象的add(CharSequence title) 方法

处理菜单点击事件

重写Activity的onOptionsItemSelected(MenuItem item) 方法

     参数item即为被选中的菜单项

[java] view plaincopy
  1. /* 
  2.  * 点击菜单按钮时会调用这个方法 
  3.  * 支持子菜单,子菜单中不能再创建子菜单 
  4.  */  
  5. public boolean onCreateOptionsMenu(Menu menu) {  
  6.     menu.add(Menu.NONE,0,1,"增加1");  
  7.     menu.add(Menu.NONE,1,0,"增加2");  
  8.     menu.add("修改");  
  9.     menu.add("删除");   
  10.     //创建子菜单  
  11.     SubMenu subMenu=menu.addSubMenu("查询");  
  12.     subMenu.add("按id查询");  
  13.     subMenu.add("按名字查询");  
  14.     subMenu.add("按邮箱查询");  
  15.     return super.onCreateOptionsMenu(menu);  
  16. }  
  17.   
  18. /* 
  19.  * 点击菜单项会执行这个方法 
  20.  * @see android.app.Activity#onOptionsItemSelected(android.view.MenuItem) 
  21.  */  
  22. public boolean onOptionsItemSelected(MenuItem item) {  
  23.     Toast.makeText(this, item.getTitle(), 0).show();  
  24.     return super.onOptionsItemSelected(item);  
  25. }  

6.手势识别(GestureOverlayView)

创建手势库

导入SDK中的工程

   android-sdk-windows\samples\android-8\GestureBuilder

   这个工程不能直接导入,需要添加三个配置文件:.classpath、.project、default.properties

将工程部署到手机中,创建手势库

   手势库会存储在手机SD卡的根目录

使用手势识别

    

XML配置:

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7.     <android.gesture.GestureOverlayView  
  8.         android:id="@+id/gov"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="fill_parent"  
  11.         android:gestureStrokeType="multiple"  
  12.         >  
  13.         <ImageView  
  14.             android:id="@+id/img"  
  15.             android:layout_width="wrap_content"   
  16.             android:layout_height="wrap_content"   
  17.             />  
  18.     </android.gesture.GestureOverlayView>  
  19. </LinearLayout>  

Java代码:

[java] view plaincopy
  1. public void onCreate(Bundle savedInstanceState) {  
  2.     super.onCreate(savedInstanceState);  
  3.     setContentView(R.layout.main);  
  4.     gov = (GestureOverlayView) findViewById(R.id.gov);  
  5.     img=(ImageView) findViewById(R.id.img);  
  6.     //获取到手势库,并加载  
  7.     library = GestureLibraries.fromRawResource(this, R.raw.gestures);  
  8.     library.load();  
  9.     gov.addOnGesturePerformedListener(new MyListener());  
  10. }  
  11. private final class MyListener implements OnGesturePerformedListener {  
  12.     public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {  
  13.         //手势库来匹配手势  
  14.         ArrayList<Prediction> list = library.recognize(gesture);  
  15.           
  16.         //查询手势库匹配的分值并打印  
  17.         for(Prediction p:list){  
  18.             System.out.println(p.name+":"+p.score);  
  19.         }  
  20.           
  21.         //获取匹配度最高的选项  
  22.         Prediction p =list.get(0);  
  23.           
  24.         //如果匹配值小于3则不能识别  
  25.         if(p.score<3){  
  26.             Toast.makeText(getApplicationContext(), "手势不能识别"0).show();  
  27.         }else if("true".equals(p.name)){  
  28.             //执行的内容  
  29.         }else if("o".equals(p.name)){  
  30.             //执行的内容  
  31.         }else if("x".equals(p.name)){  
  32.             //执行的内容  
  33.         }  
  34.     }  
  35. }  

7.网页视图(WebView)

WebView(网络视图)能加载显示网页,它使用了WebKit渲染引擎加载显示网页,WebKit是android手机中内置了一款高性能内核浏览器。

XML配置:

[html] view plaincopy
  1. <WebView  
  2.     android:id="@+id/webView"  
  3.     android:layout_width="fill_parent"   
  4.     android:layout_height="fill_parent"  
  5.     />  


java代码:

[java] view plaincopy
  1. WebView webView = (WebView) findViewById(R.id.webView);  
  2. // 或取内容  
  3. String url = editText.getText().toString();  
  4. // 设置是否可缩放  
  5. webView.getSettings().setBuiltInZoomControls(true);  
  6. // 设置是否支持脚本  
  7. webView.getSettings().setJavaScriptEnabled(true);  
  8. // 设置客户端(谷歌Chrome客户端)  
  9. webView.setWebChromeClient(new WebChromeClient());  
  10. // 加载页面  
  11. webView.loadUrl(url);  


 

8.内容提示文本框(AutoCompleteTextView)

单次提示

   XML文件:

[html] view plaincopy
  1.   <AutoCompleteTextView  
  2.     android:id="@+id/actv"  
  3.     android:layout_width="fill_parent"  
  4. android:layout_height="wrap_content"  
  5. android:completionThreshold="1"  
  6.     />  

   Java代码:

[java] view plaincopy
  1. private void generateActv() {  
  2.     AutoCompleteTextView actv = (AutoCompleteTextView) findViewById(R.id.actv);  
  3.     String[] items = { "tom""tony""terry""付东""付荣""付贵" };  
  4.     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, items);  
  5.     actv.setAdapter(adapter);  
  6. }  


 

 多次提示


 XML文件:

[html] view plaincopy
  1.   <MultiAutoCompleteTextView  
  2.     android:id="@+id/mactv"  
  3.     android:layout_width="fill_parent"  
  4. android:layout_height="wrap_content"  
  5. android:completionThreshold="1"  
  6.     />  

Java代码:

[java] view plaincopy
  1. private void generateMactv() {  
  2.     MultiAutoCompleteTextView mactv = (MultiAutoCompleteTextView) findViewById(R.id.mactv);  
  3.     String[] items = { "tom""tony""terry""付东""付荣""付贵" };  
  4.     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, items);  
  5.     mactv.setAdapter(adapter);  
  6.     //用分隔符进行分割  
  7.     mactv.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());  
  8. }  
0 0
原创粉丝点击