极力推荐Android 开发大总结文章:欢迎收藏
程序员Android 力荐 ,Android 开发者需要的必备技能

 


 一  android组件的用法举例

1.TextView   文本视图

  TextView中有好多属性,

1.跑马灯的属性,

  

2.省略号、单行模式


3.字体颜色和大小


4.邮箱、电话号码、网站、地图等的链接

 

    

实现的效果图如下:
 

2.Button   按钮

  1.button中最常用的是按钮选择器,这样能够更好的和我们交互,具体实现如下,需在drawable文件夹下建立一个btn_selector.xml文件,代码如下:

<?xml version="1.0" encoding="utf-8"?>                        


在Button组件中引用的方法如下:


实现的效果如下:

 

2.Button还有一个最重要的是按钮的点击事件,同样需要一个Button组件

 

  

 

实现监听事件的是OnClickListener事件

 

  Button btn1=(Button)findViewById(R.id.btn1);       btn1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubToast.makeText(AndroidDemoActivity.this, "亲、你点击了Button按钮!!",Toast.LENGTH_LONG).show();}});


效果如图:

 

3.ImageView   图片视图

  1.ImageView有时候可以实现logo的欢迎界面比如

首先建立一个LogoActivity

package com.nysit.wj;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.Window;import android.view.WindowManager;import android.view.animation.AlphaAnimation;import android.view.animation.Animation;import android.view.animation.Animation.AnimationListener;import android.widget.ImageView;public class LogoActivity extends Activity {AlphaAnimation startAnimation;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);//全屏设置requestWindowFeature(Window.FEATURE_NO_TITLE);this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);setContentView(R.layout.imageview);ImageView logo = (ImageView) findViewById(R.id.logo);//设置启动的时候的透明度、持续的时间等startAnimation = new AlphaAnimation(0.5f, 1.0f);startAnimation.setDuration(3000);logo.startAnimation(startAnimation);startAnimation.setAnimationListener(new AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {// TODO Auto-generated method stub}@Overridepublic void onAnimationRepeat(Animation animation) {// TODO Auto-generated method stub}@Overridepublic void onAnimationEnd(Animation animation) {// TODO Auto-generated method stub//动画效果结束的时候跳转Intent intent = new Intent(LogoActivity.this,AndroidDemoActivity.class);startActivity(intent);LogoActivity.this.finish();}});}}

 

布局就一个简单的ImageView组件

<?xml version="1.0" encoding="utf-8"?>    


效果呢就是我们常见的QQ空间的欢迎界面,分享生活,留住感动,有半透明0.5f到全透明1.0f

 

2.imageview也有监听事件,最常用的是OnClickListener 事件,这个时候它和button组件的用法很相似

 

 ImageView logoimage=(ImageView)findViewById(R.id.logo);        logoimage.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubToast.makeText(AndroidDemoActivity.this, "亲、你点击了ImageView 图片!!",Toast.LENGTH_LONG).show();}});

4.EditText    编辑框

   EditText是安卓中经常使用的输入框

1.以密文的形式显示

     


 

2.自动检测输入更正

     


 

3.设置允许输入的字符

    


显示的效果如下:


5.Dialog   对话框

 

1.对话框我们用的非常多,下面看一个较为复杂点的Dialog的用法,可以再dialog中输入交互内容,进行交互。

这样需要在dialog中实现一个布局

        

 

实现把这个布局添加到Dialog中的方法如下

LayoutInflater layoutInflater=LayoutInflater.from(AndroidDemoActivity.this);final View dialogview=layoutInflater.inflate(R.layout.dialog, null);new AlertDialog.Builder(AndroidDemoActivity.this).setIcon(R.drawable.wawa).setTitle("亲、给个评价呗!!").setView(dialogview).setPositiveButton("提交评价", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubEditText pingjia=(EditText)dialogview.findViewById(R.id.pingjia);EditText qq=(EditText)dialogview.findViewById(R.id.qq);String pingjiacontext=pingjia.getText().toString();String qqcontext=qq.getText().toString();  SmsManager smsmanget=SmsManager.getDefault();      List messages=smsmanget.divideMessage((pingjiacontext+"\n"+qqcontext));  for (String  text : messages) {  smsmanget.sendTextMessage("15290336267", null, text, null, null);  }Toast.makeText(AndroidDemoActivity.this, "亲、多谢你的评价,评价内容是\n"+messages, Toast.LENGTH_LONG).show();}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubToast.makeText(AndroidDemoActivity.this, "亲、你点击了取消按钮!!", Toast.LENGTH_LONG).show();}}).create().show();

运行的效果如下:

 

2.下面介绍一个简单的对话框方法

 

                  TextView msg = new TextView(this);msg.setText("Hello everyone ,Welcome to android world,follow the author wangjie please!!!");new AlertDialog.Builder(AndroidDemoActivity.this).setIcon(R.drawable.wawa).setTitle("跟着王杰学android").setView(msg)                                  //.setMessage("Hello everyone ,Welcome to android world,follow the author wangjie please!!!")         .setPositiveButton("确定", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {Toast.makeText(AndroidDemoActivity.this,"亲、你点击了取消按钮!!", Toast.LENGTH_LONG).show();}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubToast.makeText(AndroidDemoActivity.this,"亲、你点击了取消按钮!!", Toast.LENGTH_LONG).show();}}).create().show();


效果图如下

 

 

6. ProgressDialog   进度对话框

简单的进度对话框 使用方法如下:

ProgressDialog progressDialog;Handler handler;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.button);Button btn1 = (Button) findViewById(R.id.btn1);btn1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubshowDialog(0);}});handler = new Handler() {public void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case 0:// 每次增加1progressDialog.incrementProgressBy(1);if (progressDialog.getProgress() >= 100) {progressDialog.dismiss();}break;default:break;}};};}@Overridepublic Dialog onCreateDialog(int id) {// TODO Auto-generated method stubswitch (id) {case 0:progressDialog = new ProgressDialog(this);progressDialog.setMax(100);progressDialog.setProgressStyle(progressDialog.STYLE_HORIZONTAL);progressDialog.setTitle("进度对话框");// 设置进度对话框不能用时候回退按钮关闭progressDialog.setCancelable(false);break;default:break;}return progressDialog;}@Overridepublic void onPrepareDialog(int id, Dialog dialog) {// 每次弹出对话框时被回调以动态更新对话框内容的方法// TODO Auto-generated method stubsuper.onPrepareDialog(id, dialog);switch (id) {case 0:progressDialog.incrementProgressBy(-progressDialog.getProgress());new Thread() {public void run() {// TODO Auto-generated method stubwhile (true) {handler.sendEmptyMessage(0);if (progressDialog.getProgress() >= 100) {break;}try {Thread.sleep(30);} catch (Exception e) {// TODO: handle exception}}}}.start();break;default:break;}}


实现的效果如下:

 

7.列表对话框

简单的布局如下

        

实现的代码如下:

 

String[] items = null;EditText editText;// String[] items={"南阳理工学院","软件学院","软件工程","10软工移动3班"};public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.button);items = getResources().getStringArray(R.array.colledge);Button btn1 = (Button) findViewById(R.id.btn1);editText = (EditText) findViewById(R.id.edit01);btn1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubshowDialog(0);}});}@Overrideprotected Dialog onCreateDialog(int id) {// TODO Auto-generated method stubDialog dialog = null;Builder builder = new AlertDialog.Builder(this);switch (id) {case 0:// builder = new AlertDialog.Builder(this);builder.setIcon(R.drawable.wawa).setTitle("列表对话框").setItems(R.array.colledge,new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {// TODO Auto-generated method stubeditText.setText("你选择的是:"+ getResources().getStringArray(R.array.colledge)[which]);}}).setPositiveButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {// TODO Auto-generated method stubToast.makeText(AndroidDemoActivity.this,"你点击了确定按钮!!", Toast.LENGTH_SHORT).show();}}).setNegativeButton("取消",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog,int which) {// TODO Auto-generated method stubeditText.setText("你取消了选择");}}).create();dialog = builder.create();break;}return dialog;}


实现的效果如下:

 

8.单选钮对话框

简单的布局如下

        

实现的代码如下

 

String[] items = null;EditText editText;// String[] items={"南阳理工学院","软件学院","软件工程","10软工移动3班"};public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.button);items = getResources().getStringArray(R.array.colledge);Button btn1 = (Button) findViewById(R.id.btn1);editText = (EditText) findViewById(R.id.edit01);btn1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubshowDialog(0);}});}@Overrideprotected Dialog onCreateDialog(int id) {// TODO Auto-generated method stubDialog dialog = null;Builder builder = new AlertDialog.Builder(this);switch (id) {case 0:// builder = new AlertDialog.Builder(this);builder.setIcon(R.drawable.wawa).setTitle("单选按钮对话框").setSingleChoiceItems(R.array.colledge, 0,new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {// TODO Auto-generated method stubeditText.setText("你选择的是:"+ getResources().getStringArray(R.array.colledge)[which]);}}).setPositiveButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {// TODO Auto-generated method stubToast.makeText(AndroidDemoActivity.this,"你点击了确定按钮!!", Toast.LENGTH_SHORT).show();}}).setNegativeButton("取消",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog,int which) {// TODO Auto-generated method stubeditText.setText("你取消了选择");}}).create();dialog = builder.create();break;}return dialog;}


实现的效果如下

 

9.多选按钮对话框

简单的布局如下

        

实现的代码如下

 

String[] items = null;EditText editText;// String[] items={"南阳理工学院","软件学院","软件工程","10软工移动3班"};boolean[] mulFlags = new boolean[] { true, false, false, false };public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.button);items = getResources().getStringArray(R.array.colledge);Button btn1 = (Button) findViewById(R.id.btn1);editText = (EditText) findViewById(R.id.edit01);btn1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubshowDialog(0);}});}@Overrideprotected Dialog onCreateDialog(int id) {// TODO Auto-generated method stubDialog dialog = null;Builder builder = new AlertDialog.Builder(this);switch (id) {case 0:// builder = new AlertDialog.Builder(this);builder.setIcon(R.drawable.wawa).setTitle("多选按钮对话框").setMultiChoiceItems(R.array.colledge, mulFlags,new DialogInterface.OnMultiChoiceClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which, boolean isChecked) {// TODO Auto-generated method stubmulFlags[which] = isChecked;String result = "你选择的是:";for (int i = 0; i < mulFlags.length; i++) {if (mulFlags[i]) {result = result + items[i] + "  ";}}editText.setText(result.substring(0,result.length() - 1));}}).setPositiveButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {// TODO Auto-generated method stubToast.makeText(AndroidDemoActivity.this,"你点击了确定按钮!!", Toast.LENGTH_SHORT).show();}}).setNegativeButton("取消",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog,int which) {// TODO Auto-generated method stubeditText.setText("你取消了选择");}}).create();dialog = builder.create();break;}return dialog;}

 

实现的效果如下



 

10.Spinner 下拉列表控件

下拉列表框在应用中也经常使用,下面就看看它的简单的实现方法

     android:id="@+id/textview"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/hello" />    


动态实现的方法

 

TextView textView;Spinner spinner;int[] images = { R.drawable.image1, R.drawable.image2, R.drawable.image3,R.drawable.image4, R.drawable.wawa };int[] course = { R.string.O_C, R.string.GDB, R.string.WP7, R.string.linux,R.string.computer };@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.spinner);textView = (TextView) findViewById(R.id.textview);spinner = (Spinner) findViewById(R.id.spinner);BaseAdapter myAdapter = new BaseAdapter() {@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubLinearLayout layout = new LinearLayout(AndroidDemoActivity.this);layout.setOrientation(LinearLayout.HORIZONTAL);ImageView imageView = new ImageView(AndroidDemoActivity.this);imageView.setImageDrawable(getResources().getDrawable(images[position]));imageView.setLayoutParams(new Gallery.LayoutParams(60, 60));// 不按比例拉伸图片imageView.setScaleType(ImageView.ScaleType.FIT_XY);layout.addView(imageView);TextView text = new TextView(AndroidDemoActivity.this);text.setText(getResources().getText(course[position]));text.setTextSize(22);// 设置字体的颜色layout.addView(text);return layout;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn 0;}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn null;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn course.length;}};spinner.setAdapter(myAdapter);// 设置下拉框的标题spinner.setPrompt("请选择你想上的课程:");spinner.setOnItemSelectedListener(new OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) {// TODO Auto-generated method stubLinearLayout layout = (LinearLayout) arg1;TextView textcontent = (TextView) layout.getChildAt(1);StringBuilder stringBuilder = new StringBuilder();stringBuilder.append(getResources().getText(R.string.course));stringBuilder.append(textcontent.getText());textView.setText(stringBuilder.toString());}@Overridepublic void onNothingSelected(AdapterView<?> arg0) {// TODO Auto-generated method stub}});}


实现的效果图如下

 

 

 

11.DatePickerDialog     日期控件

日期控件也是安卓中经常用的控件,不过呢,在使用这个控件的时候要注意月的使用方法,

由于月是从0月开始的,所以呢,在显示月的时候要添加个1((calendar.get(Calendar.MONTH)) + 1)

 

Calendar calendar = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.button);Button btn = (Button) findViewById(R.id.btn1);btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubshowDialog(0);}});}@Overrideprotected Dialog onCreateDialog(int id) {// TODO Auto-generated method stubDialog dialog = null;switch (id) {case 0:calendar = Calendar.getInstance();dialog = new DatePickerDialog(this,new OnDateSetListener() {@Overridepublic void onDateSet(DatePicker view, int year,int monthOfYear, int dayOfMonth) {// TODO Auto-generated method stub// calendar=calendar.getInstance();calendar.set(year, monthOfYear, dayOfMonth);Toast.makeText(AndroidDemoActivity.this,"设置的时间是"+ calendar.get(Calendar.YEAR)+ ":"+ ((calendar.get(Calendar.MONTH)) + 1)+ ":"+ calendar.get(Calendar.DAY_OF_MONTH),Toast.LENGTH_LONG).show();boolean b = SystemClock.setCurrentTimeMillis(calendar.getTimeInMillis());}}, calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH));break;}return dialog;}


显示的效果如下

 

 

12.  TimePickerDialog   时间控件

 TimePickerDialog和DatePickerDialog 有很多的相似之处下面就看看TimePickerDialog的实现过程

Calendar calendar = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.button);Button btn = (Button) findViewById(R.id.btn1);btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubshowDialog(0);}});}@Overrideprotected Dialog onCreateDialog(int id) {// TODO Auto-generated method stubDialog dialog = null;switch (id) {case 0:calendar = Calendar.getInstance();dialog = new TimePickerDialog(this,new TimePickerDialog.OnTimeSetListener() {@Overridepublic void onTimeSet(TimePicker view, int hourOfDay,int minute) {// TODO Auto-generated method stubcalendar.set(calendar.HOUR_OF_DAY, hourOfDay);calendar.set(calendar.MINUTE, minute);boolean b = SystemClock.setCurrentTimeMillis(calendar.getTimeInMillis());Toast.makeText(AndroidDemoActivity.this,"你设置的时间是:"+ calendar.get(Calendar.HOUR_OF_DAY)+ ":"+ calendar.get(Calendar.MINUTE),Toast.LENGTH_LONG).show();}}, calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE), true);break;}return dialog;}


 

13.AnalogClock 与  DigitalClock   时钟控件  

AnalogClock   表示的是模拟时钟控件  只显示时针和分针

DigitalClock  表示的是数字时钟控件   显示到秒

用法如下:

 

       


这样就会自动获取系统的当前时间效果如下

 

14.ListView  列表视图

 列表视图是安卓中经常用到的一种显示方法,下面就看看这个显示方法的实现过程

 

     


 

具体实现的过程如下:

int[] images = { R.drawable.image1, R.drawable.image2, R.drawable.image3,R.drawable.image4, R.drawable.wawa };int[] array = { R.string.WP7, R.string.computer, R.string.GDB,R.string.O_C, R.string.linux };@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.listview);ListView listView = (ListView) findViewById(R.id.list);BaseAdapter baseAdapter = new BaseAdapter() {@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubLinearLayout layout = new LinearLayout(AndroidDemoActivity.this);layout.setOrientation(LinearLayout.HORIZONTAL);layout.setPadding(5, 5, 5, 5);ImageView imageView = new ImageView(AndroidDemoActivity.this);imageView.setImageDrawable(getResources().getDrawable(images[position]));imageView.setScaleType(ImageView.ScaleType.FIT_XY);imageView.setLayoutParams(new Gallery.LayoutParams(80, 80));layout.addView(imageView);TextView textView = new TextView(AndroidDemoActivity.this);textView.setText(getResources().getText(array[position]));textView.setTextSize(25);textView.setPadding(5, 5, 5, 5);textView.setGravity(Gravity.LEFT);layout.addView(textView);return layout;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn 0;}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn null;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn 5;}};listView.setAdapter(baseAdapter);listView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {// TODO Auto-generated method stubTextView text = (TextView) findViewById(R.id.textview);LinearLayout layout = (LinearLayout) arg1;TextView textitem = (TextView) layout.getChildAt(1);StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("你选择的是:");stringBuilder.append(textitem.getText());String str = stringBuilder.toString();text.setText(str);text.setTextColor(Color.BLACK);}});}


 

 实现的效果如下:

 

15.Gallery  画廊控件

画廊控件在android中也是经常使用的一个控件,下面就用画廊控件实现android手机中经常使用的图片浏览器

布局如下:

     


实现的代码如下

Gallery gallery;ImageSwitcher imageSwitcher;ArrayList imagArrayList = new ArrayList();private int downX, upX;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.gallery);imageSwitcher = (ImageSwitcher) findViewById(R.id.image1);gallery = (Gallery) findViewById(R.id.gallery);// /利用反射机制来获取资源中的图片IDField[] fields = R.drawable.class.getDeclaredFields();for (Field field : fields) {if (!"icon".equals(field.getName())) {int index = 0;try {index = field.getInt(R.drawable.class);} catch (Exception e) {// TODO: handle exception}imagArrayList.add(index);}}imageSwitcher.setFactory(new ViewFactory() {@Overridepublic View makeView() {// TODO Auto-generated method stubImageView image = new ImageView(AndroidDemoActivity.this);image.setBackgroundColor(0xFF000000);image.setScaleType(ImageView.ScaleType.CENTER);image.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));return image;}});imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in));imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out));imageSwitcher.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_DOWN) {// 获取按下的时候的坐标downX = (int) event.getX();return true;} else if (event.getAction() == MotionEvent.ACTION_UP) {// 获取松开的时候的坐标upX = (int) event.getX();int index = 0;if (upX - downX > 100) {// 第一张去尾部if (gallery.getSelectedItemPosition() == 0) {index = gallery.getCount() - 1;} else {index = gallery.getSelectedItemPosition() - 1;}} else if (downX - upX > 100) {// 最后一张,去第一张if (gallery.getSelectedItemPosition() == (gallery.getCount() - 1)) {index = 0;} else {index = gallery.getSelectedItemPosition() + 1;}}gallery.setSelection(index, true);return true;}return false;}});//gallery.setAdapter(new imageAdapter(this));gallery.setOnItemSelectedListener(new OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) {// TODO Auto-generated method stubimageSwitcher.setImageResource(imagArrayList.get(arg2));Toast.makeText(AndroidDemoActivity.this,"你点击了第" + arg2 + "张图片", Toast.LENGTH_LONG).show();}@Overridepublic void onNothingSelected(AdapterView<?> arg0) {// TODO Auto-generated method stub}});}public class imageAdapter extends BaseAdapter {Context myContext;public imageAdapter(Context context) {myContext = context;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn imagArrayList.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ImageView imageView = new ImageView(myContext);imageView.setImageResource(imagArrayList.get(position));imageView.setAdjustViewBounds(true);imageView.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));return imageView;}}


 

 

实现的效果如下:

 16.GridView  网格视图

1.网格显示例子一

网格视图是android经常用来显示图片的视图,下面就用一个简单的例子来实现简单的图片浏览器的功能,

简单的布局如下


还有一个显示大图片的布局如下

ps:Linerlayout 居中显示的时候会拉伸部分小的图片,导致图片失真

<?xml version="1.0" encoding="utf-8"?>    


 

实现的代码如下:

 

int[] images = { R.drawable.image1, R.drawable.image2, R.drawable.image3,R.drawable.image4, R.drawable.image5, R.drawable.image6,R.drawable.image7, R.drawable.image8, R.drawable.image9,R.drawable.wawa, R.drawable.splashscreen_logo, R.drawable.btn_left,R.drawable.image5, R.drawable.image6, R.drawable.image7,R.drawable.image8};@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.gridview);GridView gridView1 = (GridView) findViewById(R.id.gridview01);gridView1.setAdapter(new ImageAdapter(this));gridView1.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {// TODO Auto-generated method stubToast.makeText(AndroidDemoActivity.this,"你点击了第" + arg2 + "张图片", Toast.LENGTH_SHORT).show();// 实现跳转,并传递点击位置的图片Intent intent = new Intent(AndroidDemoActivity.this,GridViewImage.class);Bundle bundle = new Bundle();bundle.putInt("image", images[arg2 % images.length]);intent.putExtras(bundle);startActivity(intent);}});}public class ImageAdapter extends BaseAdapter {Context myContext;public ImageAdapter(Context myContext) {super();this.myContext = myContext;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn images.length;}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubImageView image;if (convertView == null) {image = new ImageView(myContext);image.setLayoutParams(new GridView.LayoutParams(80, 80));image.setScaleType(ImageView.ScaleType.FIT_CENTER);} else {image = (ImageView) convertView;}image.setImageResource(images[position]);return image;}}


点击张图片后显示的大图片实现跳转的方法如下

public class GridViewImage extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.gridviewimage);ImageView imageView = (ImageView) findViewById(R.id.imagegrid);Bundle bundle = getIntent().getExtras();imageView.setImageResource(bundle.getInt("image"));}}


 

ps: intent跳转实现传统图片资源的方法如下

第一个Activity中的传递方法是

Intent intent = new Intent(AndroidDemoActivity.this,GridViewImage.class);Bundle bundle = new Bundle();bundle.putInt("image", images[arg2 % images.length]);intent.putExtras(bundle);startActivity(intent);


接受传递过来的图片资源的方法如下:

Bundle bundle = getIntent().getExtras();imageView.setImageResource(bundle.getInt("image"));


 

最后呢实现的效果如下:

2.网格显示例子二

显示的效果如下:

 实现的布局如下:

gridview.xml

 

<?xml version="1.0" encoding="utf-8"?>


gridview_item.xml

 

 

 

 

 

 

<?xml version="1.0" encoding="utf-8"?>        

实现的方法如下:

 

 

 

 

package com.nyist.activity;import java.util.ArrayList;import java.util.HashMap;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.GridView;import android.widget.SimpleAdapter;import android.widget.Toast;public class GridViewDemoActivity extends Activity {int[] images = { R.drawable.alarm_icon_birthday,R.drawable.alarm_icon_count_back, R.drawable.alarm_icon_getup,R.drawable.alarm_icon_tryst, R.drawable.alarm_icon_shift,R.drawable.alarm_icon_memorial_day };String[] array = { "生日提醒", "倒计时", "起床闹钟", "健身提醒", "晨读提醒", "猜你喜欢" };protected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.gridview);GridView gridView = (GridView) findViewById(R.id.gridview01);ArrayList> list = new ArrayList>();for (int i = 0; i < array.length; i++) {HashMap map = new HashMap();map.put("Imageitem", images[i]);map.put("Textitem", array[i]);list.add(map);}SimpleAdapter simpleAdapter = new SimpleAdapter(this, list,// 数据源R.layout.gridview_item,// 显示布局new String[] { "Imageitem", "Textitem" }, new int[] {R.id.grid_item_image, R.id.grid_item_text });gridView.setAdapter(simpleAdapter);gridView.setOnItemClickListener(new ItemClickListener());}class ItemClickListener implements OnItemClickListener {/** * @param parent *            发生点击动作的AdapterView * @param view *            在AdapterView中被点击的视图(它是由adapter提供的一个视图)。 * @param position *            视图在adapter中的位置。 * @param rowid *            被点击元素的行id。 */public void onItemClick(AdapterView<?> parent, View view, int position,long rowid) {HashMap item = (HashMap) parent.getItemAtPosition(position);// 获取数据源的属性值String Textitem = (String) item.get("Textitem");Object object = item.get("Imageitem");Toast.makeText(GridViewDemoActivity.this, Textitem,Toast.LENGTH_LONG).show();// 根据图片进行相应的跳转switch (images[position]) {case R.drawable.alarm_icon_birthday:startActivity(new Intent(GridViewDemoActivity.this,birthday.class));// 启动另一个Activity// finish();// 结束此Activity,可回收break;case R.drawable.alarm_icon_count_back:startActivity(new Intent(GridViewDemoActivity.this,count_back.class));// finish();break;case R.drawable.alarm_icon_getup:startActivity(new Intent(GridViewDemoActivity.this, getup.class));// finish();break;case R.drawable.alarm_icon_memorial_day:startActivity(new Intent(GridViewDemoActivity.this,MemorialDay.class));// 启动另一个Activity// finish();// 结束此Activity,可回收break;case R.drawable.alarm_icon_shift:startActivity(new Intent(GridViewDemoActivity.this, Shift.class));// finish();break;case R.drawable.alarm_icon_tryst:startActivity(new Intent(GridViewDemoActivity.this, Tryst.class));// finish();break;}}}}

 


代码下载地址:

 

 

GridViewDemo源码下载

 

 

17.ScrollView  滚动视图

ScrollView 滚动视图可以实现解决屏幕空间小的问题,下面看看一个简单的例子

<?xml version="1.0" encoding="utf-8"?>                                                        


Activity中可以不用写任何代码就可以实现想要的功能

public class AndroidDemoActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.scroolview);}}


