Android 常用控件大全


Android 常用控件总结 Notepad++编写 可以负责粘贴到其中去 看得更清楚。(内容包括了 Android 中的 大部分常用控件及其事件的监听) 第一章 1.1 Android 中 src 文件夹包含项目的所有包及其资源文件,res 文件夹包含了 项目中所有的资源。比如:程序图标(drawable),布局文件(layout),常量(value), 音频文件(raw) R.java 是在创建项目是自动生成的只读文件,不可更改此文件。R 文件其作 用:是定义项目中所有资源的索引文件。 1.2 AndroidManfest.xml 如下: //使用 SDK 版本号 //应用程序名字 / //描述了 Activity 的启动时间 和位置,另外为了支持查找 Activity 可以包含一个或多个 //acton 为组件支持的 Intent action //categor 为组件支持的 Intent category 这里指定了引用程序的默认启动的 Activity //在此对新增 的 Activity 进行注册。如果在不同的包中注意声明是将包名带上 1.3 String.xml 如下: //此处定义了两个字符串资源,即 定义了 app_name,hello 常量 Hello World, SummaryActivity! Summary 如何使用这个资源呢?如下: Resources r = this.getContext().getResources(); //通过 Context 的 getResource()实例化一个 Resources 对象 String app_name = ((String)r.getString(R.string.app_name)); //然后 通过 getString()方法取得指定的索引的字符串。项目中所有常量都可以在 String.xml 文件中定义 String hello = ((String)r.getString(R.string.hello)); 1.4 main.xml 如下: 1.5 src 下的 java 如下: package Android.Summary; import android.app.Activity; import android.os.Bundle; public class SummaryActivity extends Activity { //继承自 Activity /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState){ //重写 onCreate()方法 super.onCreate(savedInstanceState); setContentView(R.layout.main); //设置要显示的布局 } } 第二章 2.1 Android 应用程序由四个模块组成:Activity,Service,Intent, ContentProvider(注意:一个应用程序不一定包含全部的四个模块). 在使用时必须在 AandroidManfest 中进行声明。 Activity 可以理解为用户看到屏幕,主要用于处理应用程序的整体性工作。 如: a.监听系统事件,触屏事件,为用户显示指定的 View,启动其他 Activity 等。 b.所有应用的 Activity 都继承于 android.app.Activity,该类是 Android 提供的基层类。 c.一个 Activity 通常就是一个单独的屏幕。 d.每一个活动都被实现为一个独立的类。 e.大多数的应用程序都是由多个 Activity 组成。 Intent Aandroid 中主要用 Intent 类实现从一个 Activity 跳转到另一个 Activity。在 Intent 的描述结构中,有两个重要的部分:动作和对应的数据。 典型的动作有 MAIN,VIEW,PICK,EDIT.而动作对应的数据则以 URI 的形式 表示。例如:要查一个人的联系方式,需要创建一个动作类型 View 的 Intent ,以及一个表示这个人的 URI. Intent 的使用: button1.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v){ Intent intent = new Intent(); //创建一个 Intent 对象 intent.setClass(Activity01.this,Activity02.class);//指明 要启动的另一 Activity02 startActivity(intent); //启动一个新的 Activity Activity01.this.finish(); //关闭当前 Activity01 } }); 这里需要注意在 Android 中对新启动的 Activity 进行声明。声明方式: //注意:如果 在不同的包中在声明是还要加上包名 IntentReceiver 如果希望 Android 应用能够对外部事件(如电话打入时,数据网络可用 时,)做出响应,可用使用 IntentReceiver.虽然 IntentReceiver 在如上事件发生 时会使用 NotificationManager 通知用户,但它并不能生产 UI。 IntentReceiver 可以在 AndroidManifest.xml 中注册,也可在代码中使用 Context.registerReceiver 进行注册。当 IntentReceiver 被触发时,系统会在需要的时候启动应用。 各种应用还可以通过 ContentReceiver()将他们自己的 IntentReceiver 广播出 去。 ??????? Content Provider 作用:主要用于不同应用程序中的数据的传递。 Content Provider 是一个特殊的存储数据的类型。 Android 自身提供现成的 Content Provider:Contacts ,Browser,CallLog,Settings,MediaStore 应用可用通过唯一的 ContentResolver 界面来使用具体的 Conten Provider,然后可以用 ContentResolver 提供的方法来使用你需要的 Content Provider 其中,ContentResolver 提供的方法有 query(),insert(),update()等。 URI----String 形式的 Content Provider 的完整路径。 下面这个这个例子通过 ContentProvider 获取电话本中的数据,然后显示 到 TextView 中去。 public class Activity01 extends Activity{ public void onCreate(Bundle savedInstanceState){ TextView textView = new TextView(this);//得到 TextView 对象 String string = ""; super.onCreate(savedInstanceState); ContentResolver resolver = getContentResolver();//得到 ContentResolver 对象 Cursor cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI,null,null,null,null );//取得电话本中开始一项的光标,通过 query 方法查询出符合标准的电话本记录 //向下移动光标 while(cursor.moveToNext()){ //取得联系人名字 int name_index = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME); String name = cursor.getString(name_index); //取得电话号码 int number_index = cursor.getColumnIndex(PhoneLookup.NUMBER); String number = cursor.getString(number_index); string +=(name+":"+number+"\n"); } cursor.close(); textView.setText(string);//设置 TextView 显示的内容 setContentView(textView);//显示到屏幕上 其实 TextView 也是 View 的一种 } } 注意:在使用这些模块中用到了读取联系人的 API,所以必须在 AndroidManifest.xml 中声明 声明方式为: Service 后台服务,没有界面 启动 service 方法: a.Context.startService() b.Context.bindService()//与上一种方法不同处 如果这个 Service 没有处于启动状态,则将其启动 下面这个例子以 Activity 中的俩个控件来控制播放一首 Mp3. (例中:需 要在 res 文件夹中创建一个 raw 文件夹 然后放入一首 MP3) public class Activity01 extends Activity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); //从 main.xml 布局中获得 Button 对象 Button button_start = (Button)findViewById(R.id.start); Button button_stop = (Button)findViewById(R.id.stop); //设置按钮(Button)监听 button_start.setOnClickListener(start); button_stop.setOnClickListener(stop); } //开始按钮 private OnClickListener start = new OnClickListener(){ public void onClick(View v){ //开启 Service startService(new Intent("com.yarin.Android.MUSIC")); } }; //停止按钮 private OnClickListener stop = new OnClickListener(){ public void onClick(View v){ //停止 Service stopService(new Intent("com.yarin.Android.MUSIC")); } }; } public class MusicService extends Service{ //MediaPlayer 对象 private MediaPlayer player; public IBinder onBind(Intent arg0){ return null; } public void onStart(Intent intent, int startId){ super.onStart(intent, startId); //这里可以理解为装载音乐文件 player = MediaPlayer.create(this, R.raw.test); //开始播放 player.start(); } public void onDestroy(){ super.onDestroy(); //停止音乐-停止 Service player.stop(); } } AndroidManifest.xml 文件中 2.2 Aandrod 的生命周期 public class Activity02 extends Activity{ private static final String TAG = "Activity02"; public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main2); Log.v(TAG, "onCreate"); } public void onStart(){ super.onStart(); Log.v(TAG, "onStart"); } public void onResume(){ super.onResume(); Log.v(TAG, "onResume"); } public void onPause(){ super.onPause(); Log.v(TAG, "onPause"); } public void onStop(){ super.onStop(); Log.v(TAG, "onStop"); } public void onDestroy(){ super.onDestroy(); Log.v(TAG, "onDestroy"); } public void onRestart(){ super.onRestart(); Log.v(TAG, "onReStart"); } } 这些方法都是系统自动调用的。 第三章 3.1 事件处理 * 控件事件通过设置其控件的监听器来监听并处理事件 * 按键按下事件:通过重写 onKeyDown 方法 * 按键弹起事件:通过重写 onKeyUp 方法 * 触笔点击事件:通过实现 onTouchEvent 方法 * 示例中使用了 Toast 控件: * Toast.makeText(this, string, Toast.LENGTH_SHORT).show(); public class Activity01 extends Activity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); //获得 Button 对象 Button button_ok = (Button) findViewById(R.id.ok); button_ok.setOnClickListener(new Button.OnClickListener() {-------------------------------------------------------//设置 Button 控 件监听器 public void onClick(View v){ //这里处理事件 DisplayToast("点击了 OK 按钮"); } }); } /* 按键按下所触发的事件*/ public boolean onKeyDown(int keyCode, KeyEvent event){ switch (keyCode){ case KeyEvent.KEYCODE_DPAD_CENTER: DisplayToast("按下:中键"); break; case KeyEvent.KEYCODE_DPAD_UP: DisplayToast("按下:上方向键"); break; case KeyEvent.KEYCODE_DPAD_DOWN: DisplayToast("按下:下方向键"); break; case KeyEvent.KEYCODE_DPAD_LEFT: DisplayToast("按下:左方向键"); break; case KeyEvent.KEYCODE_DPAD_RIGHT: DisplayToast("按下:右方向键"); break; } return super.onKeyDown(keyCode, event); } /* 按键弹起所触发的事件*/ public boolean onKeyUp(int keyCode, KeyEvent event){ switch (keyCode){ case KeyEvent.KEYCODE_DPAD_CENTER: DisplayToast("弹起:中键"); break; case KeyEvent.KEYCODE_DPAD_UP: DisplayToast("弹起:上方向键"); break; case KeyEvent.KEYCODE_DPAD_DOWN: DisplayToast("弹起:下方向键"); break; case KeyEvent.KEYCODE_DPAD_LEFT: DisplayToast("弹起:左方向键"); break; case KeyEvent.KEYCODE_DPAD_RIGHT: DisplayToast("弹起:右方向键"); break; } return super.onKeyUp(keyCode, event); } //用于响应按键重复点击,官方 API 指出 onKeyMultiple 方法总是返回 false,即它没有 handle,因此必须重写才能实现-------------------此方法没用 过具体情况怎么样不是很清楚? public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event){ return super.onKeyMultiple(keyCode, repeatCount, event); } /* 触笔事件*/ public boolean onTouchEvent(MotionEvent event){ int iAction = event.getAction(); //利用 getAction 得到所执 行的动作 if (iAction == MotionEvent.ACTION_CANCEL || iAction == MotionEvent.ACTION_DOWN || iAction == MotionEvent.ACTION_MOVE){ return false; } //得到触笔点击的位置 int x = (int) event.getX(); int y = (int) event.getY(); //将获得的坐标转成 String 类型的方法 DisplayToast("触笔点击坐标: ("+Integer.toString(x)+","+Integer.toString(y)+")"); return super.onTouchEvent(event); } /* 显示 Toast */ public void DisplayToast(String str){ Toast.makeText(this, str, Toast.LENGTH_SHORT).show(); } } 我们分析了一些常用事件处理方式。每一个键都对应一个键值。当然也可根据 需要来改变一些键的功能,需要我们自己构建 KeyEvent 对象------------------ 有待进一步学习 构造 KeyEvent 对象的几种方法: KeyEvent(int action,int code); KeyEvent(long DownTime,long EventTime,int action,int code,int repeat); KeyEvent(long DownTime,long EventTime,int action,int code,int repeat,int metState); KeyEvent(long DownTime,long EventTime,int action,int code,int repeat,int metState,int device,int scancode); KeyEvent(long DownTime,long EventTime,int action,int code,int repeat,int metState,int device,int scancode,int flags); KeyEvent(KeyEvent origEvent,long EventTime,int newRepart); 例: public class Activity01 extends Activity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); } public boolean onKeyDown(int keyCode, KeyEvent event){ //这里构建 KeyEvent 对象,其功能为返回键的功能 //因此我们按任意键都会执行返回键功能 KeyEvent key = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK); //这里传入的参数就是我们自己构建的 KeyEvent 对象 key return super.onKeyDown(key.getKeyCode(), key); } } 3.2 常用控件 Button xml 设计 代码设计 Button button = new Button(this); button.setText("我是 Button"); button.setWidth(123); //设置宽度 button.setHeight(123); //设置高度 button.setTextColor(Color.BLUE); //设置文字颜色 button.setTextSize(123); //设置字体大小 button.setBackgroundColor(Color.BLUE); //设置控件背景色 监听器 button.setOnClickListener(new Button.OnClickListener(){//设置 按钮的事件监听 public void onClick(View v){ //处理按钮事件产生一个 Toast.利用 button.getText()得到按钮显 示的内容 Toast toast = Toast.makeText(Activity01.this, "你点击了 “"+button.getText()+"”按钮!", Toast.LENGTH_LONG); //设置 toast 显示的位置 toast.setGravity(Gravity.TOP, 0, 150); //显示该 Toast toast.show(); } }); ------------------------------------------------------------------- ---------------------------------------------------------- TextView 一个用来显示文本的控件 xml 设计 android:paddingLeft="50px" android:paddingTop="5px" android:paddingBottom="5px" android:textSize="30sp" android:singleLine="true" android:layout_below="@id/imageView_handler"//在什么下 android:gravity ="left" //用于设置 View 中内容相对于 View 组件的对齐方式, android:layout_gravity//用于设置 View 组件相对于 Container 的 对齐方式。 android:paddingLeft="30px" // 按钮上设置的内容离按钮左边边 界 30 个像素 android:layout_marginLeft="30px" //整个按钮离左边设置的内 容 30 个像素 android:layout_weight="1"//控件权重 即占的比例 默认值为 0 android:gravity="center_horizontal"//水平居中 android:padding="3dip" 代码设计 TextView textView = new TextView(this); //声明对象 textView.setTextColor(Color.RED); //设置字体颜色 textView.setTextSize(20); //设置字体大小 textView.setBackgroundColor(Color.BLUE);//控件背景色 textView.setText("你好") //显示的文字 textView.setHeight textView.setWidth textView.setVisibility(GONE/VISIBLE); //设置为不可见/可见 textView.setGravity(Gravity.CENTER);//设置文字权重 监听器 TextView textView = new TextView(this); //得到对象 textview.setOnClickListener(new TextView.OnClickListener(){-------------------------------------------Te xtView 监听器 public void onClick(View v){ } }); ------------------------------------------------------------------- ------------------------------------------------------------ ImageButton 带图标的按钮 xml 设计 代码中设计 imageButton.setImageDrawable(getResources().getDrawable(R.dra wable.image2));//在代码中设计使用的图片(得到对象后) 监听器 imageButton.setOnClickListener(new Button.OnClickListener() {---------------------------------------------ImageButton 监听器 @Override public void onClick(View v) { //创建对话框 Dialog dialog = new AlertDialog.Builder(ImageButton_Dialog.this) .setTitle("ImageButton2") .setMessage("跳转到系统图片") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub imageButton2.setImageDrawable(getResources().getDrawa ble(android.R.drawable.sym_action_call)); } }).create(); dialog.show(); } }); ------------------------------------------------------------------- ------------------------------------------------------------ EditText xml 设计 代码设计 EditText editText = new EditText(this);//得到 EditText 对 象 editText.setTextSize(20); //设置字体大小 editText.setHint("请输入账号"); //设置当 m_EditText 中为空 时提示的内容 监听器 editText.setOnKeyListener(new EditText.OnKeyListener(){-----------------------------------------EditTe xt 监听器 @Override public boolean onKey(View arg0, int arg1, KeyEvent arg2){ // 得到文字,将其显示到 TextView 中 m_TextView.setText("文本框中内容是:" + m_EditText.getText().toString()); return false; } }); ------------------------------------------------------------------- ---------------------------------------------- CheckBox 多项选择 需要对没有按钮设置监听器 xml 设计 监听器 checkBox1.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() {//对每个选项设置事件监听 -------------------CheckBox 监听器 @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){ if(m_CheckBox1.isChecked()){ DisplayToast("你选择了:"+m_CheckBox1.getText()); } } }); ------------------------------------------------------------------- ------------------------------------------------ Spinner 下拉列表 下面一个例子将可选内容通过 ArrayAdapter 和下拉列表连接起来。设置监 听器 通过 setVisibility 方法设置当前显示项 main.xml public class Activity01 extends Activity{ private static final String[] string = { "O 型", "A 型", "B 型 ", "AB 型", "其他" }; private TextView m_TextView; private Spinner m_Spinner; private ArrayAdapter adapter; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); m_TextView = (TextView) findViewById(R.id.TextView1); m_Spinner = (Spinner) findViewById(R.id.Spinner1); //将可选内容与 ArrayAdapter 连接 adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, string); //设置下拉列表的风格 adapter.setDropDownViewResource(android.R.layout.simple_spi nner_dropdown_item); //将 adapter 添加到 m_Spinner 中 m_Spinner.setAdapter(adapter); //添加 Spinner 事件监听 m_Spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {--------------------------Spinner 监听 器 @Override public void onItemSelected(AdapterView arg0, View arg1, int arg2, long arg3){ m_TextView.setText("你的血型是:" + string[arg2]); //设置显示当前选择的项 arg0.setVisibility(View.VISIBLE); } @Override public void onNothingSelected(AdapterView arg0){ // TODO Auto-generated method stub } ); } } } ------------------------------------------------------------------- ----------------------------------- RadioGroup , RadioButton 单选选择控件 一个单选选择由两部分组成,分别是前面的选择按钮和后面的内容。按钮通 过 RadioButton 来实现,答案通过 RadioGroup 来实现 如果确定是选择哪一项那就要设置监听器 setOnCheckedChangeListener. 下面有一例子:本例中使用到了 String.xml 文件来定义常量。 string.xml Android 底层是基于什么操作系统? Examples_04_07 Windows Linux Moc os Java main.xml public class Activity01 extends Activity{ TextView m_TextView; RadioGroup m_RadioGroup; RadioButton m_Radio1, m_Radio2, m_Radio3, m_Radio4; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); m_RadioGroup = (RadioGroup) findViewById(R.id.RadioGroup01);// 获得 RadioGroup 对象 m_Radio1 = (RadioButton) findViewById(R.id.RadioButton1);//获 得 4 个 RadioButton 对象 m_Radio2 = (RadioButton) findViewById(R.id.RadioButton2); m_Radio3 = (RadioButton) findViewById(R.id.RadioButton3); m_Radio4 = (RadioButton) findViewById(R.id.RadioButton4); /* 设置事件监听 */ m_RadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {---------------------------RadioGroup 监听器 @Override public void onCheckedChanged(RadioGroup group, int checkedId){ if (checkedId == m_Radio2.getId()){ DisplayToast("正确答案:" + m_Radio2.getText() + ",恭喜你, 回答正确!"); }else{ DisplayToast("请注意,回答错误!"); } } }); } public void DisplayToast(String str)//显示 Toast{ Toast toast = Toast.makeText(this, str, Toast.LENGTH_LONG); //设置 toast 显示的位置 toast.setGravity(Gravity.TOP, 0, 220); //显示该 Toast toast.show(); } } ------------------------------------------------------------------- ---------------------------------------- AutoCompletTextView 和 MultiAutoCompleteTextView 作用:自动提 示 下面例中用到了 ArrayAdapter autoCompletTextView.xml //如何实现如果输入的字符不在其范围内的也能得到提示 是继承 TextWatcher? public class Control_Auto extends Activity { //implements TextWatcher{} public TextView textView_auto; private static final String[] string ={"ni hao","ni hao ","ni hao ma","ni zheng de hao ma","nshis"}; public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.autocompletetextview); //将可选内容与适配器 ArrayAdapter 连接 ArrayAdapter adapter= new ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line,st ring); MultiAutoCompleteTextView multiAutoCompletTextView = (MultiAutoCompleteTextView)findViewById(R.id.multiAutoCompleteTextView); AutoCompleteTextView autoCompleteTextView =(AutoCompleteTextView)findViewById(R.id.autoCompleteTextView); autoCompleteTextView.setAdapter(adapter); //将 adapter 添加到 AutoCompletTextView 中去 multiAutoCompletTextView.setAdapter(adapter); //将 adapter 添加 到 MultAutoCompleteTextView 中去 multiAutoCompletTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); } } /* //autoCompleteTextView.addTextChangedListener(this);---此 为设置监听? * 例子中没有涉及到的属性(可在布局文件中设置): AutoCompleteTextView 是 EditText 的子类,所以你可以对它的对象进行诸 如外观/字体/颜色等属性值的设置。 completionThreshold:它的值决定了你在 AutoCompleteTextView 至少输 入几个字符,它才会具有自动提示的功能。另,默认最多提示 20 条。 dropDownAnchor:它的值是一个 View 的 ID,指定后, AutoCompleteTextView 会在这个 View 下弹出自动提示。 dropDownSelector:应该是设置自动提示的背景色之类的。 dropDownWidth:设置自动提示列表的宽度。 你可以通过 setAdapter()来给 AutoCompleteTextView 添加一个包含候选值 列表的适配器(adapter)。--------此处没实现过? 然而,由于用户可以输入一些不在候选值列表的数据, AutoCompleteTextView 不支 持 selection listener。不过,你可以注册一个 TextWacther 用于当用户 输入文本发生变化时发出通知。 ------------------------------------------------------------------- --------------------------------------------------- DatePicker,TimePicker 日期和时间 下例中首先需要在布局文件中定义 DatePicker 和 TimePicker,然后通过 Canlendar 类获得系统时间,接着通过 init 方法将日期传给 DatePicker, 并设置 OnDateChangedListener 来监听日期改变,当时间被改变时需要设置 setOnTimeChangedListener 监听来设置时间。 datepicker_timepicker.xml
还剩104页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

sxlvxh

贡献于2015-12-29

下载需要 6 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf