移动OA.docx

上传人:b****7 文档编号:25447872 上传时间:2023-06-08 格式:DOCX 页数:18 大小:765.70KB
下载 相关 举报
移动OA.docx_第1页
第1页 / 共18页
移动OA.docx_第2页
第2页 / 共18页
移动OA.docx_第3页
第3页 / 共18页
移动OA.docx_第4页
第4页 / 共18页
移动OA.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

移动OA.docx

《移动OA.docx》由会员分享,可在线阅读,更多相关《移动OA.docx(18页珍藏版)》请在冰豆网上搜索。

移动OA.docx

移动OA

1,关于View中的getContext()方法的用法:

Context context = view.getContext();

//通过view对象的getContext方法获得的Context对象,就是view所依附的Activity的上下文;

if (context instanceof Activity)

{

    Activity activity = (Activity)context;

}

自定义适配器中动态生成View的时候,添加View前先调用removeAllViews()方法移除所有的其它View,然后再添加;

自定义线性布局中设置布局中的View的宽或高:

利用View中的onWindowFocusChanged方法实现动态控制View对象的宽和高;

@Override

publicvoidonWindowFocusChanged(booleanhasFocus){

super.onWindowFocusChanged(hasFocus);

DisplayMetricsdm=context.getResources().getDisplayMetrics();

intscreenWidth=dm.widthPixels;

splite_view.getLayoutParams().width=screenWidth/7;

}

范例:

DutyActivity布局中只有一个LinearLayout,自定义LinearLayout中有三个TextView,点击不同的TextView,在自定义LinearLayout的ViewPager中进行添加到ViewPager中的不同自定义View的切换;

此时我们可以在自定义View或布局中写一个方法:

//设置View的宽和高;

publicvoidsetSplitViewWidth(){

WindowManagermanager=(WindowManager)this.getContext()

.getSystemService(Context.WINDOW_SERVICE);

DisplayMetricsdm=newDisplayMetrics();

manager.getDefaultDisplay().getMetrics(dm);

intscreenWidth=dm.widthPixels;

splite_view.getLayoutParams().width=screenWidth/3;

}

然后在自定义Activity的代码块如下:

//显示医生值班;视图;

publicvoidshowDoctorDutyView(Stringsearchdate){

dutyLayout.removeAllViews();

DoctorDutyViewv=newDoctorDutyView(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));

viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,

R.anim.push_left_out));

//显示下一页;

viewFlipper.showNext();

currentPage++;

ViewFilpper控件是系统自带控件之一,主要为在同一个屏幕间的切换及设置动画效果,且可以自动播放,用法如下:

配置文件:

viewflipper_layout.xml

1

2android:

id="@+id/viewflipper"

3android:

layout_width="match_parent"

4android:

layout_height="match_parent"

5android:

inAnimation="@anim/slide_in"

6android:

outAnimation="@anim/slide_out"

7android:

flipInterval="2000">

8//将要切换的几个界面;

9

10

11

12

13

ViewFlipperextendsViewAnimator:

所以继承了ViewAnimator中的showNext()和showPrevious()方法;利用这两个方法进行来回的切换;

ViewPager用法:

主要用来实现翻页功能

ViewPagerextendsViewGroup是作为容器类使用的;

可以用ViewGroup中的addView方法添加页面;

ViewPager做为容器类,可以结合View(Layout)和Fragment(Android3.0才引入的),官方文档说ViewPager+Fragment配合使用更好。

ViewPager不在androidsdk自带jar包中,来源google的补充组件android-support-v4.jar,

 

actionBar.setBackgroundDrawable(myDrawable);

在ActionBar上设置背景后,ActionBar会自动缩放你的背景图;

默认情况下,actionBar放在你的activity的顶部,且作为activity布局的一部分。

设置成为覆盖模式后,actionBar相当于漂浮在activity之上,不干预activity的布局。

设置如下:

getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

setContentView(R.layout.main);

ImageView的setBackgroundResource和setImageResource的区别:

setImageResource是和xml布局中的src的属性相匹配的,而setBackgroundResource是和xml中的background属性相匹配的。

 

Android中通过代码获取arrays.xml文件中的数据

android工程res/valuse文件夹下的arrays.xml文件中用于放各种数组数据,比如字符串数组、整型数组等,数组中的数据可能是具体的值,也有可能是对资源数据的引用,下面针对这两种情况通过代码来获取相应的数组数据

1、数组中的数据为具体的值:

String[]items=getResources().getStringArray(R.array.select_dialog_items);获取整型数组的数据方法为:

publicint[]getIntArray(intid)throwsNotFoundException

获取文本数组的数据方法为:

publicCharSequence[]getTextArray(intid)throwsNotFoundException

二、数组中的数据为对资源数据的引用:

比如arrays.xml文件中的数组如下:

@drawable/latest

@drawable/video

@drawable/radio

代码中获取该数组资源的具体代码如下:

TypedArraytypedArray=getResources().obtainTypedArray(R.array.feed_icons);

//-1为ResourceId不存在时的默认值;

intfeedResId=typedArray.getResourceId(index,-1);

获取arrays.xml中数据项为引用资源数据的数组时,首先通过Resources类中的obtainTypedArray方法获取到TypedArray实例,然后通过TypedArray方法中的getResourcesId方法获取数组中每一项的资源id,这样就能顺利地引用到数组中资源了。

通过代码获取arrays.xml中的数组资源时,数组中的元素项不宜过多,特别是一次性获取的时候,有可能你在使用时它还没有获取到你需要使用的数组项。

注意事项

通过android的arrays.xml获取数组信息时,在代码中初始化数组时建议通过线程初始化,避免在初始化的时候阻塞UI线程。

向SQLite中批量添加记录(放到一个事务中);

Stringsql="insertintoadsbook_emp"......;

//对SQL语句进行预编译;

SQLiteStatementstat=pileStatement(sql);

//批量插入数据;

db.beginTransaction();

for(AdsBookEmpemp:

list){

//绑定参数(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对象都是有布局参数的(实例):

参数的宽和高用户可以更改;

Viewsplite_view;

floatc_x=startIndex*splite_view.getLayoutParams().width;

floatx=endIndex*splite_view.getLayoutParams().width;

Animationanimation=newTranslateAnimation(c_x,x,0,0);

animation.setFillAfter(true);//True:

图片停在动画结束位置37

animation.setDuration(200);

splite_view.startAnimation(animation);

currentIndex=endIndex;

 

//不显示一个Activity的图标或Logo;

actionBar.setDisplayShowHomeEnabled(false);

//显示默认的返回键;

actionBar.setDisplayHomeAsUpEnabled(true);

//设置导航模式为List列表导航;

actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

actionBar.setListNavigationCallbacks(newArrayAdapter(

DutyActivity.this,R.layout.item_txsjlist,R.id.tv_txsj,

newString[]{"总值班","医生值班","护士值班"}),this);

String.format()用法:

StringBuffersb=newStringBuffer();

sb.append(String.format("%d-%02d",datePicker.getYear(),datePicker.getMonth()+1));

格式字符串可能包含以下的转义码:

%c-接受一个数字,并将其转化为ASCII码表中对应的字符

%d,%i-接受一个数字并将其转化为有符号的整数格式

%o-接受一个数字并将其转化为八进制数格式

%u-接受一个数字并将其转化为无符号整数格式

%x-接受一个数字并将其转化为十六进制数格式,使用小写字母

%X-接受一个数字并将其转化为十六进制数格式,使用大写字母

%e-接受一个数字并将其转化为科学记数法格式,使用小写字母e

%E-接受一个数字并将其转化为科学记数法格式,使用大写字母E

%f-接受一个数字并将其转化为浮点数格式

%g(%G)-接受一个数字并将其转化为%e(%E,对应%G)及%f中较短的一种格式

%q-接受一个字符串并将其转化为可安全被Lua编译器读入的格式

%s-接受一个字符串并按照给定的参数格式化该字符串

为进一步细化格式,可以在%号后添加参数.参数将以如下的顺序读入:

(1)符号:

一个+号表示其后的数字转义符将让正数显示正号.默认情况下只有负数显示符号.

(2)占位符:

一个0,在后面指定了字串宽度时占位用.不填时的默认占位符是空格.

(3)对齐标识:

在指定了字串宽度时,默认为右对齐,增加-号可以改为左对齐.

(4)宽度数值

(5)小数位数/字串裁切:

在宽度数值后增加的小数部分n,若后接f(浮点数转义符,如%6.3f)则设定该浮点数的小数只保留n位,若后接s(字符串转义符,如%5.3s)则设定该字符串只显示前n位.

 

switch(sUriMatcher.match(uri)){

caseID:

//匹配到id;

if(selection==null)

/*

*//比如:

content:

//"+FirstProvierMetaData.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,sortOrder);

break;

 

CursorLoader异步查询内容:

操作ContentProvider中的内容时,我们一般使用CursorLoader异步查询内容,数据库操作是非常耗时的,对于任何数据库和ContentProvider查询来说,做好不要在UI线程中执行,这点很重要。

1>Loader简介:

通过LoaderManager可以在每个Activity和Fragment中使用Loader。

这些Loader被用来异步加载数据和监控底层数据源的变化。

CursorProvider允许针对ContentProvider执行异步查询并返回一个结果Cursor,而且对底层提供的任何更新都会发出通知。

在Activity中的应用:

@Override

publicLoaderonCreateLoader(intLOADER_ID,Bundlearg1){

StringuriStr="content:

//com.provider.test/table_name/id";

//CursorLoader会查询出所有的元素;

CursorLoadercursorLoader=newCursorLoader(this,Uri.parse(uriStr),null,null,null,null);

returncursorLoader;

}

//Loader查询完成时,结果Cursor会返回到onLoadFinished方法的arg1中;

@Override

publicvoidonLoadFinished(Loaderarg0,Cursorarg1){

//

}

@Override

publicvoidonLoaderReset(Loaderarg0){

}

SQLiteQueryBuilder和SQLiteQuery的使用;

 

onWindowFocusChanged重要作用andActivity生命周期

这个事件可以实现当一个Activity完全加载完毕后,然后就执行这个onWindowFocusChanged指的是这个Activity得到或者失去焦点的时候就会call。

也就是说如果你想要做一个Activity一加载完毕,就触发什么的话完全可以用这个!

Activity生命周期中,onStart,onResume,onCreate都不是真正visible的时间点,真正的visible时间点是onWindowFocusChanged()函数被执行时。

译注:

从onWindowFocusChanged被执行起,用户可以与应用进行交互了,而这之前,对用户的操作需要做一点限制。

我们在onWindowFocusChanged方法中可以获取某一个View的具体位置和宽高的,而在其他标准生命周期的接口中调用都是获取不到的,比如在onResume,onStart中都获取不到信息。

相应的执行顺序的打印:

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(toanotheractivity)

 

点击Button使ViewPager跳转到特定页码的页面:

currentIndex=0;

//使ViewPager跳转到某一页;

viewPager.setCurrentItem(0);

CalendarView控件:

Android3.0及以上版本自带的日历控件,我们可通过流动鼠标滑轮来选择上一月或是下一月,

有的朋友可能在Android3.0以下的版本做开发,如果在Android3.0以下的版本中使用日历控件,第一种解决方案是使用第三方开发的控件

这是CalendarView的效果图。

可以实现上月和下月翻页,设置事件等。

如果是打开日历控件界面则可通过如下方式:

startActivity(newIntent(Intent.ACTION_VIEW).setDataAndType(null,CalendarActivity.MIME_TYPE));

 如果是想点击控件上选择某一个日期并返回结果,可通过下面方式:

//打开日历控件界面

startActivityForResult(newIntent(Intent.ACTION_PICK).

setDataAndType(null,CalendarActivity.MIME_TYPE),100);

//重写onActivityResult()方法处理返回的日期

@Override

publicvoidonActivityResult(intrequestCode,intresultCode,Intentdata){

if(resultCode==RESULT_OK){

intyear=data.getIntExtra("year",0);//得到年

intmonth=data.getIntExtra("month",0);//得到月

intday=data.getIntExtra("day",0);//得到天

//格式化日期显示

finalCalendardat=Calendar.getInstance();

dat.set(Calendar.YEAR,year);

dat.set(Calendar.MONTH,month);

dat.set(Calendar.DAY_OF_MONTH,day);

//显示日期结果

SimpleDateFormatformat=newSimpleDateFormat("yyyyMMMdd");

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(finalObjecttag)//附带一个任何对象;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1