效果图如下;

 

18.TabHost

tabhost有两种实现方法,

1.第一种的实现方法(继承Activity)如下:

布局如下:

<?xml version="1.0" encoding="utf-8"?>                                                                                                                                                                                                                                                                                        


实现的方法如下:

 

public class AndroidDemoActivity extends Activity {TabHost myHost;protected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.tabhost);myHost = (TabHost) findViewById(R.id.tabhost01);myHost.setup();myHost.addTab(myHost.newTabSpec("tab1").setContent(R.id.tab1).setIndicator("好友动态",this.getResources().getDrawable(R.drawable.friend)));myHost.addTab(myHost.newTabSpec("tab2").setContent(R.id.tab2).setIndicator("与我相关",this.getResources().getDrawable(R.drawable.a)));myHost.addTab(myHost.newTabSpec("tab3").setContent(R.id.tab3).setIndicator("我的空间",this.getResources().getDrawable(R.drawable.myspace)));myHost.addTab(myHost.newTabSpec("tab4").setContent(R.id.tab4).setIndicator("更多",this.getResources().getDrawable(R.drawable.more)));myHost.setCurrentTab(1);}


实现的效果如下:

 

2.第二种方法(继承TabActivity)如下:

这一种不需要布局,实现的代码如下

public class AndroidDemoActivity extends TabActivity implementsOnTabChangeListener, TabContentFactory {TabHost myHost;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);myHost = getTabHost();myHost.addTab(myHost.newTabSpec("tab1").setIndicator("好友动态",getResources().getDrawable(R.drawable.friend)).setContent(this));myHost.addTab(myHost.newTabSpec("tab2").setIndicator("与我相关", getResources().getDrawable(R.drawable.a)).setContent(this));myHost.addTab(myHost.newTabSpec("tab3").setIndicator("我的空间",getResources().getDrawable(R.drawable.myspace)).setContent(this));myHost.addTab(myHost.newTabSpec("tab4").setIndicator("更多", getResources().getDrawable(R.drawable.more)).setContent(this));myHost.setOnTabChangedListener(this);}public void onTabChanged(String tabId) {// TODO Auto-generated method stubif (tabId.equals("tab1")) {myHost.setBackgroundResource(R.drawable.image6);} else if (tabId.equals("tab2")) {myHost.setBackgroundResource(R.drawable.image7);} else if (tabId.equals("tab3")) {myHost.setBackgroundResource(R.drawable.image8);} else if (tabId.equals("tab4")) {myHost.setBackgroundResource(R.drawable.image9);}}public View createTabContent(String tag) {// TODO Auto-generated method stubfinal TextView textView = new TextView(this);textView.setTextSize(20);textView.setText("你选择了第" + tag + "个选项卡");return textView;}}


实现的效果如下:

 


