常用基本控件
Activity
用户所看到的界面可以理解为一个Activity,设置Activity布局的伪代码如下:
setContentView(Layout)
T example = (T)findViewById(R.id.xxx)
在主程序中,主要有以下重载的函数:
onCreate()
onStart()
·········
onStop()
onDestroy()
startActivity(Intent)
startActivityForResult(Intent,0)+onActivityResult方法重载
被主程序启动的Aty基本和主程序一样,如果主程序使用了startActivityForResult,该Aty中可以用setResult(0,Intent)来返回结果
Service
Service可以理解为用户看不见的Activity
主程序:
startService(Intent)+onServiceConnected方法重载
bindService(Intent,Context,Content.BIND_AUTO_CREATE)
服务程序:
onBind(Intent) //被绑定了后执行(一般来说,启动服务的同时会自动绑定)
Broadcast Receiver
用于接收广播事件,如主程序执行sendBroadcast后,receiver会执行Onreceive函数
ContentProvider
为不同应用之间共享数据提供的接口,如访问并读取联系人:
Cursor c = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null,null,null,null,null);
while(c.moveToNext()){
String info = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
System.out.println(">>>>"+info);
}
Intent
用于启动连接各种控件的基本单位,可以附带数据,例如
Intent i = new Intent(this,target.class);
//i.putExtra("text","Hello target!"); //第一个参数为数据的名字,第二个是数据的内容
Bundle data = new Bundle(); //更大的存放数据的结构
data.putString("text","Hello target!");
i.putExtras(data); //注意有个 s
startActivity(i); //启动Activity
同时,取数据的操作如下:
Intent i = getIntent();
//String data = i.getStringExtra("text"); //根据数据名来取得数据内容
Bundle data = i.getExtras();
String txt = data.getString("text");
ListView
列表View,配合Adapter使用
lv = (ListView) findViewById(R.id.xxx);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1); //listView的每一个View都是一个简单的String
lv.setadapter(adapter);
适配器除了使用自带的以外,可以自定义
public class CustomListViewAdapter extends BaseAdapter {
private Context context;
private CustomListCellData[] data = new CustomListCellData[]{
new CustomListCellData("Hello1","h1",R.drawable.img1),
new CustomListCellData("Hello2","h2",R.drawable.img2)
};
public CustomListViewAdapter(Context context){
this.context=context;
}
@Override
public int getCount() {
return data.length;
}
@Override
public CustomListCellData getItem(int i) {
return data[i];
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
/* TextView tv=null;
if(view!=null){
tv = (TextView) view;
}else{
tv = new TextView(CustomListView.this);
}
tv.setTextSize(20);
tv.setText(getItem(i));
return tv;*/
LinearLayout ll=null;
if(view!=null){
ll=(LinearLayout) view;
}else{
ll= (LinearLayout) LayoutInflater.from(this.context).inflate(R.layout.customlistcell,null);
}
CustomListCellData data = getItem(i);
ImageView icon = ll.findViewById(R.id.icon);
TextView name = (TextView) ll.findViewById(R.id.name);
TextView dec = (TextView) ll.findViewById(R.id.dec);
icon.setImageResource(data.getIconId());
name.setText(data.getName());
dec.setText(data.getDec());
return ll;
}
}
其中列表中的每个View的内容就是根据getView函数返回的内容而定的,getCount函数很重要,适配器需要根据这个函数来确定读取View的数量
ListCellData是自定义的数据类型,里面存放着提供给View的数据;customlistcell是一个自定义的LinearLayout,也是listView的每一个Item的形式
对于点击了列表中的某一项而需要触发某些事件,需要绑定点击事件
lv.setOnItemClickListener(this); //如果是this,则在本类里直接重载onItemClick方法即可
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l){
CustomCellData data = apdaterView.getItem(i); //根据id获得Item
Toast.makeText(this,String.format("Name:%s",data.getName()),Toast.LENGTH_SHORT).show(); //提示一条信息
}
RadioGroup
和RadioButton一起使用,由多个RadioButton形成一个RadioGroup从而实现单选的功能
Checkbox
独立的选择框,一般用于多选功能的实现,所以和RadioButton(RadioGruop)不同,没有Group的概念
DataPicker
一般是直接调用系统的日期选择控件,通常设置一个按钮来进行配合,点击按钮后触发弹出一个可以选择年月日的对话框的事件,指令为DatePickerDialog()
Dialog相关的一般都是一个类,对其类进行了构造定义后,使用show方法即可显示dialog
TimePicker
和DataPicker一样,选择的是时分秒
Spinner
和ListView很像,同样也是设置Adapter,只不过效果上呈现的点击后出现一个像列表的东西
ProgressBar
顾名思义,进度条而已
评论已关闭