1、移动OA1,关于View中的getContext()方法的用法: Contextcontext=view.getContext(); / 通过view对象的getContext方法获得的Context对象,就是view所依附的 Activity的上下文;if(contextinstanceofActivity)Activityactivity=(Activity)context;自定义适配器中动态生成View的时候,添加View前先调用removeAllViews()方法移除所有的其它View,然后再添加;自定义线性布局中设置布局中的View的宽或高:利用View中的onWindowFocus
2、Changed方法实现动态控制View对象的宽和高;Override public void onWindowFocusChanged(boolean hasFocus) super.onWindowFocusChanged(hasFocus); DisplayMetrics dm = context.getResources().getDisplayMetrics(); int screenWidth = dm.widthPixels; splite_view.getLayoutParams().width = screenWidth / 7; 范例:DutyActivity布局中只有一个L
3、inearLayout,自定义LinearLayout中有三个TextView,点击不同的TextView,在自定义LinearLayout的ViewPager中进行添加到ViewPager中的不同自定义View的切换; 此时我们可以在自定义View或布局中写一个方法:/ 设置View的宽和高; public void setSplitViewWidth() WindowManager manager = (WindowManager) this.getContext() .getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm
4、= new DisplayMetrics(); manager.getDefaultDisplay().getMetrics(dm); int screenWidth = dm.widthPixels; splite_view.getLayoutParams().width = screenWidth / 3; 然后在自定义Activity的代码块如下:/ 显示医生值班;视图; public void showDoctorDutyView(String searchdate) dutyLayout.removeAllViews(); DoctorDutyView v=new DoctorDut
5、yView(this.getApplicationContext(), searchdate); / 先添加View到布局中; dutyLayout.addView(v); / 设置自定义LinearLayout的宽度为屏幕的1/3; v.setSplitViewWidth(); Toast.makeText(this,执行了, 0).show(); 利用ViewFlipper来定时切换图片;/ 设置页面进入和出去的动画; viewFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in); vi
6、ewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out); / 显示下一页; viewFlipper.showNext(); currentPage+; ViewFilpper控件是系统自带控件之一,主要为在同一个屏幕间的切换及设置动画效果,且可以自动播放,用法如下:配置文件:viewflipper_layout.xml1 8 / 将要切换的几个界面;9 10 11 12 13 ViewFlipper extends ViewAnimator:所以继承了ViewAnimator中的sho
7、wNext()和showPrevious()方法;利用这两个方法进行来回的切换;ViewPager用法:主要用来实现翻页功能ViewPager extends ViewGroup 是作为容器类使用的;可以用ViewGroup中的addView方法添加页面; ViewPager做为容器类,可以结合View(Layout)和Fragment(Android 3.0 才引入的),官方文档说ViewPager+Fragment配合使用更好。ViewPager不在android sdk 自带jar包中,来源google 的补充组件android-support-v4.jar,actionBar.setB
8、ackgroundDrawable(myDrawable);在ActionBar上设置背景后,ActionBar会自动缩放你的背景图;默认情况下,actionBar放在你的activity的顶部,且作为activity布局的一部分。设置成为覆盖模式后,actionBar相当于漂浮在activity之上,不干预activity的布局。设置如下:getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);setContentView(R.layout.main);ImageView 的setBackgroundResource和set
9、ImageResource的区别:setImageResource是和xml布局中的src的属性相匹配的,而setBackgroundResource是和xml中的background属性相匹配的。Android中通过代码获取arrays.xml文件中的数据 android工程res/valuse文件夹下的arrays.xml文件中用于放各种数组数据,比如字符串数组、整型数组等,数组中的数据可能是具体的值,也有可能是对资源数据的引用,下面针对这两种情况通过代码来获取相应的数组数据1、数组中的数据为具体的值:Stringitems=getResources().getStringArray(R.
10、array.select_dialog_items);获取整型数组的数据方法为:public int getIntArray(int id) throws NotFoundException 获取文本数组的数据方法为:public CharSequence getTextArray(int id) throws NotFoundException二、数组中的数据为对资源数据的引用:比如arrays.xml文件中的数组如下: drawable/latestdrawable/video drawable/radio代码中获取该数组资源的具体代码如下:TypedArray typedArray=ge
11、tResources().obtainTypedArray(R.array.feed_icons); / -1为ResourceId不存在时的默认值; int feedResId = typedArray.getResourceId( index, -1); 获取arrays.xml中数据项为引用资源数据的数组时,首先通过Resources类中的obtainTypedArray方法获取到TypedArray实例,然后通过TypedArray方法中的getResourcesId方法获取数组中每一项的资源id,这样就能顺利地引用到数组中资源了。通过代码获取arrays.xml中的数组资源时,数组中
12、的元素项不宜过多,特别是一次性获取的时候,有可能你在使用时它还没有获取到你需要使用的数组项。注意事项通过android的arrays.xml获取数组信息时,在代码中初始化数组时建议通过线程初始化,避免在初始化的时候阻塞UI线程。向SQLite中批量添加记录(放到一个事务中);String sql = insert into adsbook_emp.;/ 对SQL语句进行预编译; SQLiteStatement stat = pileStatement(sql); / 批量插入数据; db.beginTransaction(); for (AdsBookEmp emp : list) / 绑定参
13、数(index : 1-last); stat.bindString(1, emp.empId); stat.bindString(2, emp.empName); stat.bindString(3, emp.orgId); stat.executeInsert();db.setTransactionSuccessful();db.endTransaction();db.close();每个View对象都是有布局参数的(实例):参数的宽和高用户可以更改;View splite_view;float c_x = startIndex * splite_view.getLayoutParams(
14、).width;float x = endIndex * splite_view.getLayoutParams().width;Animation animation = new TranslateAnimation(c_x, x, 0, 0);animation.setFillAfter(true);/ True:图片停在动画结束位置37animation.setDuration(200);splite_view.startAnimation(animation);currentIndex = endIndex;/ 不显示一个Activity 的图标或Logo; actionBar.set
15、DisplayShowHomeEnabled(false); / 显示默认的返回键; actionBar.setDisplayHomeAsUpEnabled(true); / 设置导航模式为List列表导航 ; actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); actionBar.setListNavigationCallbacks(new ArrayAdapter( DutyActivity.this,R.layout.item_txsjlist, R.id.tv_txsj, new String 总值班, 医生值班,
16、护士值班 ), this); String.format() 用法:StringBuffer sb = new StringBuffer();sb.append(String.format(%d-%02d,datePicker.getYear(),datePicker.getMonth() + 1);格式字符串可能包含以下的转义码:%c - 接受一个数字, 并将其转化为ASCII码表中对应的字符%d, %i - 接受一个数字并将其转化为有符号的整数格式%o - 接受一个数字并将其转化为八进制数格式%u - 接受一个数字并将其转化为无符号整数格式%x - 接受一个数字并将其转化为十六进制数格式,
17、 使用小写字母%X - 接受一个数字并将其转化为十六进制数格式, 使用大写字母%e - 接受一个数字并将其转化为科学记数法格式, 使用小写字母e%E - 接受一个数字并将其转化为科学记数法格式, 使用大写字母E%f - 接受一个数字并将其转化为浮点数格式%g(%G) - 接受一个数字并将其转化为%e(%E, 对应%G)及%f中较短的一种格式%q - 接受一个字符串并将其转化为可安全被Lua编译器读入的格式%s - 接受一个字符串并按照给定的参数格式化该字符串为进一步细化格式, 可以在%号后添加参数. 参数将以如下的顺序读入:(1) 符号: 一个+号表示其后的数字转义符将让正数显示正号. 默认情
18、况下只有负数显示符号.(2) 占位符: 一个0, 在后面指定了字串宽度时占位用. 不填时的默认占位符是空格.(3) 对齐标识: 在指定了字串宽度时, 默认为右对齐, 增加-号可以改为左对齐.(4) 宽度数值(5) 小数位数/字串裁切: 在宽度数值后增加的小数部分n, 若后接f(浮点数转义符, 如%6.3f)则设定该浮点数的小数只保留n位, 若后接s(字符串转义符, 如%5.3s)则设定该字符串只显示前n位.switch (sUriMatcher.match(uri) case ID: / 匹配到id; if (selection = null) /* * /比如:content:/+First
19、ProvierMetaData.AUTHORIY+/users/1 * /getPathSegments()得到的是users 和1,get(1)会得到1 */ selection = id= + uri.getPathSegments().get(1) + ; else selection += and (id= + uri.getPathSegments().get(1) + ); cursor = db.query(DatabaseHelper.DEPARTMENT_TABLE_NAME, projection,selection, selectionArgs, null, null,
20、sortOrder);break;CursorLoader异步查询内容:操作ContentProvider中的内容时,我们一般使用Cursor Loader异步查询内容,数据库操作是非常耗时的,对于任何数据库和ContentProvider查询来说,做好不要在UI线程中执行,这点很重要。1Loader简介:通过LoaderManager可以在每个Activity和Fragment中使用Loader。这些Loader被用来异步加载数据和监控底层数据源的变化。CursorProvider允许针对ContentProvider执行异步查询并返回一个结果Cursor,而且对底层提供的任何更新都会发出通
21、知。在Activity中的应用:Override public Loader onCreateLoader(int LOADER_ID, Bundle arg1) String uriStr = content:/com.provider.test/table_name/id; / CursorLoader会查询出所有的元素; CursorLoader cursorLoader = new CursorLoader(this, Uri.parse(uriStr),null, null, null, null); return cursorLoader; / Loader查询完成时,结果Curs
22、or会返回到onLoadFinished方法的arg1中; Override public void onLoadFinished(Loader arg0, Cursor arg1) / Override public void onLoaderReset(Loader arg0) SQLiteQueryBuilder和SQLiteQuery 的使用;onWindowFocusChanged重要作用 and Activity生命周期 这个事件可以实现当一个Activity完全加载完毕后,然后就执行这个onWindowFocusChanged指的是这个Activity得到或者失去焦点的时候 就会
23、call。 也就是说如果你想要做一个Activity一加载完毕,就触发什么的话 完全可以用这个!Activity生命周期中,onStart, onResume, onCreate都不是真正visible的时间点,真正的visible时间点是onWindowFocusChanged()函数被执行时。译注:从onWindowFocusChanged被执行起,用户可以与应用进行交互了,而这之前,对用户的操作需要做一点限制。我们在onWindowFocusChanged方法中可以获取某一个View的具体位置和宽高的,而在其他标准生命周期的接口中调用都是获取不到的,比如在onResume,onStart
24、中都获取不到信息。相应的执行顺序的打印:1: entry: onStart-onResume-onAttachedToWindow-onWindowVisibilityChanged-visibility=0-onWindowFocusChanged(true)-2. exit: onPause-onStop-onWindowFocusChanged(false)-(lockscreen)3. exit : onPause-onWindowFocusChanged(false)-onWindowVisibilityChanged-visibility=8-onStop(to another a
25、ctivity)点击Button使ViewPager跳转到特定页码的页面:currentIndex = 0;/ 使ViewPager跳转到某一页;viewPager.setCurrentItem(0);CalendarView控件:Android3.0及以上版本自带的日历控件,我们可通过流动鼠标滑轮来选择上一月或是下一月,有的朋友可能在Android3.0以下的版本做开发,如果在Android3.0以下的版本中使用日历控件,第一种解决方案是使用第三方开发的控件这是CalendarView的效果图。可以实现上月和下月翻页,设置事件等。如果是打开日历控件界面则可通过如下方式:startActivi
26、ty(new Intent(Intent.ACTION_VIEW).setDataAndType(null, CalendarActivity.MIME_TYPE);如果是想点击控件上选择某一个日期并返回结果,可通过下面方式:/ 打开日历控件界面 startActivityForResult(new Intent(Intent.ACTION_PICK). setDataAndType(null, CalendarActivity.MIME_TYPE), 100); / 重写onActivityResult()方法处理返回的日期 Override public void onActivityRe
27、sult(int requestCode, int resultCode, Intent data) if(resultCode=RESULT_OK) int year = data.getIntExtra(year, 0); / 得到年 int month = data.getIntExtra(month, 0); / 得到月 int day = data.getIntExtra(day, 0); / 得到天 / 格式化日期显示 final Calendar dat = Calendar.getInstance(); dat.set(Calendar.YEAR, year); dat.set
28、(Calendar.MONTH, month); dat.set(Calendar.DAY_OF_MONTH, day); / 显示日期结果 SimpleDateFormat format = new SimpleDateFormat(yyyy MMM dd); Toast.makeText(TestActivity.this, format.format(dat.getTime(), Toast.LENGTH_LONG).show(); datePicker.init(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), null); / /设置不显示CalendarView,即上面的View; datePicker.setCalendarViewShown(false);TextView中setTag附带其它的数据:setTag(final Object tag) / 附带一个任何对象;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1