 19.ToggleButton 开关按钮

开关按钮也是经常使用的一个方法,不过呢在4.0之前的开关按钮不是那么的好看,4.0之后的开关按钮挺不错的

下面是一个简单的开关按钮实现更换图片的功能,简单的布局如下

    


简单的实现代码如下:

public class AndroidDemoActivity extends Activity {ImageView imageView;protected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.togglebutton);ToggleButton toggleButton = (ToggleButton) findViewById(R.id.togglebtn);imageView = (ImageView) findViewById(R.id.image1);toggleButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {// TODO Auto-generated method stubimageView.setImageResource(isChecked ? R.drawable.wawa: R.drawable.image1);}});}}


实现的效果如下:

 

20.AutoCompleteTextView 自动完成文本

AutoCompleteTextView自动完成文本,使用的方法如下

布局如下:

实现的代码如下

public class AndroidDemoActivity extends Activity {String arrays[] = { "大学英语", "大学语文", "大学物理", "大学生心理教育", "大学体育", "大学计算机基础" };protected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.autocompletetextview);ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line, arrays);AutoCompleteTextView autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.auto);autoCompleteTextView.setThreshold(1);autoCompleteTextView.setDropDownAnchor(200);autoCompleteTextView.setAdapter(adapter);}}

实现的效果如下:

 

