一.自动补全文本框(AutoCompleteTextView)
是Android提供的一种便捷输入建议的文本框,这些输入建议可以来源于曾经输入的历史记录、cookies、数据字典等。
源码:
布局只有一个TextView和AutoCompleteTextView。
<span style="font-family: Arial, Helvetica, sans-serif;"><pre name="code" class="java">j<span style="font-family: Arial, Helvetica, sans-serif;">ava代码</span></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><pre name="code" class="java"></span>
<span style="font-family: Arial, Helvetica, sans-serif;">public class LoginActivity extends Activity {</span>
//1.定义
private TextView tView;
private AutoCompleteTextView auto;
static final String[] str=new String[]{"wang","wangyu","wangyuyu","wangyuwen"};
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
findID();
//2.将字符串内容导入适配器
adapter=new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,str);
//3.设置阈值,一般设为1
auto.setThreshold(1);
//4.通过适配器获得字符串内容
auto.setAdapter(adapter);
}
public void findID(){
this.tView=(TextView)this.findViewById(R.id.userText);
this.auto=(AutoCompleteTextView)this.findViewById(R.id.userAuto);
}
}
效果:
<pre name="code" class="java"><img src="https://img-blog.csdn.net/20150406142548731?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3l1NTAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
二.列表(ListVIew)
是Android中非常重要也相对复杂的一个控件,将需要显示的内容以列表的形式展示出来,并且能够根据数据的长度适当地调节显示。SimpleAdapter是扩展性最好的一种适配器,通过这个适配器,可以让ListView中的每项内容可以自定义出各种效果,可以将ListView中某项的布局信息直接写在一个单独的xml文件中,通过R.layout.layout_name中来获得这个布局。
源码:
java代码
public class PersonHome extends Activity {
//1.定义SimpleAdapter和ListView
private SimpleAdapter simpleAdapter;
private ListView lView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.person_home);
//2.实例化
lView = (ListView) findViewById(R.id.listView1);
simpleAdapter = new SimpleAdapter(this, getMyData(),
R.layout.personal_item, new String[] { "photo", "school",
"sex", "star_level", "detail" }, new int[] {
R.id.imageView1, R.id.textView1, R.id.textView2,
R.id.textView3, R.id.button1 });
//3.把适配器添加到ListView
lView.setAdapter(simpleAdapter); };
//此方法里面填充ListView需要显示的内容
private List<Map<String, Object>> getMyData() {
List<Map<String, Object>> mList = new ArrayList<Map<String, Object>>();
Map<String, Object> mMap = new HashMap<String, Object>();
mMap.put("photo", R.drawable.button1);
mMap.put("school", "民大驾校");
mMap.put("sex", "男");
mMap.put("star_level", "3星级");
mMap.put("detail", "详细>>>");
mList.add(mMap);
mMap = new HashMap<String, Object>();
mMap.put("photo", R.drawable.button2);
mMap.put("school", "鼠星驾校");
mMap.put("sex", "女");
mMap.put("star_level", "5星级");
mMap.put("detail", "详细>>>");
mList.add(mMap);
return mList;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.person_home, menu);
return true;
}
}
xml代码
person_home.xml
<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".PersonHome" >
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="24dp"
android:layout_marginTop="33dp" >
</ListView>
</RelativeLayout>
person_item.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="117dp"
android:layout_height="85dp"
android:layout_marginTop="24dp"
android:src="@drawable/button1" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/imageView1"
android:layout_toRightOf="@+id/imageView1"
android:text="TextView" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_marginTop="14dp"
android:layout_toRightOf="@+id/imageView1"
android:text="TextView" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/imageView1"
android:layout_alignLeft="@+id/textView2"
android:text="TextView" />
<Button
android:id="@+id/button1"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/textView3"
android:layout_alignParentRight="true"
android:layout_marginRight="28dp"
android:text="Button" />
</RelativeLayout>
效果:
<pre name="code" class="html">
三.菜单(Menu)
Android中的菜单分为三种:选项菜单(OptionsMenu),上下文菜单(ContextMenu),子菜单(SubMenu)
1.选项菜单(OptionsMenu):单击Menu键时会在当前屏幕的下面弹出一个菜单,即选项菜单,显示当前Activity的可用操作列表。
2.上下文菜单(ContextMenu):长按控件会弹出一个菜单
3.子菜单(SubMenu):是一个层层递进的菜单
源码:
java代码
public class MenuActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
TextView tView=(TextView)findViewById(R.id.menuText);
registerForContextMenu(tView);//为文本框注册上下文菜单,长按文本会弹出一个上下文菜单
}
@Override
//系统自动调用函数生成选项菜单,表明如何创建菜单
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(Menu.NONE,1,1,"添加").setIcon(android.R.drawable.ic_menu_add);
menu.add(Menu.NONE,2,1,"删除").setIcon(android.R.drawable.ic_menu_delete);
menu.add(Menu.NONE,3,2,"帮助").setIcon(android.R.drawable.ic_menu_help);
menu.add(Menu.NONE,4,2,"详情").setIcon(android.R.drawable.ic_menu_info_details);
menu.add(Menu.NONE,5,2,"保存").setIcon(android.R.drawable.ic_menu_save);
return true;
}
//创建上下文菜单和子菜单
public void onCreateContextMenu(ContextMenu menu,View view,ContextMenuInfo menuInfo){
menu.setHeaderTitle("上下文菜单");
menu.add(0,6,0,"菜单项1");
SubMenu subMenu=menu.addSubMenu("菜单一");
subMenu.add(0,7,0,"子菜单项1");
}
//某项菜单被选择后的响应事件
public boolean onOptionsItemSelected(MenuItem item) {
<span style="white-space:pre"> </span>switch (item.getItemId()) {
<span style="white-space:pre"> </span>case 1:
<span style="white-space:pre"> </span>Toast.makeText(this, "add in the menu", Toast.LENGTH_LONG).show();
<span style="white-space:pre"> </span>break;
<span style="white-space:pre"> </span>case 2:
<span style="white-space:pre"> </span>Toast.makeText(this, "delete in the menu", Toast.LENGTH_LONG)
<span style="white-space:pre"> </span>.show();
<span style="white-space:pre"> </span>break;
<span style="white-space:pre"> </span>case 3:
<span style="white-space:pre"> </span>Toast.makeText(this, "help in the menu", Toast.LENGTH_LONG).show();
<span style="white-space:pre"> </span>break;
<span style="white-space:pre"> </span>case 4:
<span style="white-space:pre"> </span>Toast.makeText(this, "info in the menu", Toast.LENGTH_LONG).show();
<span style="white-space:pre"> </span>break;
<span style="white-space:pre"> </span>case 5:
<span style="white-space:pre"> </span>Toast.makeText(this, "save in the menu", Toast.LENGTH_LONG).show();
<span style="white-space:pre"> </span>break;
<span style="white-space:pre"> </span>case 6:
<span style="white-space:pre"> </span>Toast.makeText(this, "选择了菜单项1", Toast.LENGTH_LONG).show();
<span style="white-space:pre"> </span>case 7:
<span style="white-space:pre"> </span>Toast.makeText(this, "zi菜单项1", Toast.LENGTH_LONG).show();
<span style="white-space:pre"> </span>default:
<span style="white-space:pre"> </span>break;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return true;
<span style="white-space:pre"> </span>}
}
布局文件只有一个TextView控件
效果:
<img src="https://img-blog.csdn.net/20150406142618262?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3l1NTAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><img src="https://img-blog.csdn.net/20150406142921734?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3l1NTAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="317" height="455" alt="" /><pre name="code" class="java"><img src="https://img-blog.csdn.net/20150406142527612?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3l1NTAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="317" height="455" alt="" />
四.对话框(Dialog)Android提供的与用户交互的对象。最常用的是AlertDialog,ProgressDialog
AlertDialog:允许在对话窗口最多添加三个按钮(positive,neutral,negative)
源码:
java代码
public class DialogActivity extends Activity {
private Button button;
<pre name="code" class="java"> private Button button1;
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_dialog);findID();
//定义按钮的监听
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
showDialog(0);
}
});
<pre name="code" class="java"> button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
showDialog(1);
}
});
}//生成对话框的操作public Dialog onCreateDialog(int id) {switch (id) {case 0:return Dialog1(DialogActivity.this);
case 1:
<span style="white-space:pre"> </span>return Dialog2(DialogActivity.this);
default:
break;
}
return null;
}
private Dialog Dialog1(Context context) {
//定义三个按钮的对话框
AlertDialog.Builder dialog1 = new AlertDialog.Builder(context);
dialog1.setIcon(R.drawable.ic_launcher);
dialog1.setTitle("three buttons");
dialog1.setMessage("三个按钮的对话框");
dialog1.setPositiveButton("登录", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
setTitle("是否登錄");
}
});
dialog1.setNeutralButton("提示",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
setTitle("是否提示");
}
});
dialog1.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
setTitle("是否取消");
}
});
return dialog1.create();
}
//生成对话框对象,并设置标题和显示内容
private Dialog Dialog2(Context context) {
<span style="white-space:pre"> </span>final ProgressDialog dialog2 = new ProgressDialog(context);
<span style="white-space:pre"> </span>dialog2.setTitle("进度条对话框");
<span style="white-space:pre"> </span>dialog2.setMessage("正在连接");
<span style="white-space:pre"> </span>dialog2.setButton("取消", new DialogInterface.OnClickListener() {
<span style="white-space:pre"> </span>@Override
<span style="white-space:pre"> </span>public void onClick(DialogInterface arg0, int arg1) {
<span style="white-space:pre"> </span>dialog2.dismiss();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>});
<span style="white-space:pre"> </span>return dialog2;
<span style="white-space:pre"> </span>}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.dialog, menu);
return true;
}
public void findID() {
<pre name="code" class="java"> button = (Button) findViewById(R.id.buttonDialog);
button1 = (Button) findViewById(R.id.progressDialog);
}}
布局文件为两个按钮。
效果: