关键词:
android常用控件总结(共5篇)
篇1:android常用控件总结
找工作,上长沙英才网
手机Android系统常用控件总结
Notepad++编写 可以负责粘贴到其中去 看得更清楚。(内容包括了Android中的大部分常用控件及其事件的监听)第一章
1.1 Android中src文件夹包含项目的所有包及其资源文件,res文件夹包含了项目中所有的资源。比如:程序图标(drawable),布局文件(layout),常量(value),音频文件(raw)R.java是在创建项目是自动生成的只读文件,不可更改此文件。R文件其作用:是定义项目中所有资源的索引文件。
1.2 AndroidManfest.xml 如下:
package=“Android.Summary” //引用程序包名 android:versionCode=“1” android:versionName=“1.0”> //应用程序名字 找工作,上长沙英才网
1.3 String.xml如下:
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如下:
找工作,上长沙英才网
android:orientation=“vertical” //版面配置的方式。此为自上到下为垂直配置,“horizontal”为水平配置 android:layout_width=“fill_parent” //定义当前视图在屏幕上所占的宽度,“fill_parent”为填充整个屏幕宽度 /*android:layout_weight=“50”*/ //用于给一个布局中多个视图的重要度赋值 android:layout_height=“fill_parent” //定义当前视图在屏幕上所占的高度,...........................高度 > android:text=“@string/hello” //在视图上显示的内容,此处引用了@String中的hello字符串 />
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:text=”你好“/> 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(){------------TextView监听器 public void onClick(View v){ } });---ImageButton 带图标的按钮 xml设计 代码中设计 imageButton.setImageDrawable(getResources().getDrawable(R.drawable.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().getDrawable(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(){----------EditText监听器 @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 @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 //设置下拉列表的风格 adapter.setDropDownViewResource(android.R.layout.simple_spinner_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 找工作,上长沙英才网 main.xml 找工作,上长沙英才网 android:layout_width=”wrap_content“ android:layout_height=”wrap_content“ android:text=”@string/RadioButton1“ /> 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 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 找工作,上长沙英才网 > 找工作,上长沙英才网 public class Date_Time extends Activity{//如何实现日期随系统不断变化?要联网才能实现?如何变换DatePicker和TimePicker样式(如颜色,图片等)? Calendar calendar;TextView textView_date_time;Button button_date_time1;Button button_date_time2;DatePicker datePicker;TimePicker timePicker;public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.datepicker_timepicker);calendar = Calendar.getInstance();//得到日历对象 textView_date_time =(TextView)findViewById(R.id.textView_date_time1);button_date_time1 =(Button)findViewById(R.id.button_date_time1);button_date_time2 =(Button)findViewById(R.id.button_date_time2);datePicker =(DatePicker)findViewById(R.id.datePicker);timePicker =(TimePicker)findViewById(R.id.timerPicker); button_date_time1.setWidth(50);button_date_time1.setHeight(60);button_date_time1.setTextColor(Color.BLUE); timePicker.setIs24HourView(true);//设置为24小时制 //将日历初始化为当前系统日期,并设置监听器 datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),-------------DatePicker监听器 找工作,上长沙英才网 calendar.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener(){//OnDateChangedListener监听日期的变化 @Override public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth){ //设置日期 calendar.set(1987,10,15);} }); timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener(){------------TimePicker监听器 @Override public void onTimeChanged(TimePicker view, int hourOfDay, int minute){ //设置时间 //calendar.set(1987,10,29,23,23,23);//年 月 日 小时 分钟 秒 textView_date_time.setText(”当前时间:“+hourOfDay+” : “+minute);} }); button_date_time1.setOnClickListener(new Button.OnClickListener(){//日期的监听---------------------------Button控件中设置DatePicker监听器 找工作,上长沙英才网 @Override public void onClick(View v){ new DatePickerDialog(Date_Time.this,new DatePickerDialog.OnDateSetListener(){ @Override public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth){ //设置日历 textView_date_time.setText(”农历“+year+” 年“+monthOfYear+” 月“+dayOfMonth+” 日“);} },calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH)).show();} }); button_date_time2.setOnClickListener(new Button.OnClickListener(){//时间的监听器----------------------------Button控件中设置TimePicker监听器 @Override public void onClick(View v){new TimePickerDialog(Date_Time.this, new TimePickerDialog.OnTimeSetListener(){ @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute){ //设置时间 找工作,上长沙英才网 textView_date_time.setText(”北京时间:“+hourOfDay+” : “+minute);} },calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE),true).show();}});} } ---------------Menu 操作应用程序的菜单选项 第一个例子:通过XML文件来实现 menu_com.xml
public class Menu_Xml extends Activity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.此为所以显示的界面id);} public boolean onCreateOptionsMenu(Menu menu){//创建menu MenuInflater inflater = getMenuInflater();//设置menu界面
inflater.inflate(R.layout.menu_com, menu);
找工作,上长沙英才网
return true;} public boolean onOptionsItemSelected(MenuItem item){//处理菜单事件 switch(item.getItemId()){ case R.id.about: Menu_Xml.this.finish();case R.id.skip: Intent intent = new Intent();intent.setClass(Menu_Xml.this, Menu_add.class);//跳转到Menu_add中去
startActivity(intent);Menu_Xml.this.finish();} return true;} } =============== 第二个例子:在代码中生成Menu 此例中包含俩个方法 注意区分注释掉的为另一种增加Menu的方法
public class Menu_add extends Activity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.toast);} public boolean onCreateOptionsMenu(Menu menu){//创立menu /*为Menu添加内容参数:Menu.add()方法第一个参数表示给这个新增的菜单项分配一个分组号;
* 第二个参数表示给这个新增的菜单项分配一个唯一标识id;第三个参数为菜单项的序号;
找工作,上长沙英才网
* 第四个参数为菜单项的标题。
我们可以通过调用Menu.setItemShown()或者Menu.setGroupShown()方法来显示或隐藏一些菜单项。
这里要注意的一个地方是:菜单项的显示顺序是按代码中添加的顺序来的,也就是说Menu.add()方法
只能在菜单的最后面新增一个菜单项。另外,第一个参数的分组标识,不会改变菜单项的显示顺序。
方法一:
//menu.add(0,0,0,R.string.menu1);方法一 //menu.add(0,1,1,R.string.menu2);方法二:
SubMenu subMenu = menu.addSubMenu(1, 1, 2, ”选项“);//此方法和menu方法类似
subMenu.add(13,13,13, ”到Content_Menu“);subMenu.add(13,24,24,”到Menu_Xml“);
return true;} public boolean onOptionsItemSelected(MenuItem item){//处理Menu事件 switch(item.getItemId()){//getItemId()得到菜单项的ID,即上面的第二个参数 case 13: Intent intent1 = new Intent();intent1.setClass(Menu_add.this, Context_Menu.class);startActivity(intent1);Menu_add.this.finish();case 23: Intent intent = new Intent();intent.setClass(Menu_add.this, Menu_Xml.class);//跳转到其他界面中去
找工作,上长沙英才网
startActivity(intent);Menu_add.this.finish();break;} return true;} } ============== 第三个例子:Context Menu的创建:
概述:Android 的上下文菜单类似于PC 上的右键菜单。当为一个视图注册了上下文菜单之后,长按(2 秒左右)这个视图对象就会弹出一个浮动菜单,即上下文菜单。任何视图都可以
注册上下文菜单,不过,最常见的是用于列表视图ListView的item。
注意:Android 的上下文菜单不支持图标或快捷键。
创建一个上下文菜单的步骤:
1.覆盖Activity 的onCreateContenxtMenu()方法,调用Menu 的add 方法添加菜单项(MenuItem)。
2.覆盖Activity 的onContextItemSelected()方法,响应上下文菜单菜单项的单击事件。
3.调用registerForContextMenu()方法,为视图注册上下文菜单。menu_com2.xml
找工作,上长沙英才网
public class Context_Menu extends Activity{ public TextView textView_context_Menu;public Button buttont_context_Menu;
public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.menu_com2);textView_context_Menu =(TextView)findViewById(R.id.textView_context_Menu);buttont_context_Menu =(Button)findViewById(R.id.button_context_Menu);
registerForContextMenu(textView_context_Menu);registerForContextMenu(buttont_context_Menu);//这里的registerForContextMenu()也可以用下面的语句替代 //getContentView().setOnCreateContextMenuListener(this);}
找工作,上长沙英才网
//创建Context Menu public void onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuInfo){ if(v==textView_context_Menu){ menu.setHeaderTitle(”这个是什么?“);menu.add(0,0,0,”苹果“);menu.add(0,1,1,”猕猴桃“);}else if(v==buttont_context_Menu){ menu.setHeaderTitle(”我知道是什么了!“);menu.add(2,2,2,”不是苹果“);menu.add(2,3,3,”就是猕猴桃“);} super.onCreateContextMenu(menu, v, menuInfo);} //菜单单击响应 @Override public boolean onContextItemSelected(MenuItem item){ //获取当前被选择的菜单项的信息 switch(item.getItemId()){ case 1: Toast toast=Toast.makeText(Context_Menu.this, ”你点击了“+textView_context_Menu.getText(), Toast.LENGTH_LONG);toast.setGravity(Gravity.TOP, 100, 300);toast.show();break;case 3: Toast toast1=Toast.makeText(Context_Menu.this, ”你点击了“+buttont_context_Menu.getText(), Toast.LENGTH_LONG);toast1.setGravity(Gravity.TOP, 100, 300);toast1.show();break;
找工作,上长沙英才网
} return true;} } ============== 第四个例子:动态Menu 此为动态Menu的实现,采用的是代码布局(非XML布局)。此种Memu用在什么情况下,具体该怎么做?
public class Trends_Menu extends Activity{ LinearLayout linearLayout;TextView textView;public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);linearLayout = new LinearLayout(this);linearLayout.setBackgroundColor(android.graphics.Color.BLUE);//设置背景色
linearLayout.setOrientation(linearLayout.VERTICAL);//设置布局方向
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);textView= new TextView(this);//创建TextView对象 textView.setBackgroundColor(Color.YELLOW);//设置背景颜色 textView.setText(”Trends_Men“);textView.setTextSize(50);//textView.setHeight(50);//textView.setWidth(100);textView.setTextColor(Color.RED);//设置字体颜色
找工作,上长沙英才网
linearLayout.addView(textView,params);//将textView添加到linearLayout中去
setContentView(linearLayout);//设置ui布局 } public boolean onPrepareOptionsMenu(Menu menu){ String string = textView.getText().toString();if(string.equals(”Trends_Menu“)){ menu.clear();//清掉菜单
MenuItem item = menu.add(0,1,1,”to Menu“);item.setIcon(android.R.drawable.alert_dark_frame);//android自带的图标 } if(string.equals(”Menu“)){ menu.clear();MenuItem item = menu.add(1,2,2,”to Trends_Menu“);item.setIcon(android.R.drawable.alert_light_frame);} menu.add(0,2,2,”Now is“+string);return super.onPrepareOptionsMenu(menu);} }
-------------ListView 一个用来显示列表的控件 xml设计
代码设计
第一个例子:
public class ListView3 extends ListActivity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);
找工作,上长沙英才网
String[] string={”华中科技“,”天龙大厦“,”科技园“,”天天乐园“};//string 是用来要存放的数据
//android.R.layout.simple_expandable_list_item_1为XML的配置文件, 用来设置列表中每一行的窗口 setListAdapter(new ArrayAdapter
* 在配置文件中要注意的是android:list 是系统自定义的不是随便可以取的,否则会出现找不到ListView ==================== 第二个例子: textView_chrild.xml 找工作,上长沙英才网 android:layout_height=”fill_parent“ android:paddingLeft=”50px“ android:paddingTop=”5px“ android:paddingBottom=”5px“ android:text=”no date“ android:textSize=”30sp“ />
找工作,上长沙英才网
找工作,上长沙英才网
map1.put(”list1“, ”map1“);map2.put(”list1“, ”map2“);list1.add(map1);list1.add(map2);//定义一个List,该List对象为第一个一级条目 提供数据 List
//定义一个List,该List对象用来存储所有二级条目对象 List>> list0 = new ArrayList
>>();list0.add(list21);list0.add(list31);
SimpleExpandableListAdapter simple = new SimpleExpandableListAdapter(找工作,上长沙英才网
this,//context list1,//一级条目数据
R.layout.expandable_group,//用来设置一级条目样式的布局文件 new String[]{”list1“}, //指定一级条目数据的Key new int[]{R.id.textView_group},//指定一级条目数据显示的控件id list0, //二级条目数据
R.layout.expandable_chrild,//用来设置二级条目样式的布局文件 new String[]{”list“}, //指定二级条目数据的Key new int[]{R.id.textView_chrild});//指定二级条目数据显示的控件id
setListAdapter(simple);//将SimpleExpandableListAdapter对象设置给当前的Activity } } ============================= 第三个例子:自定义ListView public class ImageTextView extends LinearLayout{ public TextView textView;public ImageView imageView;
public ImageTextView(Context context, String string,Drawable drawable){----* 注意这里并没用在xml定义控件
super(context);// TODO Auto-generated constructor stub this.setOrientation(VERTICAL);//设置为水平布局 imageView = new ImageView(context);imageView.setImageDrawable(drawable);imageView.setPadding(2, 5, 5, 0);//设置位置
addView(imageView,new LinearLayout.LayoutParams(40,30));
找工作,上长沙英才网
textView = new TextView(context);textView.setText(”title“);textView.setTextSize(20);addView(textView,new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,30));
textView = new TextView(context);textView.setText(”title“);textView.setTextSize(20);addView(textView,new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,30));} * 这是一个线性布局的View,其中包含一个TextView 和一个ImageView.* 且为垂直布局 }-----------------------public class ListCombinAdapter extends BaseAdapter{------------继承BaseAdapter 且必须重写五个函数 private Context wcontext;private List
public ListCombinAdapter(Context context){ this.wcontext=context;list = new ArrayList
找工作,上长沙英才网
} @Override public Object getItem(int position){ return list.get(position);//得到对象在List数组中的位置 } @Override public long getItemId(int position){ return(long)position;} public long getPosition(Object item){ return list.indexOf(item);//得到对象在list中的索引 } @Override public View getView(int position, View convertView, ViewGroup parent){//得到一个显示在屏幕上的View ImageTextView imageTextView;if(convertView == null){//判断原来的View是否存在 如果不存在利用ImageTextView创建一个View imageTextView = new ImageTextView(wcontext,(String)list.get(position).textView.getText(),list.get(position).imageView.getDrawable());}else{ imageTextView =(ImageTextView)convertView;//强制转型 imageTextView.textView = list.get(position).textView;imageTextView.imageView = list.get(position).imageView;} return imageTextView;} public void addItem(String text,Drawable drawable){ list.add(new ImageTextView(wcontext,text,drawable));//将创建好的ImageTextView对象加入到list中去
找工作,上长沙英才网
} }----------------------public class ListView4Activity extends ListActivity {//定制自己的adapter @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);//setContentView(R.layout.main);//不需要此项
ListCombinAdapter listCombinAdapter = new ListCombinAdapter(this);listCombinAdapter.addItem(”不知道此处的字符串起什么作用“,getResources().getDrawable(R.drawable.image2));listCombinAdapter.addItem(”不知道此处的字符串起什么作用“, getResources().getDrawable(R.drawable.image3));setListAdapter(listCombinAdapter);} } ===================== 第四个例子: simpleadapter2.xml 找工作,上长沙英才网 android:orientation=”horizontal“> 找工作,上长沙英才网 android:gravity=”right“ android:textSize=”10pt“ />
public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);ArrayList
篇2:android常用控件总结
使用DevExpress控件来做项目开发已经有很长一段时间了,在摸索开发到客户苛刻要求的过程中,其中碰到过很多问题需要解决的,随着一个个问题的解决,也留下很多对DevExpress控件的使用经验及教训,综合设计到的多个项目的问题,对这些开发常用的要点进行总结,方便别人也方便自己。提供这些解决方法,一个可以快速应用到项目中,二个也可以作为对界面开发的更高要求对待自己的项目,使得自己的东西更加完美,更加受欢迎。
1、GridControl控件的数据显示的样式控制
如上两图所示,我们有时候需要控制列表访问过的颜色变化,或者是时间显示格式等内容,这个时候设置GridView的RowCellStyle即可实现,如下所示。this.gridView1.RowCellStyle += new DevExpress.XtraGrid.Views.Grid.RowCellStyleEventHandler(gridView1_RowCellStyle);
void gridView1_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e)
{
if(e.Column.FieldName == “PublishType”)
{
if(e.CellValue!= null && e.CellValue.ToString()== “中介”)
{
e.Appearance.BackColor = Color.DeepSkyBlue;
e.Appearance.BackColor2 = Color.LightCyan;
}
}
if(e.Column.FieldName == “PublishTime”)
{
e.Column.DisplayFormat.FormatString = “yyyy-MM-dd HH:mm:ss”;
}
if(e.Column.FieldName == “Title”)
{
string id = this.winGridViewPager1.gridView1.GetRowCellDisplayText(e.RowHandle, “Id”);
if(historyDict.ContainsKey(id))
{
e.Appearance.BackColor = Color.DeepSkyBlue;
e.Appearance.BackColor2 = Color.LightCyan;
}
}
}
2、在LayoutControl布局中固定控件宽度 固定宽度后的真实效果。
为了使得界面统一性及更好的控制性,我们一般使用LayoutControl布局控件作为我们添加控件的布局容器,但是这个控件默认是对其中的控件进行按窗口比例进行缩放的,有些客户就不喜欢这些特点,因为他们的显示器可能是30寸的(夸张一点点,不过很多宽屏的),这样很多输入框就会被拉得很长,这样小小一个输入框,可能有很长的一段空白的距离,那样可能真的不好看,如下图所示。
设置固定宽度,其实不是很麻烦,需要设置几个属性即可 1)设置控件的SizeConstraintsType为DevExpress.XtraLayout.SizeConstraintsType.Custom;2)设置控件的FillControlToClientArea 为False 3)设置控件的ControlMaxSize的大小(必要时也可以设置ControlMinSize),设置例子如下所示。
3、GridControl中的GridView内容打印
由于GridView的良好封装性,实现打印的代码很简单。
private void menu_Print_Click(object sender, EventArgs e)
{
PrintableComponentLink link = new PrintableComponentLink(new PrintingSystem());
link.Component = this.gridControl1;
link.Landscape = true;
link.PaperKind = System.Drawing.Printing.PaperKind.A3;
link.CreateMarginalHeaderArea += new CreateAreaEventHandler(Link_CreateMarginalHeaderArea);
link.CreateDocument();
link.ShowPreview();
}
private void Link_CreateMarginalHeaderArea(object sender, CreateAreaEventArgs e)
{
string title = string.Format(“年度大体检-({0}年度)”, this.txtYear.Text);
PageInfoBrick brick = e.Graph.DrawPageInfo(PageInfo.None, title, Color.DarkBlue,new RectangleF(0, 0, 100, 21), BorderSide.None);
brick.LineAlignment = BrickAlignment.Center;
brick.Alignment = BrickAlignment.Center;
brick.AutoWidth = true;
brick.Font = new System.Drawing.Font(“宋体”, 11f, FontStyle.Bold);
}
4、设置GridView的行指示器(行头)显示行号
在我的分页控件以及Winform开发框架很多项目介绍里面,很多都显示了行号,其实这个在DevExpress中的实现很简单,如果需要,可以实现在自己的代码里面。
1)先实现GridView的CustomDrawRowIndicator事件,实现代码如下所示。
private void advBandedGridView1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
{
e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;
if(e.Info.IsRowIndicator)
{
if(e.RowHandle >= 0)
{
e.Info.DisplayText =(e.RowHandle + 1).ToString();
}
else if(e.RowHandle < 0 && e.RowHandle >-1000)
{
e.Info.Appearance.BackColor = System.Drawing.Color.AntiqueWhite;
e.Info.DisplayText = “G” + e.RowHandle.ToString();
}
}
} 2)然后设置GridView控件的IndicatorWidth为合适的宽度,如40左右则比较好。这样设置后,就能顺利显示行号了,是不是很方便呢。
5、GridView表头多行显示(折行),表头及行内容居中操作
在一些自定义的列表中,我们为了合理显示表头的内容,可能会要求表头显示的文字可以折行显示,然后还需要内容居中显示,那么在DevExpress该如何操作呢,代码设置如下所示。
//表头折行设置
this.gridView1.ColumnPanelRowHeight = 40;
this.gridView1.OptionsView.AllowHtmlDrawHeaders = true;
this.gridView1.Appearance.HeaderPanel.TextOptions.WordWrap = DevExpress.Utils.WordWrap.Wrap;
//表头及行内容居中显示
this.gridView1.Appearance.Row.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
this.gridView1.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;然后设置表头的时候,设置内容使用rn来进行换行,如:体重rn(kg)下面是我分页控件里面的例子设置,供参考。
this.winGridViewPager1.AddColumnAlias(“Weight”, “体重rn(kg)”);
this.winGridViewPager1.AddColumnAlias(“Pulse”, “脉搏rn(次)”);
this.winGridViewPager1.AddColumnAlias(“BloodSystolic”, “收缩压”);
this.winGridViewPager1.AddColumnAlias(“BloodDiastolic”, “舒张压”);
this.winGridViewPager1.AddColumnAlias(“SightLeft”, “视力rn(左)”);
this.winGridViewPager1.AddColumnAlias(“SightRight”, “视力rn(右)”);
6、控件内容输入问题
在客户使用软件的时候,反馈说有一些数字输入框、日期输入框,不支持键盘输入内容,经测试,确实是存在这个问题,默认的数字、日期等输入,都要切换输入法才可以输入,不能默认就支持数字的输入,那么是否有办法解决呢,当然办法总是有的。
其实只需要设置 ImeMode=Off 即可解决问题,关于这个属性,大家可以参考下面的介绍。(就开发而言,记得逢数字,日期的控件,必须设置 ImeMode=Off,否则你的软件使用客户会骂娘。
ImeMode 枚举:指定一个值,该值是用来确定在选定了对象时该对象的输入法编辑器(IME)的状态。以下是微软的解释:
成员名称 说明
Alpha 字母数字单字节字符(SBC)。此设置仅对朝鲜语和日语 IME 有效。
AlphaFull 字母数字双字节字符。此设置仅对朝鲜语和日语 IME 有效。
Close Disable IME 被禁用。如果使用此设置,则用户无法从键盘打开 IME,而且 IME 浮动窗口处于隐藏状态。
Hangul 朝鲜文 SBC。此设置仅对朝鲜语 IME 有效。
HangulFull 朝鲜文 DBC。此设置仅对朝鲜语 IME 有效。
Hiragana平假名 DBC。此设置仅对日语 IME 有效。
Inherit 继承父控件的 IME 模式。
Katakana 片假名 DBC。此设置仅对日语 IME 有效。
KatakanaHalf 片假名 SBC。此设置仅对日语 IME 有效。
NoControl 无(默认)。
Off IME 已关闭。此模式指示 IME 已关闭,这意味着该对象的行为方式与英语输入模式相同。此设置仅对日语、简体中文和繁体中文 IME 有效。
篇3:android常用控件总结
关键词:ListView,优化,列表项
List View是Android应用程序开发中最常用的控件之一, 该控件使用垂直列表的方式显示多个选项, 特别适用于像手机这种长方形屏幕, 且屏幕相对较小的设备。我们在手机上常用的通讯录、微博、QQ聊天和淘宝宝贝的浏览等, 都是通过List View控件进行显示的。
1 List View控件简介
List View控件是一个列表控件, 它继承自Adapter View类, Adapter View可以通过Adapter适配器类向其子类视图填充数据。
List View控件的特点是每一个列表项 (item) 独占一行, 每一行的布局都是相同的, 其中显示的内容和行布局分离。所以, List View可以使用Adapter适配器来填充数据, 而它本身只负责布局。
2 List View控件的优化方法
2.1 List View控件中列表项的复用
在使用List View控件时, 我们需要注意如果我们把所有需要显示的列表项都创建界面 (convert View) 进行加载, 那么当加载的列表项过多时, 就会占用大量的内存。为解决这个问题, List View控件在设计上采用了只创建同时显示在当前屏幕中的列表项的布局对象。如, 当前屏幕最多显示10个列表项, 那么List View只创建10个convert View, 其后反复使用这10个convert View显示进入到屏幕中的列表项即可。
当向上滚屏时, 最上面的convert View移出屏幕, 该convert View将加载下面要显示的列表项, 从屏幕最下面再次出现。同理, 当向下滚屏时, 最下面的convert View移出屏幕, 该convert View将加载上面要显示的列表项, 从屏幕最上面再次出现。
通过这种优化方式, 我们不用再每次都创建新的convert View, 而是采取每次判断convert View是否为空, 若为空, 则创建布局对象。若不为空, 说明当前屏幕能够同时显示的convert View都已经创建完毕, 此时将滑出屏幕的convert View取出, 然后显示新的数据。
2.2 使用数据持有对象保存convert View中的全部控件
当我们在List View中显示conver View时, 需要每次通过convert View.find View Id () 方法来获取convert View中使用的各个控件, 由于每次都需要遍历对应的XML文件, 降低程序运行效率.我们也可以将每个convert View中使用的各个控件也保存成一个对象, 进行复用, 以优化程序。然后, 我们可以通过以下两个方法将保存好的对象和当前的convert View对象进行关联。
(1) convert View.set Tag (Object obj) 方法, 将对象obj与当前的convert View相关联;
(2) convert View.get Tag () 方法, 获取与当前的convert View相关联的对象;
3 通过实例说明List View控件的优化方法
下面以一个显示图书目录程序为例, 说明如何对List View控件进行优化使用。
步骤1.在activity_main.xml布局文件中声明List View控件;
步骤2.创建第二个布局文件item.xml, 在该布局文件中为List View的item设计显示样式;该布局文件可以设计为如下图1所示布局。
步骤3.在Main Activity中实例化List View控件, 实例化对象的名字为lv Books;
步骤4.获取数据集, 即需要在List View中显示的图书信息数据集;
步骤5.创建适配器Book Adapter, 其继承自Base Adapter类, 用来抽取出一条条item列表项在List View中显示;
说明:在这里, 我们采用MVC模式显示、处理数据。其中步骤1、2负责建立View显示层, 设置显示的样式;步骤4需要建立Module层类, 获取图书信息;步骤5是将适配器作为控制层, 负责控制数据在View中的显示。
在使用步骤5中的适配器完成数据控制, 在List View中显示数据时, 主要通过以下几个步骤完成:
a.在Book Adapter类中定义两个属性, 图书信息数据集books和布局解析器inflater, 在构造方法中对其进行实例化;
b.根据需要, 实现以下继承自抽象类Base Adapter中的方法。
(1) 使用get View方法将每一条图书信息加载到每一个item界面上去。
首先定义一个内部类, 用于复用每一个界面上的控件。
然后, 在get View方法中, 加载每一个item界面。
通过以上步骤, 我们就实现了List View视图的优化, 达到了item界面复用, 和将item界面上的所有控件保存在一个对象中的目的。
(2) 重写get Count () 方法, 返回books图书数量
(3) 重写get Item (int position) 方法, 返回当前位置的图书信息, 代码参考如下:
return books.get (position) ;
(4) 重写get Item Id (int position) 方法, 返回当前位置图书的ID, 代码参考如下:
return books.get (position) .get Id () ;
c.定义好适配器类后, 在Main Activity中将适配器对象作为一个属性进行定义, 在初始化界面中进行实例化, 将当前界面和图书信息数据集通过Book Adapter的构造器传递给适配器, 调用set Adapter方法将List View对象lv Books与适配器对象badapter关联;
4 小结
对List View的优化主要是指优化内存, 通过复用列表项和定义数据持有对象, 减少视图控件的创建, 提高内存的使用效率。通过对List View控件进行优化使用, 可以大大提升开发的程序的运行效率, 这种优化方法十分受到广大程序员的欢迎。
参考文献
篇4:android常用控件总结
自动化测试基本操作命令:
模拟点击操作:adb shell input tap 500 500(点击手机(500,500)坐标)模拟滑动屏幕操作:adb shell input swipe 200 500 400 500 模拟输入文本信息:adb shell input text helloworld 模拟按键命令:
adb shell input keyeventKEYCODE_VOLNME_DOWN按音量下键 adb shell input keyeventKEYCODE_VOLNME_UP
按音量上键 adb shell input keyevent 自动化测试中日志分析截图命令:
数据线连接手机截图:adb shell /system/bin/screencap–p /sdcard/screenshot.png 将截图复制到电脑盘中:adb pull /sdcard/screenshot.png E:download 输出所有已经安装应用: adb shell pm list package –f 查看预安APK adb shell pm list package-3 安装应用程序:
adb install –r 应用程序.apk 文件传输:
获取模拟器中的文件:adb pull
常用的发送键盘事件:
命令格式:adb shell input keyevent“value” 其中value以及对应的key code如下:
篇5:android常用控件总结
java.lang.IllegalStateException: onMeasure did not set the measured dimension by calling setMeasuredDimension()
-待填充-
相关文章:
Android编程01-06
甲醛甲酚01-06
Android监控01-06
Android课程01-06
android学习路线01-06
Android终端01-06
Android Activity 详述01-06
android项目心得01-06
android面试题目01-06
android移动开发答案01-06