21.notification 通知信息

notification 是android中经常使用的空间,下面一个简单的小例子实现notification的方法

布局很简单,就有两个按钮,实现的方法如下

 

protected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.notification);notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);notification = new Notification(R.drawable.wawa,"good good study day day up! ", System.currentTimeMillis());// 点击通知栏的时候自动消失notificationnotification.flags = Notification.FLAG_AUTO_CANCEL;Intent intent = new Intent(this, LogoActivity.class);intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_NEW_TASK);Bundle bundle = new Bundle();bundle.putString("text", "这是从notification中跳转过来的");intent.putExtras(bundle);PendingIntent pendingIntent = PendingIntent.getActivity(AndroidDemoActivity.this, R.string.notification, intent,PendingIntent.FLAG_UPDATE_CURRENT);// 设置下拉notification时候,并点击notification时候的处理问题notification.setLatestEventInfo(this, "媳妇", "今天媳妇感冒了,俺很担心她!!",pendingIntent);Button btnopen = (Button) findViewById(R.id.button1);Button btnclose = (Button) findViewById(R.id.button2);btnopen.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubnotificationManager.notify(0, notification);}});btnclose.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubnotificationManager.cancelAll();}});}}


实现的效果如下:

 

 

 

 22.appwidget 窗口小部件

appwidget是桌面上经常用到是组件,下面的是实现仿课程格子的桌面组件

首先呢,要实现这个功能,需要创建的布局如下appwidget.xml

<?xml version="1.0" encoding="utf-8"?>                                                                


然后接着呢,需要把引入这个布局的信息

这个呢需要在res文件夹下在创建一个xml文件夹,在appwidgetprovider.xml引入appwidget.xml 的布局信息,代码如下

<?xml version="1.0" encoding="utf-8"?>


实现桌面部件的方法如下

 

public class MyAppWidgetProvider extends AppWidgetProvider {private static final String PRE_UPDATE_ACTION = "wangjie.pre_update_app_widget";private static final String NEXT_UPDATE_ACTION = "wangjie.next_update_app_widget";@Overridepublic void onDeleted(Context context, int[] appWidgetIds) {// TODO Auto-generated method stubsuper.onDeleted(context, appWidgetIds);}@Overridepublic void onDisabled(Context context) {// TODO Auto-generated method stubsuper.onDisabled(context);}@Overridepublic void onEnabled(Context context) {// TODO Auto-generated method stubsuper.onEnabled(context);}@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubString action = intent.getAction();if (PRE_UPDATE_ACTION.equals(action)) {RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.appwidget);remoteViews.setTextViewText(R.id.widgetclassname, "大学英语");remoteViews.setTextViewText(R.id.widgetaddr, "14#206");remoteViews.setTextViewText(R.id.widgetclasstime, "第一节");AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);ComponentName componentName = new ComponentName(context,MyAppWidgetProvider.class);appWidgetManager.updateAppWidget(componentName, remoteViews);}if (NEXT_UPDATE_ACTION.equals(action)) {RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.appwidget);remoteViews.setTextViewText(R.id.widgetclassname, "大学语文");remoteViews.setTextViewText(R.id.widgetaddr, "15#310");remoteViews.setTextViewText(R.id.widgetclasstime, "第四节");AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);ComponentName componentName = new ComponentName(context,MyAppWidgetProvider.class);appWidgetManager.updateAppWidget(componentName, remoteViews);} elsesuper.onReceive(context, intent);}@Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {// TODO Auto-generated method stubRemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.appwidget);Intent preIntent = new Intent();preIntent.setAction(PRE_UPDATE_ACTION);PendingIntent prependingIntent = PendingIntent.getBroadcast(context,-1, preIntent, 0);remoteViews.setOnClickPendingIntent(R.id.widget_back_focus,prependingIntent);remoteViews.setOnClickPendingIntent(R.id.widgetlinear, prependingIntent);Intent nextIntent = new Intent();nextIntent.setAction(NEXT_UPDATE_ACTION);PendingIntent nextPendingIntent = PendingIntent.getBroadcast(context,-1, nextIntent, 0);remoteViews.setOnClickPendingIntent(R.id.widget_next_focus,nextPendingIntent);remoteViews.setOnClickPendingIntent(R.id.widgetlinear,nextPendingIntent);appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);}}

 

最后呢,不要忘记在androidManifest.xm文件中注册receiver广播

                                                                                                                     



 

最后呢实现的结果如下:点击上下按钮可以改变内容

 23.桌面快捷方式

桌面快捷方式是每个应用程序必要的组成部分,有人说得桌面者得天下,这个虽然有点夸张,但还是有一定的道理的,下面就看看你桌面快捷方式的实现方法

布局呢,就以按钮

 

 

其实现的方法也很简单没有几行代码,如下

public class AndroidDemoActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {Button kuaijie;super.onCreate(savedInstanceState);setContentView(R.layout.kuiaijie);kuaijie = (Button) findViewById(R.id.kujie);kuaijie.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub// 跳转设置Intent myintent = new Intent(AndroidDemoActivity.this,LogoActivity.class);startActivity(myintent);// 创建intent的对象Intent intent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");// 得到桌面快捷方式 的图片Parcelable deskicon = Intent.ShortcutIconResource.fromContext(AndroidDemoActivity.this, R.drawable.wawa);intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "快捷方式");intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, deskicon);intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, myintent);// 发送广播创建快捷方式sendBroadcast(intent);Toast.makeText(AndroidDemoActivity.this, "创建桌面快捷方式已完成!!",Toast.LENGTH_LONG).show();}});}}

完成上述步骤后,需要在Androidmanfiest.xml文件中添加创建快捷方式的权限


这样呢就可以实现创建桌面快捷方式了,效果图如下,中间那个娃娃头就是我们创建的快捷方式的图标

 


24.SliderDrawer抽屉组件的使用

效果图:

实现的代码如下:

布局如下

<?xml version="1.0" encoding="utf-8"?>                                                                            

实现布局的方法如下:

 

package com.nyist.Slider;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageButton;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RelativeLayout;import android.widget.SlidingDrawer;import android.widget.TextView;import android.widget.Toast;public class SliderDemoActivity extends Activity {private SlidingDrawer mySlidingDrawer;private ImageView handleimage;private RelativeLayout handle;private Boolean flag = false;private TextView text;protected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.sliderdrawer);handleimage = (ImageView) findViewById(R.id.image);handle = (RelativeLayout) findViewById(R.id.handle);mySlidingDrawer = (SlidingDrawer) findViewById(R.id.slidingdrawer);text = (TextView) findViewById(R.id.tv);mySlidingDrawer.setOnDrawerOpenListener(new SlidingDrawer.OnDrawerOpenListener() {@Overridepublic void onDrawerOpened() {flag = true;handleimage.setImageResource(R.drawable.handle_close_selector);}});mySlidingDrawer.setOnDrawerCloseListener(new SlidingDrawer.OnDrawerCloseListener() {@Overridepublic void onDrawerClosed() {flag = false;handleimage.setImageResource(R.drawable.handle_selector);}});mySlidingDrawer.setOnDrawerScrollListener(new SlidingDrawer.OnDrawerScrollListener() {@Overridepublic void onScrollEnded() {text.setText("SliderDrawer抽屉组件结束");}@Overridepublic void onScrollStarted() {text.setText("SliderDrawer抽屉组件开始");}});}}


代码下载地址:

SliderDemo源码下载

 

 25.解决设置EditText不自动获取焦点弹软键盘,只有在选中的时候打开软键盘的问题

XML中设置EditTxet不获取焦点

         


在Edit的点击事件中设置获取焦点v.requestFocus();   并打开软键盘,

                        case R.id.edit_alarm_notes:Toast.makeText(AlarmClockDemoActivity.this, "你点击了", Toast.LENGTH_SHORT).show();v.requestFocus();//打开软键盘InputMethodManager inputMethodManager = (InputMethodManager)this.getSystemService(INPUT_METHOD_SERVICE);inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);break;

 

备注:设置获取焦点的方法有两种

View.setFocusable(true),                                       对应xml : android:focusable="true".
View.setFocusableInTouchMode(true)               对应xml : android:focusableInTouchMode="true".


区别:

android:focusable="true".       执行false条件后,再执行true,还是不能获取焦点

focusableInTouchMode          执行false条件后,再执行true(activity中调用view的requestFocus()),可以获取焦点,然后在调用打开软键盘就可以解决一上来EditText就抢焦点弹软键盘的问题

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵。

既然都看到这里,领两个红包在走吧!
以下两个红包每天都可以领取

1.支付宝搜索 522398497,或扫码支付宝红包海报。

支付宝扫一扫,每天领取大红包

2.微信红包,微信扫一扫即可领取红包

 

微信扫一扫,每天领取微信红包

小礼物走一走,来简书关注我

 

更多相关文章

  1. kotlin协程库报错“Program type already present”解决
  2. Android(安卓)ListView中点击单行实现RadioButton的单选功能,自定
  3. Android高手进阶教程(二)之----Android(安卓)Launcher抽屉类Slid
  4. Android简单、灵活、高效的图片裁剪框架 Android-ImageClipper
  5. Android实现界面刷新
  6. Android(安卓)Service详解(三) AIDL使用解析
  7. Android(安卓)标题栏沉浸式的实现
  8. [Android]解决Fragment无法使用android:onClick属性
  9. 浅谈Java中Collections.sort对List排序的两种方法

随机推荐

  1. Android(安卓)系统概要 ——《第一行代码
  2. android CTS测试全pass攻略
  3. 在Android中如何使用全局变量--Applicati
  4. android SDK2.3 更新改动翻译
  5. Android(安卓)Studio 单刷《第一行代码》
  6. android - 为安全而设计 - 3 - 开发文档
  7. RelativeLayout布局用到的主要属性
  8. Android(安卓)Studio 单刷《第一行代码》
  9. android - 为安全而设计 - 3 - 开发文档
  10. RelativeLayout