当前位置:文档之家› Android 学习笔记

Android 学习笔记

Android 学习笔记
Android 学习笔记

1.Android学习笔记(1)-永远不变的Hello World

2.Google的Android SDK发布也有一段时间了,一直想研究一下却苦于找不到时间。利用这个周未,开始强迫自己

再次进入学习状态,原因很简单:我看好开放的gPhone。

3.SDK的下载与安装并不复杂,网上也有不少同学已经进入状态了,我就不再重复了吧。

4.今天主要讨论的,还是永远不变的话题:Hello World.

1.最简单的HelloWorld

5.安装了SDK后,直接生成一个Android Project,一句代码不用写,就能跑出一个最简单的HelloWorld例程。我

们看一下它的代码:

6.public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setTheme(android.R.style.Theme_Dark);

setContentView(https://www.doczj.com/doc/d15558702.html,yout.main);

}

7.看上去实在很简单,只有两句话而已。关键在这个https://www.doczj.com/doc/d15558702.html,yout.main上,凭直觉,这应该是定义的资源。的确,在

R.java中只是定义了一个static int 而已,真正的资源描述在res/layout/main.xml文件里(注意:这里的R.java 不要手工编辑,每次build project时它都会根据res下的资源描述被自动修改)。

8.

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Hello World"

/>

9.这个文件很好读,一个描述了这是一个线性排列的布局,android:orientation=vertical表示所有组件将纵向排

布。而经典的Hello World是用一个TextView来展示的。

10.由此,我们知道,Android的程序从一个Activity派生出来,并且从它的onCreate开始启动;Android里要显示

的组件用XML文件描述而不用在代码中硬编码(这是一个好的习惯,我们应该从一开始就坚持下去);

11.2.让Button来说Hello World

上面的例子是ADT自动生成的代码,似乎与我们一点关系也没有。那我们来改一下代码,因为在windows平台上的Helloworld经常是由一个按钮触发的,所以,我们想第二个Helloworld应该是这样的:加一个按钮和文本输入框,单击按钮后在原来的TextView后面加上输入框中输入的文字。

第一步是,增加一个Button和一个EditText,与TextView一样,它们也在main.xml里描述一下:

12.

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text=""

/>

32.除了一个“Hello中国”以外,增加一个按钮可以返回前一个界面。然后,在代码中我们要为helloTwo增加两个

方法,setViewOneCommand和setViewTwoCommand,分别处理一下在不同界面时,从资源里加载组件并为组件绑定一个事件处理器。

33.public void setViewOneCommand()

{

Button btn = (Button)findViewById(R.id.go);

btn.setOnClickListener(new View.OnClickListener()

{

public void onClick(View v)

{

helloTwo.this.setContentView(https://www.doczj.com/doc/d15558702.html,yout.second);

helloTwo.this.setViewTwoCommand();

}

});

Button btnExit=(Button)findViewById(R.id.exit);

btnExit.setOnClickListener(new View.OnClickListener(){

public void onClick(View v){

helloTwo.this.finish();

}

});

}

public void setViewTwoCommand()

{

Button btnBack=(Button)findViewById(R.id.go2);

btnBack.setOnClickListener(new View.OnClickListener(){

public void onClick(View v){

helloTwo.this.setContentView(https://www.doczj.com/doc/d15558702.html,yout.main);

helloTwo.this.setViewOneCommand();

}

});

}

34.最后,我们需要在onCreate的时候,也就是启动后的main界面上设置一下按钮事件处理器。新的onCreate方法

如下:

35.public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setTheme(android.R.style.Theme_Dark);

setContentView(https://www.doczj.com/doc/d15558702.html,yout.main);

setViewOneCommand();

38.Android中提供一个叫Intent的类来实现屏幕之间的跳转,按文档的说法,似乎他们也建议采用这种方法,Intent

的用法比较复杂,现在我先看看它最简单的用法。

39.先在应用中增加两个Activity,这需要修改AndroidManifest.xml文件了,如下:

40.

package="cn.sharetop.android.hello.three">

41.很简单,就是加一个标签而已,新标签的class是.HelloThreeB,显示的应用标题与前一个Activity一样而已,

然后第二步就是修改一个HelloThree类的实现,在onCreate方法中绑定按钮的事件处理器:

42.public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setTheme(android.R.style.Theme_Dark);

setContentView(https://www.doczj.com/doc/d15558702.html,yout.main);

setViewOneCommand();

}

public void setViewOneCommand()

{

Button btn = (Button)findViewById(R.id.go);

btn.setOnClickListener(new View.OnClickListener()

{

public void onClick(View v)

{

Intent intent = new Intent();

intent.setClass(HelloThree.this, HelloThreeB.class);

startActivity(intent);

finish();

}

});

Button btnExit=(Button)findViewById(R.id.exit);

btnExit.setOnClickListener(new View.OnClickListener(){

public void onClick(View v){

HelloThree.this.finish();

}

});

}

43.这里的跳转功能用Intent来操作,它的最简单用法就是用函数setClass()设置跳转前后两个Activity类的实例,

样就可以简单地实现在两个Activity界面中来回切换的功能了。

45.如果我想在两个Activity之间进行数据交换,怎么办?

46.前例中的startActivity()只有一个参数,如果需要向新打开的Activity传递参数,我们得换一个函数了, Android

提供了startSubActivity(Intent,int)这个函数来实现这个功能。

47.函数原型为: public void startSubActivity(Intent intent, int requestCode)

48.这里的requestCode用来标识某一个调用,一般由我们定义一个常量。

49.如何把参数传过去呢?Intent类在提供setClass()函数的同时也提供了一个setData()函数。

50.函数原型为:public Intent setData(ContentURI data)

51.参数类型是ContentURI,它的详细内容下回再分析,现在就把它当成一个String类型来用吧。

52.参数带到新的Activity后,同样用Activity.getIntent()函数可以得到当前过来的Intent对象,然后用getData()

就取到参数了。

53.把参数带回来的方法是Activity.setResult(),它有几个形式,现在先看最简单的一个吧。

54.函数原型是:public final void setResult(int resultCode, String data)

55.resultCode是返回代码,同样用来标识一个返回类型,而data则是它要返回的参数。

56.在原来的Activity中的事件处理回调函数onActivityResult,会被系统调用,从它的参数里可以得到返回值。

57.函数原型为:protected void onActivityResult(int requestCode, int resultCode,String data, Bundle extras)

58.这里的requestCode就是前面启动新Activity时的带过去的requestCode,而resultCode则关联上了setResult

中的resultCode,data是参数,extras也是一个很重要的东西,后面再研究一下它的作用。

59.下面,我们来看一下代码吧,先看看HelloThree中的代码:

60.public void setViewOneCommand()

{

Button btn = (Button)findViewById(R.id.go);

btn.setOnClickListener(new View.OnClickListener()

{

public void onClick(View v)

{

try

{

Intent intent = new Intent();

intent.setClass(HelloThree.this, HelloThreeB.class);

intent.setData(new ContentURI("One"));

startSubActivity(intent,REQUEST_TYPE_A);

}

catch(Exception ex){}

}

});

Button btnExit=(Button)findViewById(R.id.exit);

btnExit.setOnClickListener(new View.OnClickListener(){

public void onClick(View v){

HelloThree.this.finish();

}

});

}

protected void onActivityResult(int requestCode, int resultCode,

String data, Bundle extras)

{

TextView txt = (TextView)findViewById(R.id.txt);

txt.setText(data);

}

}

}

61.这里的REQUEST_TYPE_A是我们定义的一个常量。在onActivityResult中用它与RESULT_OK一起作为条件判断如何

处理返回值,这里只是简单将TextView显示值换成传来的字串。

62.再来看看另一个HelloThreeB类的实现代码:

63.private Intent i;

protected void onCreate(Bundle icicle) {

super.onCreate(icicle);

setContentView(https://www.doczj.com/doc/d15558702.html,yout.second);

i = getIntent();

android.util.Log.v(TAG,"onCreate");

Button btn = (Button)findViewById(R.id.go);

btn.setOnClickListener(new View.OnClickListener(){

public void onClick(View v){

String result=HelloThreeB.this.i.getData().toString()+" And Two";

HelloThreeB.this.setResult(RESULT_OK,result);

finish();

}

});

TextView v = (TextView)findViewById(R.id.txt);

v.setText("Param is "+i.getData().toString());

}

64.在按钮处理事件中,从Intent取出参数,处理一下再用setResult返回给前一个Activity即可。

65.编译运行即可。

66.来源:https://www.doczj.com/doc/d15558702.html,/Android/lumen/20977.html

67.Android学习笔记(3)-Activity的生命周期

68.注意到在Activity的API中有大量的onXXXX形式的函数定义,除了我们前面用到的onCreate以外,还有onStart,

onStop以及onPause等等。从字面上看,它们是一些事件回调,那么次序又是如何的呢?其实这种事情,自己做个实验最明白不过了。在做这个实验之前,我们先得找到在Android中的Log是如何输出的。

69.显然,我们要用的是android.util.log类,这个类相当的简单易用,因为它提供的全是一些静态方法:

70.Log.v(String tag, String msg); //VERBOSE

Log.d(String tag, String msg); //DEBUG

Log.i(String tag, String msg); //INFO

Log.w(String tag, String msg); //WARN

Log.e(String tag, String msg); //ERROR

71.前面的tag是由我们定义的一个标识,一般可以用“类名_方法名“来定义。

72.输出的LOG信息,如果用Eclipse+ADT开发,在LogCat中就可以看到,否则用adb logcat也行,不过我是从来都

依赖于IDE环境的。

73.好了,现在我们修改前面的HelloThree代码:

Log.v(TAG,"onStart");

}

public void onStop()

{

super.onStop();

Log.v(TAG,"onStop");

}

public void onResume()

{

super.onResume();

Log.v(TAG,"onResume");

}

public void onRestart()

{

super.onRestart();

Log.v(TAG,"onReStart");

}

public void onPause()

{

super.onPause();

Log.v(TAG,"onPause");

}

public void onDestroy()

{

super.onDestroy();

Log.v(TAG,"onDestroy");

}

public void onFreeze(Bundle outState)

{

super.onFreeze(outState);

Log.v(TAG,"onFreeze");

}

75.在HelloThreeB中也同样增加这样的代码,编译,运行一下,从logcat中分析输出的日志。

在启动第一个界面Activity One时,它的次序是:

76.onCreate (ONE) - onStart (ONE) - onResume(ONE)

虽然是第一次启动,也要走一遍这个resume事件。然后,我们点goto跳到第二个Activity Two中(前一个没有关闭),这时走的次序是:

77.onFreeze(ONE) - onPause(ONE) - onCreate(TWO) - onStart(TWO) - onResume(TWO) - onStop(ONE)

78.说明,第二个Activity Two在启动前,One会经历一个:冻结、暂停的过程,在启动Two后,One才会被停止?

79.然后,我们再点back回到第一个界面,这时走的次序是:

80.onPause(TWO) - onActivityResult(ONE) - onStart(ONE) - onRestart(ONE) - onResume(ONE) - onStop(TWO) -

onDestroy(TWO)

81.说明,返回时,Two没有经历冻结就直接暂停了,在One接收参数,重启后,Two就停止并被销毁了。

82.最后,我们点一下Exit退出应用,它的次序是:

83.onPause(ONE) - onStop(ONE) - onDestroy(ONE)

84.说明如果我们用了finish的话,不会有freeze,但是仍会经历pause - stop才被销毁。

85.下面不跑例子了,看看文档吧。

1.Android用Activity Stack来管理多个Activity,所以呢,同一时刻只会有最顶上的那个Activity是处于

active或者running状态。其它的Activity都被压在下面了。

2.如果非活动的Activity仍是可见的(即如果上面压着的是一个非全屏的Activity或透明的Activity),它

是处于paused状态的。在系统内存不足的情况下,paused状态的Activity是有可被系统杀掉的。只是不明白,如果它被干掉了,界面上的显示又会变成什么模样?看来下回有必要研究一下这种情况了。

3.几个事件的配对可以比较清楚地理解它们的关系。Create与Destroy配成一对,叫entrie lifetime,在创建时

分配资源,则在销毁时释放资源;往上一点还有Start与Stop一对,叫visible lifetime,表达的是可见与非可见这么一个过程;最顶上的就是Resume和Pause这一对了,叫foreground lifetime,表达的了是否处于激活状态的过程。

3.因此,我们实现的Activity派生类,要重载两个重要的方法:onCreate()进行初始化操作,onPause()保存当

前操作的结果。

86.除了Activity Lifecycle以外,Android还有一个Process Lifecycle的说明:

87.在内存不足的时候,Android是会主动清理门户的,那它又是如何判断哪个process是可以清掉的呢?文档中也提

到了它的重要性排序:

1.最容易被清掉的是empty process,空进程是指那些没有Activity与之绑定,也没有任何应用程序组件(如

Services或者IntentReceiver)与之绑定的进程,也就是说在这个process中没有任何activity或者service 之类的东西,它们仅仅是作为一个cache,在启动新的Activity时可以提高速度。它们是会被优先清掉的。因此建议,我们的后台操作,最好是作成Service的形式,也就是说应该在Activity中启动一个Service去执行这些操作。

2.接下来就是background activity了,也就是被stop掉了那些activity所处的process,那些不可见的

Activity被清掉的确是安全的,系统维持着一个LRU列表,多个处于background的activity都在这里面,系统可以根据LRU列表判断哪些activity是可以被清掉的,以及其中哪一个应该是最先被清掉。不过,文档中提到在这个已被清掉的Activity又被重新创建的时候,它的onCreate会被调用,参数就是onFreeze时的那个Bundle。

不过这里有一点不明白的是,难道这个Activity被killed时,Android会帮它保留着这个Bundle吗?

3.然后就轮到service process了,这是一个与Service绑定的进程,由startService方法启动。虽然它们不

为用户所见,但一般是在处理一些长时间的操作(例如MP3的播放),系统会保护它,除非真的没有内存可用了。

4.接着又轮到那些visible activity了,或者说visible process。前面也谈到这个情况,被Paused的Activity

也是有可能会被系统清掉,不过相对来说,它已经是处于一个比较安全的位置了。

5.最安全应该就是那个foreground activity了,不到迫不得已它是不会被清掉的。这种process不仅包括resume

之后的activity,也包括那些onReceiveIntent之后的IntentReceiver实例。

88.在Android Application的生命周期的讨论中,文档也提到了一些需要注意的事项:因为Android应用程序的生存

期并不是由应用本身直接控制的,而是由Android系统平台进行管理的,所以,对于我们开发者而言,需要了解不同的组件Activity、Service和IntentReceiver的生命,切记的是:如果组件的选择不当,很有可能系统会杀掉一个正在进行重要工作的进程。

89.来源:https://www.doczj.com/doc/d15558702.html,/Android/lumen/20978.html

90.Android学习笔记(4)-学习Intent的使用

91.刚看到Intent的时候,我的确有点困惑:从字面上来说,它表示一种意图和目的;从使用上看,它似乎总是用于

Activity之间的切换;而从它所在包android.content来看,它似乎与内容有关。所以,我想或许可以这样理解它: Intent类绑定一次操作,它负责携带这次操作所需要的数据以及操作的类型等。

92.如果是这样的话,是否可以将它与事件处理联想起来?即一个Intent类似于一个Event。从Intent的两个最重要

的成员操作类型(Action)和数据(Data)来看,似乎是有道理的。文档中说,Intent的Action的取值主要是一些定义好了的常量,例如PICK_ACTION,VIEW_ACTION,EDIT_ACTION之类的,而Data则是一个ContentURI类型的变量,这一点,我们前面提到过。

93.而且文档中说Intent分为两大类,显性的(Explicit )和隐性的(Implicit)。在前面的例子中,我们在两个

Activity之间跳转时初步使用了Intent类,当时是用setClass来设置 Intent的发起方与接收方,它被称为显性

1.种类(category),比如我们常见的 LAUNCHER_CATEGORY 就是表示这是一类应用程序。

2.类型(type),在前面的例子中没用过,表示数据的类型,这是隐性Intent定位目标的重要依据。

3.组件(component),前面的例子中用的是setClass,不过也可以用setComponent来设置intent跳转的前后

两个类实例。

4.附加数据(extras),在ContentURI之外还可以附加一些信息,它是Bundle类型的对象。

Implicit Intent的使用相对有点麻烦,我们来做一个例子。首先,我们需要增加一个类:HelloThreeProvider,它必须实现于ConentProvider接口,所以代码如下:

95.public class HelloThreeProvider extends ContentProvider {

public boolean onCreate() {

return true;

}

public int delete(ContentURI url, String where, String[] whereArgs) {

return 0;

}

public ContentURI insert(ContentURI url, ContentValues initialValues){

return url;

}

public Cursor query(ContentURI url, String[] projection, String selection,

String[] selectionArgs, String groupBy, String having, String sort) {

return null;

}

96.public int update(ContentURI url, ContentValues values, String where, String[] whereArgs) {

return 0;

}

public String getType(ContentURI url) {

return "vnd.sharetop.hello.three/vnd.hello.three";

}

97.}

98.这里面有一堆方法要实现,因为它们都是ContentProvider中的abstract方法,但是今天的例子中它们多半没有

什么用处,只是一个getType方法我们让它不管什么url都返回一个表示Intent所携带的数据类型是我们定义的一个长字串:vnd.sharetop.hello.three/vnd.hello.three。

然后,在AndroidMenifest.xml中我们将上面这个HelloThreeProvider类加入应用程序:

99.

100.相对于前面的例子,主要修改了HelloThreeB的配置,包括增加了一个标签表示这是一个一般性的activity而已。增加了标签,定义它负责处理VIEW_ACTION类型的操作。增加了标签给出一个数据类型的定义串vnd.sharetop.hello.three/vnd.hello.three。最主要的是在下增加的那个标签,有个authorities属性,我们给的值是cn.sharetop.android.hello,待一会我们再说它的用处。101.最后就是修改以前的跳转代码如下:

102.Intent intent = new Intent();

intent.setData(new ContentURI("content://cn.sharetop.android.hello/one"));

intent.setAction(intent.VIEW_ACTION);

startActivity(intent);

103.现在我们的setData里的东西可与以前不一样的,是吧?注意到它的格式了吗?content://是个协议头,固定这样写就行了。然后就是那个authorities中定义的串了,再后面就是我们自定义的东西了,我这里很简单的写个one,其它还可以更长一点,如one/101之类的。它负责去关联上那个provider类。另外,增加了setAction 的调用设置操作为VIEW_ACTION,与Menifest中的又挂上了。Android平台负责根据Intent的Data信息中的authorities,找到ContentProvider,然后getType,用type和intent中的Action两个信息,再找到可以处理这个intent的消费者。

104.OK,编译运行。

105.其实,如果是在一个应用内部,这种隐性的intent实在有点别扭,个人觉得,这种松藕合的实现方法,只适用于那些较大的系统或者多个不同的应用之间的调用,可手机上又有什么“较大”的系统呢?无非是可以与不同来源的多个应用之间方便地互操作而已,那么会是什么样的场景呢?比如,给QQ好友发送gmail邮件,用GoogleMap 查找QQ好友所在的位置?看上去挺不错的。

106.关于这个ContentProvider,其实还有话说,它主要是的那些看似数据库操作的方法我们都没真正去实现呢。

不过今天就到这里了,等下回再去研究吧。

107.来源:https://www.doczj.com/doc/d15558702.html,/Android/lumen/20979.html

108.Android学习笔记(5)-关于ListActivity的简单体验

109.今天学习点轻松的内容吧,看看android.app包里的几个类。首先是这个在平台自的例子中被广泛使用的ListActivity。这个类其实就是一个含有一个ListView组件的Activity类。也就是说,如果我们直接在一个普通的Activity中自己加一个ListView也是完全可以取代这个ListActivity的,只是它更方便而已,方便到什么程度呢?来做个例子瞧瞧。

110.public class HelloTwoB extends ListActivity...{

public void onCreate(Bundle icicle) ...{

super.onCreate(icicle);

setTheme(android.R.style.Theme_Dark);

setContentView(https://www.doczj.com/doc/d15558702.html,yout.mainb);

List items = fillArray();

ArrayAdapter adapter = new ArrayAdapter(this,https://www.doczj.com/doc/d15558702.html,yout.list_row,items);

this.setListAdapter(adapter);

}

private List fillArray() ...{

List items = new ArrayList();

items.add("日曜日");

items.add("月曜日");

items.add("金曜日");

items.add("土曜日");

return items;

}

@Override

protected void onListItemClick(ListView l, View v, int position, long id)

...{

TextView txt = (TextView)this.findViewById(R.id.text);

txt.setText("あすは "+l.getSelectedItem().toString()+"です。");

}

}

111.的确可以简单到只需准备一个List对象并借助Adapter就可以构造出一个列表。重载onListItemClick方法可以响应选择事件,利用第一个参数可以访问到这个ListView实例以得到选中的条目信息。这里有一点要说明的,就是如果更简单的话,其实连那个setContentView都可以不要了,Android也会自动帮我们构造出一个全屏的列表。但是本例中我们需要一个TextView来显示选中的条目,所以我们需要一个layout.mainb描述一下这个列表窗口。

112.

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text=""

/>

android:layout_width="fill_parent"

android:layout_height="0dip"

android:layout_weight="1"

android:drawSelectorOnTop="false"

/>

113.这里需要注意的是那个ListView的ID,是系统自定义的android:list,不是我们随便取的,否则系统会说找不到它想要的listview了。然后,在这个listview之外,我们又增加了一个TextView,用来显示选中的条目。114.再来说说这里用到的ArrayAdapter,它的构造函数中第二个参数是一个资源ID,ArrayAdapter的API文档中说是要求用一个包含TextView的layout文件,平台用它来显示每个选择条目的样式,这里的取值是https://www.doczj.com/doc/d15558702.html,yout.list_row,所以,我们还有一个list_row.xml文件来描述这个布局,相当简单。

115.

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

xmlns:android="https://www.doczj.com/doc/d15558702.html,/apk/res/android"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

116.从ArrayAdapter上溯到BaseAdapter,发现还有几个同源的Adapter也应该可以使用,象SimpleAdapter和CursorAdapter,还是做个例子来实验一下吧。

117.先看看SimpleAdapter,说是simple却不simple。

118.首先看看这个fillMaps方法,基本上就明白这个simpleAdapter是怎么回事了,在有些场合它还是挺有用的,可以为每个条目绑定一个值:

119.private List> fillMaps()

...{

List> items = new ArrayList>();

HashMap i = new HashMap();

i.put("name","日曜日");

i.put("key", "SUN");

items.add(i);

HashMap i1 = new HashMap();

i1.put("name","月曜日");

i1.put("key", "MON");

items.add(i1);

HashMap i2 = new HashMap();

i2.put("name","火曜日");

i2.put("key", "TUE");

items.add(i2);

HashMap i3 = new HashMap();

i3.put("name","水曜日");

i3.put("key", "WED");

items.add(i3);

HashMap i4= new HashMap();

i4.put("name","木曜日");

i4.put("key", "THU");

items.add(i4);

HashMap i5 = new HashMap();

i5.put("name","金曜日");

i5.put("key", "FRI");

items.add(i5);

HashMap i6 = new HashMap();

i6.put("name","土曜日");

i.put("key", "SAT");

items.add(i6);

return items;

}

120.然后,在HelloTwoB中的onCreate函数中,修改代码,有几个不同:items的元素是HashMap实例,这是一

121.//SimpleAdapter demo

List> items = fillMaps();

SimpleAdapter adapter=new SimpleAdapter(this,items,https://www.doczj.com/doc/d15558702.html,yout.list_row,new String[]{"name"},new int[] {R.id.item});

122.编译跑一下可以看到结果了,是吧?只是显示的文字不太对,再改一下:

123.protected void onListItemClick(ListView l, View v, int position, long id)

{

TextView txt = (TextView)this.findViewById(R.id.text);

txt.setText("あすは "+((HashMap)l.obtainItem(position)).get("key").toString()+"です。");

}

124.这样就好多了,其实一般情况下我们都是用ListView中的obtainItem取得当前选中的条目,然后转成List 中的对应类型来使用的。

125.上面的例子中只显示name对应的值,其实你也可以试一下这样:

126.

SimpleAdapter adapter=new SimpleAdapter(this,items,https://www.doczj.com/doc/d15558702.html,yout.list_row,new String[]{"name","key"},new int[]{R.id.item,R.id.item2});

127.看看是什么效果。

128.再看看那个CursorAdapter吧,它的列表中元素要求是Cursor,这东西与DB有关,不过最简单的DB就是通讯簿。先从Contacts.People入手吧,同样修改代码:

129.//CursorAdapter demo

130.Cursor mCursor = this.getContentResolver().query(Contacts.People.CONTENT_URI, null, null, null , null);

SimpleCursorAdapter adapter=new SimpleCursorAdapter(this,https://www.doczj.com/doc/d15558702.html,yout.list_row,mCursor,new String[]{Con https://www.doczj.com/doc/d15558702.html,},new int[]{R.id.item});

131.因为单纯的CursorAdapter是抽象类,所以我用的是它的子类SimpleCursorAdapter,很好理解,先用ContentResolver查询通讯簿得到一个游标,然后告诉SimpleCursorAdapter要用其中的https://www.doczj.com/doc/d15558702.html,作为显示项来构造出一个adapter即可。

132.现在的onListItemClick也不一样了,如下:

133.protected void onListItemClick(ListView l, View v, int position, long id) {

TextView txt = (TextView)this.findViewById(R.id.text);

Cursor c = (Cursor)l.obtainItem(position);

txt.setText("SEL = "+c.getString(c.getColumnIndex(Contacts.People.NUMBER)));

}

134.这里同样是先用obtainItem取到游标,然后用从记录中取出想要的字段显示即可。在做这个例子时,因为权限的问题我们还得修改一下AndroidManifest.xml文件,让我们的应用可以访问到通讯簿:

135.

package="cn.sharetop.android.hello.two">

... ...

136.来源:https://www.doczj.com/doc/d15558702.html,/Android/lumen/20980.html

137.Android学习笔记(6)—关于Dialog的简单体验

138.继续android.app中的几个类的学习,今天的内容是那几个Dialog的体验。

141.首先是DatePickerDialog类,修改代码如下:

142.public class HelloTwoC extends Activity implements OnClickListener, OnDateSetListener {

public HelloTwoC() {

super();

}

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setTheme(android.R.style.Theme_Dark);

setContentView(https://www.doczj.com/doc/d15558702.html,yout.mainc);

Button btn = (Button)findViewById(R.id.date);

btn.setOnClickListener(this);

}

@Override

public void onClick(View v) {

Calendar d = Calendar.getInstance(Locale.CHINA);

d.setTime(new Date());

DatePickerDialog dlg=new DatePickerDialog(this,this,d.get(Calendar.YEAR),d.get(Calendar.MONTH),

d.get(Calendar.DAY_OF_MONTH),d.get(Calendar.DAY_OF_WEEK));

dlg.show();

}

@Override

public void dateSet(DatePicker dp, int y, int m, int d) {

TextView txt = (TextView)findViewById(R.id.text);

txt.setText(Integer.toString(y)+"-"+Integer.toString(m)+"-"+Integer.toString(d));

}

}

143.很简单的,无非是需要一个OnDateSetListener接口的实现而已,在它里面的dateSet方法中就可以得到选择的日期了。而TimePickerDialog与DatePickerDialog使用如出一辙,就不多说了。

144.看看另一个ProgressDialog的用法吧,这个类与AlertDialog一样包含了多个static的方法,所以使用起来是非常方便的。比如说,如果我们需要用它来表示一个长时间的操作,很简单的用一句话就可以了:

145.ProgressDialog.show(this,null, "operation running...",true,true);

146.URL:https://www.doczj.com/doc/d15558702.html,/Android/lumen/20981.html

147.Android学习笔记(7)—关于Service和Notification的体验

148.大略地看了一下android.app下的Service类,觉得它与Activity非常相似,只是要注意几个地方:

1.生命周期,Service的从onCreate()->onStart(int,Bundle)->onDestroy()显得更为简单。但是它的onStart

是带参数的,第一个ID可用来标识这个service,第二个参数显示是用来传递数据的了。比较Activity,传递数据的Bundle是在onCreate就带进入的。

2.Service的启动由Context.startService开始,其实Activity或者Service都是Context的派生类。结束于

Context.stopService()或者它自己的stopSelf()。

3.Service还有一个与Activity不一样的是它可以由另一个Context去绑定一个已存在的Service。就是这个方

法Context.bindService(),被绑定的Service要求是已经onCreate了但可以没有onStart。在Service类中有个抽象方法getBinder()可以得到这个IBinder对象。关于这方面的细节,以后再看,这里只做个记录罢。

4.与Service有关的还有一个安全的问题,可以在AndroidManifest.xml中用标签来声明一

个Service的访问权限,关于Android的安全问题也留待以后再解决吧。

149.我一直相信一种水到渠成的学习方法,先从最简单的东西入手,就不会觉得学习很枯燥了。

152.

153.HelloTwoD.java的代码比较简单,如下:

154.public class HelloTwoD extends Activity implements OnClickListener

{

public HelloTwoD()

{

super();

}

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setTheme(android.R.style.Theme_Dark);

setContentView(https://www.doczj.com/doc/d15558702.html,yout.maind);

Button btn = (Button)findViewById(R.id.btnTest);

btn.setOnClickListener(this);

}

@Override

public void onClick(View arg0) {

// 用一个显式的Intent来启动服务

Intent i = new Intent();

i.setClass(this, HelloTwoDService.class);

//带上我的名字

Bundle b= new Bundle();

b.putString("name", "sharetop");

this.startService(i,b);

}

}

155.当然要启动这个HelloTwoD,也需要在我最初的那个HelloTwo中加一点代码(我就不罗嗦了)。再看看那个HelloTwoDService是如何实现的:

156.public class HelloTwoDService extends Service {

public Timer timer;

public final String TAG="HelloTwoDService_TAG";

public void onCreate() {

super.onCreate();

Log.d(TAG,"onCreate");

timer = new Timer(true);

157. }

@Override

public IBinder getBinder() {

// TODO Auto-generated method stub

{

//看看startId是什么内容

if(arg!=null)

Log.d(TAG,"onStart "+Integer.valueOf(startId).toString()+" from "+arg.getString("name"));

else

Log.d(TAG,"onStart with null Bundle");

timer.schedule(new TimerTask(){

public void run(){

//表示一下我的存在

Log.d(TAG,"say from a timer.");

//停掉自己这个服务

HelloTwoDService.this.stopSelf();

}

},5000);

}

public void onDestroy()

{

Log.d(TAG,"onDestroy");

}

}

158.这里我用一个定时器timer来延时5秒钟显示消息,否则立即就显示出来觉得不象一个后台服务了。用日志输出那个onStart中的startId看看,原来只是一个标识而已。

159.下面来个简单的NotificationManager吧,看了看API文档,觉得最简单地恐怕就是那个NotificationManager.notifyWithText()了,修改上面的run方法如下:

160. timer.schedule(new TimerTask(){

public void run(){

161. NotificationManager manager=(NotificationManager)getSystemService(NOTIFICATION_SERV ICE);

manager.notifyWithText(1001, "わたしはSHARETOPです。", NotificationManager.LENGTH_LON G, null);

162. HelloTwoDService.this.stopSelf();

}

},5000);

163.再试试看效果。太简单了,Notification主要是用于后台服务用来通知前台,所以,Android提供了三类不同的通知方式,notifyWithText可以简单地显示一个字串,而notifyWithView稍复杂点,可以有一个view来构造这个显示信息框,而最灵活的就是那个notify(int id, Notification notification)了,参数notification 是类Notification的实例。

164.修改一下刚才的那个run方法,如下:

165. timer.schedule(new TimerTask(){

public void run(){

NotificationManager manager=(NotificationManager)getSystemService(NOTIFICATION_SERVIC

E);

Notification nf = new Notification(R.drawable.icon,"这是信息的详细描述",null,"信息的标题",null);

}

},5000);

166.这里创建一个Notification的实例nf,构造函数的第一个参数是那个显示在状态栏(也就是Android手机上面的那一条显示信号强度、电池电量等信息的位置)的图标。后面可以有

167.一个标题和点击以后的详细信息,这是字串形式,还可以有一个Intent用来表示点击后可以发生一个跳转行为。

168.URL:https://www.doczj.com/doc/d15558702.html,/Android/lumen/20982.html

169.Android学习笔记(8) — GridView与ImageView

170.简单一点吧,就瞧瞧那个Grid的效果,Android提供了一个GridView,不过从APIDemo中看来,它似乎与PC 上的GRID差别还是挺大的,更像那个IconView的感觉。不知道Android中如何实现表格界面?虽然在移动终端上,表格一般不会有谁使用,大家似乎更倾向于使用ListView,而Android对于ListView则有更简单的实现ListActivity。

171.废话不说,还是自己写几句代码来实验一下。

172.

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:padding="10dip"

android:verticalSpacing="10"

android:horizontalSpacing="10"

android:numColumns="auto_fit"

android:columnWidth="60"

android:stretchMode="columnWidth"

android:gravity="center"

/>

173.从描述文件中的这些属性来看,与表格非常类似,除了padding和spacing以外,它还多了那个gravity,这里是center表示单元格中的内容居中放,在类GridView中也提供了方法setGravity(int)来实现这个效果。174.接着,我们沿用以前那个fillMaps方法来构造SimpleAdapter,以前将这个adapter赋给ListActivity,现在同样的Adapter,却是赋给了GridView,效果又会是怎样呢?

175.List> items = fillMaps();

176.GridView grd=(GridView)this.findViewById(R.id.grid);

SimpleAdapter adapter=new SimpleAdapter(this,items,https://www.doczj.com/doc/d15558702.html,yout.list_row,new String[]{"name"},new in t[]{R.id.item});

grd.setAdapter(adapter);

177.我觉得GridView并不象表格,倒更象IconView,下面试试用图像作为GridView的内容。现在,不能用简单Adapter了,得自己弄一个ImageAdapter,就让它衍生于BaseAdapter类吧。

178.public class ImageAdapter extends BaseAdapter {

//这是资源ID的数组

private Integer[] mThumbIds = {

R.drawable.a,R.drawable.b,R.drawable.c,

R.drawable.d,R.drawable.e,R.drawable.f,

R.drawable.g,R.drawable.h,R.drawable.i

};

179.public ImageAdapter(Context c) {

mContext = c;

}

180.public int getCount() {

181.public Object getItem(int position) {

return position;

}

182.public long getItemId(int position) {

return position;

}

183.public View getView(int position, View convertView, ViewGroup parent) {

ImageView i = new ImageView(mContext);

//设置图像源于资源ID。

i.setImageResource(mThumbIds[position]);

i.setAdjustViewBounds(true);

i.setBackground(android.R.drawable.picture_frame);

184.return i;

}

185.private Context mContext;

186. }

187.很简单,只要重载几个方法就可以了,关键是那个getView方法,它负责构建出每个单元格中的对象实例。

这里我们构造的是一个ImageView实例。

188.然后就是同样的将这个Adapter赋给GridView即可,大家可以看看效果,注意在做这个例子前,先放几个小图片到res/drawable目录下,buildproject一下就可以得到那个R.drawable.a了(这里的a是图像文件名,如

a.png)。

189.在getView方法中我们使用了ImageView类,这又是一个widget。除了上面用到的几个方法以外,还有以下几个方法值得注意:

190.与图像来源有关的方法,我们只用了资源文件的方式。

191.//不同的图像来源

public void setImageBitmap(Bitmap bm)

public void setImageDrawable(Drawable drawable)

public void setImageResource(int resid)

public void setImageURI(ContentURI uri)

192.图像效果的操作。

193.//颜色过滤

public void setColorFilter(int color, Mode mode)

//矩阵变换

public void setImageMatrix(Matrix matrix)

//透明度

public void setAlpha(int alpha)

194.具体的使用可以参考API,动手试一下就差不多了。

195.URL:https://www.doczj.com/doc/d15558702.html,/Android/lumen/20983.html

196.Android学习笔记(9)-开始做一个数独游戏[上]

197.不想再写Hello123了,今天开始做一个数独小游戏,因为这个游戏比较简单应该容易上手,就作为我学习Android之后的第一个程序比较合适。

198.初步的设计是只有一个界面(如下图),然后用绿色字体表示题目中有的固定的数字,黄色字体显示玩家输入的数字,而红色字体则是程序判断输入错误后的显示。另外模式分为三种:普通写入、标记(玩家用蓝色小方块标记当前单元格可以输入的数字)、排除模式(玩家指定数字,游戏自动判断一下这个数字肯定不能输入的单元格,将它反相显示出来)。

199.准备工作就是做一张背景图(棋盘)和三套数字小图片(红、绿、黄)即可。

1、MainActivity,主体类,负责处理键盘事件和维护一个题库。

2、MainView,显示类,负责维护并显示当前棋局,它的核心在于它的onDraw函数。

3、GridCell和Question两个实体类,分别描述了棋盘单元格的信息和题目信息。

4、Helper类,助手类,封装一些函数,如读写记录、自动解题函数等。

201.在MainActivity中的onCreate中,加几句话就可以让游戏全屏显示了。如下:

202.setTheme(android.R.style.Theme_Dark);

requestWindowFeature(Window.FEATURE_NO_TITLE);

203.getWindow().setFlags(https://www.doczj.com/doc/d15558702.html,youtParams.NO_STATUS_BAR_FLAG,https://www.doczj.com/doc/d15558702.html,youtParams.

NO_STATUS_BAR_FLAG);

204.主要来看看MainView类的代码吧,它的onDraw负责显示当前棋局,涉及到的API主要是android.graphics 中的Canvas和Paint。

205.一是显示图片的方法,因为图片来源于资源,所以显示它的代码如:

206.Bitmap bmp = BitmapFactory.decodeResource(this.getResources(),R.drawable.grid);

canvas.drawBitmap(bmp, 0, 0, null);

207.这是显示背景,如果是数字呢,如何将数字1与R.drawable.a1资源关联呢?

208.private int[] thumbNormal=new int[]{0,

R.drawable.a1,R.drawable.a2,R.drawable.a3,R.drawable.a4,R.drawable.a5,

R.drawable.a6,R.drawable.a7,R.drawable.a8,R.drawable.a9

};

209.然后就简单地加载即可了。

210.

Bitmap b = BitmapFactory.decodeResource(this.getResources(),this.thumbNormal[this.grid[i].value]);

canvas.drawBitmap(b, xx, yy, null);

211.二是显示文本的方法,刚才显示图像的drawBitmap中最后一个参数直接给了null,因为我们实在没有什么效果需要给图像的,但是文本则不同,我们用Paint来控制文本的样式。

212.Paint paintText=new Paint();

paintText.setFlags(Paint.ANTI_ALIAS_FLAG);

paintText.setColor(Color.WHITE);

... ...

canvas.drawText(Long.toString(this.ti.code), xx, yy, paintText);

213.三是画一下框的方法,同样是用Paint来做的。

214.Paint paintRect = new Paint();

paintRect.setColor(Color.RED);

paintRect.setStrokeWidth(2);

paintRect.setStyle(Style.STROKE);

Rect r=new Rect();

r.left=this.curCol*CELL_WIDTH+GRID_X;

r.top=this.curRow*CELL_WIDTH+GRID_Y;

r.bottom=r.top+CELL_WIDTH;

r.right=r.left+CELL_WIDTH;

canvas.drawRect(r, paintRect);

215.如果不setStyle为Style.STROKE,则缺省为填充模式。

216.四是反相显示的方法,更简单了,就是一句话了:

217.Paint paintHint=new Paint();

“感动十大道德模范人物”感人事迹

久病床前有孝子 ----感动华煤十大道德模范人物刘佩德感人事迹 敬老养老是中华民族传统美德,时代在发展,孝子也被赋予了新的内涵,但孝子身上彰显的美德却是恒古不变的,东峡煤矿机电队职工刘佩德,几年如一日照顾偏瘫卧床的父母如一日的事迹感动了很多人。刘佩德也身患残疾,双髋股骨头坏死,行动困难,却是这样一个不良于行的人,却把大孝放在第一位,用自己的实际行动书写了一段久病床前无孝子的佳话。 刘佩德,男,今年48岁,现为华煤集团东峡煤矿机电队的职工,在他得病前,刘佩德有一个令人羡慕的家庭:父母身体健康,妻子勤劳温柔,儿子上中学,刘佩德为人勤劳肯干,拥有一颗热心肠,不仅通过自己的双手把日子过得有滋有味,对同事邻居也是有啥忙能帮就帮,在矿区拥有良好的口碑,随着矿区重组合并,效益越来越好,这个和美的家庭更是充满了欢声笑语,浓浓亲情。 对于当时的生活刘佩德已经很满足了,他最大的心愿就是能让两位老人幸福地安度晚年。为了让两位老人过的舒心,在平时生活中,刘佩德确实做到了百善孝为先,侍奉父母体贴入微,精心照顾父亲母亲的饮食起居,并每天抽时间陪老人聊天、散步。矿区里有什么活动,只要老人愿意去看,刘佩德就会想方设法满足老人的心愿。刘佩德知道二老喜爱戏曲,只要有买的他都会买回家,早些年用的录音机,家里的戏曲磁带放了一抽屉,现在是随身听,DVD播放机给父母欣赏解闷。闲暇时,一家人会聚在老人的身旁拉家常、聊天,听老人唠叨,逗老人开心。可是天有不测风云人有旦夕祸福, 2006年正月这个本来喜庆的日子,刘佩德73岁的老母亲却半夜突发脑梗塞,连夜紧急送往了县医院。在他母亲住院的20多天里,他是夜以继日地守在老人的病床前,为老人喂药、喂饭、洗衣擦身、接屎倒尿,毫无怨言。经过医护人员的精心救治,刘佩德的母亲虽然保住了性命,但却留下了严重的后遗症,半边身体无法移动,大小便无知觉,瘫痪在床。刘佩德的父亲因为承受不了这样的打击,紧接着也病倒了。两位身体本来还算硬朗的老人,现在是一个偏瘫在床,一个住院接受治疗,面对这突如其来的变故,刘佩德硬是忍住泪水,挺起臂膀,义不容辞地扛起侍候两位老人的重担。自从把母亲接回家后,刘佩德就开始了两头奔走的日子。他白天照顾住院的父亲,老婆照顾母亲;晚上联系家门亲戚帮忙看护父亲,又马不停蹄的赶回家陪护母亲。这样的来回奔波,短短时间内,刘佩德瘦了十几斤,大腿根也越来越疼,每天奔走让他腿部的疼痛越来越严重,有时走路都困难,刘佩德以为是最近太劳累的缘故,也就没往心去,父亲看着日渐消瘦的儿子,想起自己和老伴给家庭带来这么多不便,情绪低落,总是自我埋怨:老了,给你们添麻烦了......怎么不早点死呢?。刘佩德听了这话,心里难受极了,一边忍受着疼痛的身体,却还要耐心地安慰老人,说爸,没事,等你和妈的病好了以后,咱家会和以前一样,到时候我带着您二老去**山逛逛.为了给两位老人治病,刘佩德瞒着老人买了昂贵的药品,怕老人心疼钱,总说药便宜,说是打折买的。刘佩德父母和他自己的巨额药费常常让他们入不敷出,刘佩德的爱人甚至把她结婚时买的金项链和金戒指卖了支付药费,并安慰刘佩

android studio 控件常用属性

android studio 控件常用属性 下面是RelativeLayout各个属性 1.android:layout_above="@id/xxx" --将控件置于给定ID控件之上 2.android:layout_below="@id/xxx" --将控件置于给定ID控件之下 3. android:layout_toLeftOf="@id/xxx" --将控件的右边缘和给定ID控件的左边缘对齐 4.android:layout_toRightOf="@id/xxx" --将控件的左边缘和给定ID控件的右边缘对齐 5. android:layout_alignLeft="@id/xxx" --将控件的左边缘和给定ID控件的左边缘对齐 6.android:layout_alignTop="@id/xxx" --将控件的上边缘和给定ID控件的上边缘对齐 7.android:layout_alignRight="@id/xxx" --将控件的右边缘和给定ID控件的右边缘对齐 8.android:layout_alignBottom="@id/xxx" --将控件的底边缘和给定ID控件的底边缘对齐 9.android:layout_alignParentLeft="true" --将控件的左边缘和父控件的左边缘对齐 10. android:layout_alignParentTop="true" --将控件的上边缘和父控件的上边缘对齐 11. android:layout_alignParentRight="true" --将控件的右边缘和父控件的右边缘对齐 12.android:layout_alignParentBottom="true" --将控件的底边缘和父控件的底边缘对齐 13.android:layout_centerInParent="true" --将控件置于父控件的中心位置 14.android:layout_centerHorizontal="true" --将控件置于水平方向的中心位置 15.android:layout_centerVertical="true" --将控件置于垂直方向的中心位置 android:layout_width 设置组件的宽度 android:layout_height 设置组件的高度 android:id 给组件定义一个id值,供后期使用 android:background 设置组件的背景颜色或背景图片 android:text 设置组件的显示文字 android:textColor 设置组件的显示文字的颜色 android:layout_below 组件在参考组件的下面 android:alignTop 同指定组件的顶平行

windowsXP下Android安卓开发环境搭建详细教程及图解

注:本教程是讲解在Windows XP下搭建安卓开发环境的。 安装目录: 步骤1 安装JDK 步骤2 安装Android SDK 步骤3 安装Tomcat 步骤4 安装Ant 步骤5 安装Eclipse 步骤6 安装Eclipse的ADT插件 步骤7 在图形界面下管理AVD 步骤8 设置Android系统语言 本教程的软件可以从我博客“绿杨芳草”下载。 方法/步骤 1、安装JDK 运行安装程序【jdk-6u22-windows-i586-p.exe】,分别点击下一步进行安装。 在安装过程中先后会出现两次选择安装目录的界面,全部改为以下路径: jdk安装目录:C:\Java\jdk1.6.0_22 jre安装目录:C:\Java\jre6\

安装好之后,配置环境变量: 打开环境变量窗口方法:右键【我的电脑】--单击【属性】--单击【高级】--单击【环境变量】。 在上方的用户变量中依次新建如下变量,并分别填入如下路径: 变量名:JAVA_HOME 变量值:C:\Java\jdk1.6.0_22 变量名:PATH 变量值:%JAVA_HOME%/bin 变量名:CLASSPATH 变量值:.;%JAVA_HOME%/lib/tools.jar;%JAVA_HOME%/lib/dt.jar 图1 配置完成之后,分别点击【开始】--【运行】--输入【cmd】--输入【javac】--按【回车键】,若看到以下信息,则代表配置成功。

图2 2、安装Android SDK 将【android-sdk_r17-windows.zip】解压到E:\Android目录下(Android目录自己新建,以后所有关于Android开发相关软件都会统一放到该目录中),得到一个android-sdk-windows 文件夹,该文件夹包含如下文件结构: add-ons:该目录下存放额外的附件软件。刚解压后,该目录为空。 platforms:该目录下存放不同版本的Android版本。刚解压后,该目录为空。 tools:该目录下存放了大量Android开发、调试的工具。 SDK Manager.exe:该程序就是Android SDK和AVD(Android虚拟设备)管理器。 通过该工具可以管理Android SDK和AVD。 运行E:\Android\android-sdk-windows目录下的【SDK Manager.exe】 然后等待更新...(该步骤必须联网,因为SDK安装包需要在线获取)。 在更新的过程中若遇到如下的提示窗口:

Android应用程序开发个人总结

Android应用程序开发个人总结 Android应用程序开发个人总结范文 篇一:Android应用程序开发-个人总结 一、项目简介: 送祝福App是一款逢年过节为方便发送祝福信息的软件,并且介绍各种节日的相关情况。包含节日祝福短信,支持直接发送短信给好友,也可定时发送给好友,编写模版。为生活提供了便利。 二、个人在项目中承担的任务: 我是任务是整合成员负责的模块,把各个模块整合到一起,然后把主界面的效果做出来,主界面参考的是微信的界面 三、学习本门课程收获、体会及建议: 在本门课程中,我初步认识了安卓应用开发所需基本知识,比如安装体系结构,常用的控件以及API的使用方法,知道了安卓体系存储数据的方式。这一学期,安卓相关的知识自己掌握的不多,不过也透过安卓课程看到移动端应用的火热。这一个学期里,老师讲得比较细,自己单独下来练一个知识点了,也可以,不过当几个知识点的内容整合到一起,自己就凌乱了,自己的思路就不清晰。在期末项目中,我是任务是整合成员负责的模块,把各个模块整合到一起,然后把主界面的效果做出来,主界面参考的是微信的界面,由于时间和能力的限制,只完成了部分功能,功能没有完全实现。 篇二:Android程序员-201*年度个人工作总结和计划

逝者如斯夫,不舍昼夜!转眼间,自己在XX网里参加工作已经有一年有余了。回首即将逝去的201*年,可以说是平淡而不普通的一年,发现自己在各方面都比上一年有所进步、提高。一年的结束孕育着新一年的到来,新的一年意味着新的起点、新的挑战。昂首期待未来,总结以往经验。在新一年来临之际,我现把这一年的工作总结一下以及将新一年计划列一下。 大概3月份左右,XXXXApp第一期基本开发完成比较稳定的版本。在此之前,我主要负责参考XXXXApp的Android客户端的开发工作。XXXX第一期开发的难度系数相对比较低,开发起来还是相对的容易,所学到的基础知识基本上可以开发出来。我个人认为当时的开发效率还是比较低的,这里说的是整个项目的开发效率,不是个人负责工作的完成效率,换句话来说是团队的整体开发效率不高,没有达到高效。这个也许是团队协调与沟通交流还存在不足的地方。XXXXApp实际上基本可以满足用户的使用(表面),但是项目的代码管理(本质)比较杂乱、扩展性差、健壮性也不错、兼容性也不算好。这无疑导致开发的工作量大大的增加。产生这些问题的原因有团队的项目开发经验缺乏,有自己个人的开发水平有限、技能不足。简言之,我的专业技能还不够强。 在3月份之前,公司聘请了外包团队与我们的团队一起开发问答App。公司的目的培训公司的团队,让我们学习外包团队的技能。在外包团队的参与和指导下问答App开发工作相当顺利,团队的分工清晰、交流充分、协调都比较好。问答App的工作接近尾声,意味着XXX

Android应用开发基础习题集

任务一 Android开发环境的搭建 第一部分知识回顾与思考 1.Android的四层架构分别包括哪几层分别起到什么作用 答:Linux内核层(Linux Kernel):基于Linux内核,内核为上层系统提供了系统服务。 系统库层(Libraries):系统库基于C/C++语言实现,通过接口向应用程序框架层提供编程接口。 应用框架层(Application Framework):为开发者提供了一系列的Java API,包括图形用户界面组件View、SQLite数据库相关的API、Service组件等。 应用程序层(Applications):包含了Android平台中各式各样的应用程序。 第二部分职业能力训练 一、单项选择题(下列答案中有一项是正确的,将正确答案填入括号内) 1.Android四层架构中,应用框架层使用的是什么语法( C ) A.C B.C++ C.Java D.Android 2.Android四层架构中,系统库层使用的是什么语法( B ) A.VB B.C /C++ C.Java D.Android 3.应用程序员编写的Android应用程序,主要是调用( B )提供的接口进行实现。 A.应用程序层 B.应用框架层 C.应用视图层 D.系统库层 二、填空题(请在括号内填空) 1.在Android智能终端中,有很多应用如拍照软件、联系人管理软件,它们都属于Android的(应用程序)层。 2.为了让程序员更加方便的运行调试程序,Android提供了(模拟器),可以方便的将程序运行其上,而不要实际的移动终端。 3.为了支持Java程序运行,我们需要安装(JDK)。 三、简答题 1.简述Android开发环境安装的步骤。 答:下载并安装JDK,配置JDK的环境变量; 从Anroid官网上下载Android开发组件(包含Eclipse和Android SDK、ADT); 安装Android开发环境(包括配置Android SDK的环境变量、打开Eclipse通过菜单设定Android SDK 路径)。 2.简述Android应用程序创建和运行的步骤。 答:通过菜单创建Android应用程序,设置应用程序名、Android版本等基本信息。

Android常用控件

《Android基础应用》 Android常用控件 ?本章任务 ?使用Android开发使用时间组件 ?使用Android开发使用进度条组件 ?使用Android开发创建底部选项卡 ?本章目标 ?了解Android的组件层次结构 ?掌握常用的日期时间类控件 ?掌握常用的几个容器组件 1.Android组件的层次结构 UI组件都是View的子类,View有很多子类,它们之间存在树状的继承关系View及其子类结构图

TextView及其子类结构图

ViewGroup及其子类结构图 其下的子类一般作为容器或布局来使用 FrameLayout及其子类结构图 其下的子类通常作为容器或布局来使用

2.时间控件 2.1日期时间选择器 DatePicker组件可用于输入日期,TimePicker组件可用来选择时间,只能输入小时和分,默认12小时制 DatePicker ●使用onDateChangedListener监听器来获取用户的日期选择 ●使用init对组件进行初始化 ●使用getYear,getMonth,getDayOfMonth方法获得用户选择的年,月,日 TimePicker ●使用onTimeChangedListener监听器获取用户的时间选择 ●使用setIs24HourView设置是否以24小时制显示 ●使用getCurrentHour获得当前的小时数 ●使用getCurrentMinute获得当前的分钟数 示例

示例的实现结果

2.2时钟组件 AnalogClock组件用来以表盘的方式显示当前时间,该表只有时针和分针,DigitClock组件以数字的方式显示当前时间可以显示时分秒,由于DigitClock继承TextView,可以使用TextView 的属性 示例

安卓android课程设计报告

安卓a n d r o i d课程设计 报告 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

湘潭大学课程设计报告课程名称______手机安卓开发_______ 课题名称______天气预报APP_______指导老师______周唯___________ 姓名____黄柳________ 班级____12计2班________ 小组______棒棒糖_______ 时间____2015年1月26 日_____ 一、需求分析 (一)引言 1.编写目的 1.1 为用户提供一个显示天气预报的软件,可以根据百度地图显示用户需求的城 市位置,以及用图标表示各城市对应的气象信息,可以简洁的表示出“晴、 雨、雪”和“气温”气象信息。 2. 项目风险 2.1 (项目风险识别是指找出影响项目目标顺利实现的主要风险因素,并识别出 这些风险究竟有哪些基本特征、可能会影响到项目的那些方面。) 2.2 联网收费视用户电话运营商的收费标准决定 2.3 手机或者无线信号不好时,可能无法连接或更新天气情况 3. 预期读者和阅读建议 3.1 预期读者:会使用已经安装安卓系统的手机或者平板电脑及其他移动设备的 用户 3.2 阅读建议:读者应通过该文档可以了解相关项目的需求分析、使用注意事项 以及可能存在的风险 4. 产品范围 2.2手机,平板电脑,MP4,导航仪,上网本,电纸书等使用安卓系统的数码领 域 (二)综合描述 1.产品的状况

1.1 Android是一种以Linux为基础的开放源代码操作系统,主要使用于便携设 备。目前未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。 Android操作系统最初由Andy Rubin开发,最初主要支持手机。2005年由 Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及 其他数码领域上。我们开发的相关项目正是一个在安卓平台上开发的软件, 可以用这个软件来实现用户在一些简单的手持设备如手机或者平板电脑等上 面及时的了解到用户所在城市的天气预报。 2. 产品的功能 2.1 天气信息获取 2.2 天气信息显示 3. 系统配置功能 3.1 用户类和特性 安卓平台用户:安卓新用户可以使用软件来了解用户所在城市的天气预报。熟悉安卓平台用户还可以选择对相关软件的系统按自己的喜好进行配置并保留自己的个性化系统配置。 安卓软件开发者:安卓软件开发者(喜好者)可以通过相关的开源代码来了解软件运行的原理。 3.2 运行环境 软件需要在支持安卓系统的可移动设备中正确安装才能正常运行。安卓版本需在及以上,同时建议用户如果是在手机移动设备使用的话,需确保手机支持联网服务。 3.3 设计和实现上的限制 Eclipse是开发相关应用软件的首选集成开发环境,安卓开发环境首先需要安装支持java应用软件运行的java开发软件包(即JDK),然后安装集成开发环境Eclipse,最后安装Android SDK的Eclipse的ADT插件。 Android SDK和Eclipse的ADT插件是必须使用的。 软件支持高效、快速的数据存储方式,包括快速数据存储方式SharedPreferences、文件存储和轻量级关系数据块SQLite,可软件可以使用适合的方法对数据进行进程保存和访问。 3.4 假设和约束(依赖) 软件必须在安卓系统下才可以正常运行,若需要获取天气更新或者是短信服务,需确保用户的数码设备支持联网及短信服务。 (三) 外部接口需求 1 用户的手机设备可以支持联网。 2 用户界面 3 软件接口 软件提供轻量级的进程间通信机制Intent,实 现跨进程组件通信。 4 访问硬件的API库函数通讯接口 4.1 HTTP 协议:有多种接口可以调用 你可以用Java类库封装的 HttpConnection 或者用Apach的开 源项目的 HttpGet 或者HttpPost ,

道德模范人物事迹简述(最新)

敬老养老是中华民族传统美德,时代在发展,孝子也被赋予了新的内涵,但孝子身上彰显的美德却是恒古不变的,东峡煤矿机电队职工刘佩德,几年如一日照顾偏瘫卧床的父母如一日的事迹感动了很多人。刘佩德也身患残疾,双髋股骨头坏死,行动困难,却是这样一个不良于行的人,却把大孝放在第一位,用自己的实际行动书写了一段"久病床前无孝子"的佳话。 刘佩德,男,今年48岁,现为华煤集团东峡煤矿机电队的职工,在他得病前,刘佩德有一个令人羡慕的家庭:父母身体健康,妻子勤劳温柔,儿子上中学,刘佩德为人勤劳肯干,拥有一颗热心肠,不仅通过自己的双手把日子过得有滋有味,对同事邻居也是有啥忙能帮就帮,在矿区拥有良好的口碑,随着矿区重组合并,效益越来越好,这个和美的家庭更是充满了欢声笑语,浓浓亲情。 对于当时的生活刘佩德已经很满足了,他最大的心愿就是能让两位老人幸福地安度晚年。为了让两位老人过的舒心,在平时生活中,刘佩德确实做到了百善孝为先,侍奉父母体贴入微,精心照顾父亲母亲的饮食起居,并每天抽时间陪老人聊天、散步。矿区里有什么活动,只要老人愿意去看,刘佩德就会想方设法满足老人的心愿。刘佩德知道二老喜爱戏曲,只要有买的他都会买回家,早些年用的录音机,家里的戏曲磁带放了一抽屉,现在是随身听,dvd播放机给父母欣赏解闷。闲暇时,一家人会聚在老人的身旁拉家常、聊天,听老人唠叨,逗老人开心。可是天有不测风云人有旦夕祸福, 2014年正月 -- 这个本来喜庆的日子,刘佩德 73岁的老母亲却半夜突发脑梗塞,连夜紧急送往了县医院。在他母亲住院的 20多天里,他是夜以继日地守在老人的病床前,为老人喂药、喂饭、洗衣擦身、接屎倒尿,毫无怨言。经过医护人员的精心救治,刘佩德的母亲虽然保住了性命,但却留下了严重的后遗症,半边身体无法移动,大小便无知觉,瘫痪在床。刘佩德的父亲因为承受不了这样的打击,紧接着也病倒了。两位身体本来还算硬朗的老人,现在是一个偏瘫在床,一个住院接受治疗,面对这突如其来的变故,刘佩德硬是忍住泪水,挺起臂膀,义不容辞地扛起侍候两位老人的重担。自从把母亲接回家后,刘佩德就开始了两头奔走的日子。他白天照顾住院的父亲,老婆照顾母亲; 晚上联系家门亲戚帮忙看护父亲,又马不停蹄的赶回家陪护母亲。这样的来回奔波,短短时间内,刘佩德瘦了十几斤,大腿根也越来越疼,每天奔走让他腿部的疼痛越来越严重,有时走路都困难,刘佩德以为是最近太劳累的缘故,也就没往心去,父亲看着日渐消瘦的儿子,想起自己和老伴给家庭带来这么多不便,情绪低落,总是自我埋怨:"老了,给你们添麻烦了……怎么不早点死呢?"。刘佩德听了这话,心里难受极了,一边忍受着疼痛的身体,却还要耐心地安慰老人,说"爸,没事,等你和妈的病好了以后,咱家会和以前一样,到时候我带着您二老去**山逛逛。" 为了给两位老人治病,刘佩德瞒着老人买了昂贵的药品,怕老人心疼钱,总说药便宜,说是打折买的。刘佩德父母和他自己的巨额药费常常让他们入不敷出,刘佩德的爱人甚至把她结婚时买的金项链和金戒指卖了支付药费,并安慰刘佩德:"只要我们都好,让老人在有生之年幸福快乐的度过有生之年。"刘佩德每每说起眼中都有泛着泪花,暗暗下定决心,就算花完他所有的积蓄哪怕借款、贷款,也要治好父母的病。

android常用控件大全

android常用控件大全 在Android中使用各种控件(View) DatePicker-日期选择控件 TimePicker-时间选择控件 ToggleButton-双状态按钮控件 EditText-可编辑文本控件 ProgressBar-进度条控件 SeekBar-可拖动的进度条控件 AutoCompleteTextView-支持自动完成功能的可编辑文本控件 MultiAutoCompleteTextView-支持自动完成功能的可编辑文本控件,允许输入多值(多值之间会自动地用指定的分隔符分开) ZoomControls-放大/缩小按钮控件 Include-整合控件 VideoView-视频播放控件 WebView-浏览器控件 RatingBar-评分控件 Tab-选项卡控件 Spinner-下拉框控件 Chronometer-计时器控件 ScrollView-滚动条控件 在Android中使用的Layout FrameLayout:里面只可以有一个控件,并且不能设计这个控件的位置,控件会放到左上角 LinearLayout:里面可以放多个控件,但是一行只能放一个控件

TableLayout:这个要和TableRow配合使用,很像html里面的table AbsoluteLayout:里面可以放多个控件,并且可以自己定义控件的x,y的位置 RelativeLayout:里面可以放多个控件,不过控件的位置都是相对位置 (Android界面布局好像还可以直接引用一些view,如ScrollView等) 常用控件: 1,EditText 主要函数:setText/getText设置/获取文本内容,setHint设置缺省显示内容; 2,RadioGroup,RadioButton RadioButton的isChecked()判断是否被选中 获取选中RadioButon的ID:设置 RadioGroup.setOnCheckedChangeListener方法 publiconCheckedChanged(RadioGroupgroup,intcheckedId)//checkedId 是选中RadioButton的ID 3,CheckBox isChecked()判断是否被选中 setOnCheckedChangeListener方法监视选中状态改变情况 4,Spinner a,显示数据 1),硬编码加载 通过setAdapter方法设置类型为 ArrayAdapter(Contextcontext,inttextViewResId,String[]objects) textViewResourceId:显示内容的ViewID默认设置为 https://www.doczj.com/doc/d15558702.html,yout.simple_spinner_item

Android开发实战中常用安卓开发框架

Android是基于Linux平台的开源移动操作系统,主要适用于移动设备,如智能手机和平板电脑(当然现在已经适用车控应用了),由Google公司和开放手机联盟领导及开发。不完全统计,Android平台手机的全球市场份额已经达到80%,本文介绍了android开发者实战中最喜欢使用的几种Android开发框架。 1) Corona SDK Corona SDK是一个跨平台技术的工具,它利用Lua开发脚本,从一个特定的移动操作系统开发应用。应用程序可以在模拟器中测试,然后编译为Android的本机代码。同时Corona SDK 还支持与Map、Facebook、OpenFient、GameCenter的集成。然而在编译项目时,程序员需要把代码上传到Corona的服务器上去编译,不能在本地直接编译。 2) Phonegap Phonegap是一款开源的开发框架,旨在让开发者使用HTML、Java、CSS等Web APIs开发跨平台的移动应用程序。它需要特定平台提供的附加软件,例如iPhone的iPhone SDK,Android的Android SDK等,也可以和DW5.5及以上版本配套开发。使用PhoneGap比为每个平台分别建立应用程序稍好一些,因为虽然基本代码是一样的,但是程序员仍然需要为每个平台分别编译应用程序。 3) Xamarin Xamarin 始创于2011年,旨在使移动开发变得难以置信地迅捷和简单。Xamarin的产品简化了针对多种平台的应用开发,包括iOS、Android、Windows Phone和Mac App。Xamarin 由许多著名的开源社区开发者创立和参与,而且也是Mono项目的主导者——C#与?NET框架的开源、跨平台实现。 而这其中Xamarin Studio就是一个用C#语言开发跨平台应用的集成开发环境,它和iOS 以及Android SDK紧密整合。Xamarin Studio提供了很多现代开发所需功能,包括代码完成、调试器、打包和发布应用(支持通过TestFlight发布应用程序)。对于Android,Xamarin还包含了自己的UI生成器(对于iOS,则使用苹果Xcode的UI生成器),此外还集成了Git和Subversion。Android开发者可以使用Xamarin Studio在模拟器和真机上对移动应用进行测试和bug调试。 4) Sencha Touch 2 Sencha Touch是由Sencha公司开发的移动Web应用开发框架,用以提升主流移动设备在浏览器上的触碰操作,增强用户体验。该框架以久负盛名的Ext JS富客户端框架为基础,并支持最新的HTML5及CSS3标准,与流行的Apple iOS和Andriod设备兼容。一方面,它以Webkit浏览器引擎为基础,提供了出色的性能和用户体验;另一方面,它提供了基于GPL V3许可的开源版本和详尽的API文档,体现了良好的开放性和易用性。因此,该框架可帮助移动应用开发人员提升开发效率,从而创造出更多富有创意的移动应用。 5) Appcelerator Appcelerator是一个构建基于SOA的RIA应用的全集成平台,用来构建富应用、交互式的网站和应用程序。Appcelerator应用的语言——Web Expression Language,是一种对HTML 的扩展,它采用直观、声明的方法来构建动态的web应用。

Android应用开发基础习题

-- 任务一Android 开发环境的搭建 第一部分知识回顾与思考 1.Android 的四层架构分别包括哪几层?分别起到什么作用? 答:Linux 内核层(Linux Kernel ):基于Linux 内核,内核为上层系统提供了系统服务。 系统库层(Libraries ):系统库基于C/C++ 语言实现,通过接口向应用程序框架层提供编程接口。 应用框架层(Application Framework ):为开发者提供了一系列的Java API,包括图形用户界面组件

View 、SQLite 数据库相关的API 、Service 组件等。 应用程序层(Applications ):包含了Android 平台中各式各样的应用程序。 第二部分职业能力训练 一、单项选择题(下列答案中有一项是正确的,将正确答案填入括号内) 1.Android 四层架构中,应用框架层使用的是什么语法?(C)A .CB .C++C.Java D.Android 2.Android 四层架构中,系统库层使用的是什么语法?(B)A .VBB.C /C++C.Java D .Android 3.应用程序员编写的Android 应用程序,主要是调用(B)提供的接口进行实现。 A .应用程序层DCB.应用框架层.应用视图层.系统库层

二、填空题(请在括号内填空) 1.在Android 智能终端中,有很多应用如拍照软件、联系人管理软件,它们都属于Android 的(应用程 序)层。 2.为了让程序员更加方便的运行调试程序,Android 提供了(模拟器),可以方便的将程序运行其上, 而不要实际的移动终端。 程序运行,我们需要安装(Java 3.为了支持)。JDK 三、简答题 1.简述Android 开发环境安装的步骤。 答:下载并安装JDK ,配置JDK 的环境变量; 从Anroid 官网上下载Android 开发组件(包含Eclipse 和

搭建安卓开发环境-详细教程

搭建安卓开发环境-详细教程 注:本教程是讲解在Windows XP下搭建安卓开发环境的,不是XP系统的朋友请绕行! 在开始搭建之前,请大家先到本人的网盘中下载所需的6个文件。 下载网址为:https://www.doczj.com/doc/d15558702.html,/c0balfh535(超链接,按住Ctrl键,单击蓝色文字,即可直接跳转) 安装目录: 步骤1→安装JDK---------------------------------对应的安装文件:jdk-6u22-windows-i586.exe 步骤2→安装Android SDK--------------------对应的安装文件:android-sdk_r17-windows.zip 步骤3→安装T omcat----------------------------对应的安装文件:apache-tomcat-7.0.26-windows-x86.zip 步骤4→安装Ant---------------------------------对应的安装文件:apache-ant-1.8.3-bin.zip 步骤5→安装Eclipse-----------------------------对应的安装文件:eclipse.part1.rar和eclipse.part2.rar 步骤6→安装Eclipse的ADT插件----------对应的安装文件:ADT-17.0.0.zip 步骤7→在图形界面下管理AVD 步骤8→设置Android系统语言 ===========================================1、安装JDK 运行安装程序【jdk-6u22-windows-i586-p.exe】,分别点击下一步进行安装。 在安装过程中先后会出现两次选择安装目录的界面,全部改为以下路径: jdk安装目录:C:\Java\jdk1.6.0_22 jre安装目录:C:\Java\jre6\ 安装好之后,配置环境变量: 打开环境变量窗口方法:右键【我的电脑】--单击【属性】--单击【高级】--单击【环境变量】。 在上方的用户变量中依次新建如下变量,并分别填入如下路径: →变量名:JAVA_HOME 变量值:C:\Java\jdk1.6.0_22 →变量名:PATH 变量值:%JAVA_HOME%/bin →变量名:CLASSPATH 变量值:.;%JAVA_HOME%/lib/tools.jar;%JAVA_HOME%/lib/dt.jar

2017道德模范人物事迹

2017道德模范人物事迹 2017道德模范人物事迹一李xx,男,19xx年7月出生,20xx 年3月参加工作,中共党员,大学生,现任开垦庙社区四队副队长职务。该同志自参加工作以来,怀着对基层连队事业的执着,工作热忱,在连队平凡的岗位上,始终爱岗敬业,勇于奉献,塑造了新时期基层连队领导的良好形象。该同志在20xx年被评为团场先进个人、优秀共产党员。现将其事迹介绍如下: 一、政治上严格要求自己,用先进政治思想武装自己的头脑。 在日常的工作、学习、生活中始终高举中国特色社会主义伟大旗帜,以邓小平理论和兵、师、团场的会议精神重要思想为指导,自觉加强理论学习,增强自己实践科学发展观重要思想的自觉性和坚定性;自觉坚持以构建和谐社会为指导,为社会进步和连队建设作出自己的努力。认真贯彻执行党的路线、方针、政策,认真做好本职工作。 二、工作上强化理论与业务知识,尽职尽责完成各项工作任务。 该同志一贯重视加强理论和业务知识学习,在工作中,敬业奉献,不断提高自己的业务工作能力。现将其一年来的具体工作情况简述如下: 20xx年3月,李xx任四队副队长,主管四、五组工作,上任伊始,李xx面对着如此的地理环境,边思索如何才能使职工走出大山,走向致富路,耕地少,其全部都是山旱地,人口老龄化严重,

于是他便想从此处下手,返包土地,积累干群之间的信任与资金,最终能实现耕地合作社经营,职工分红,解放职工劳力,让职工放手,劳动力转移外出务工多元增收。 说干就干,他在连队承包了64亩土地,种上了小麦、鹰嘴豆、土豆。经营方式采用了公司制市场化运作,雇佣2人,以收入分红的方式让他们管理,秋后结账,经过一年的辛勤劳动,承包的土地收入了一万多元,李xx为了改善干群关系,他决定把承包土地所挣的钱,拿出一部分来对60岁以上45名老年职工进行慰问,每人一袋面粉,一袋大米,价值: 193元,45人共计: 8685元,给17名贫困学生进行补助每人xx0元。作为一名基层领导,关心弱势群体,了解群众困难,改善了干群关系,重塑了共产党员为人民服务的形象。 在他的感召下,2017年年初,有职工主动把自己土地流转给连队,还有职工承诺今年的土地合同期满后也要把土地也流转给连队,照这样发展,离合作社经营,共同致富的目标,马上就会实现。 总之,一年多来,李xx同志始终坚持严格要求自己,勤奋努力,敬业奉献,时刻牢记全心全意为人民服务的宗旨,努力实践构建和谐社会重要思想,在自己平凡而普通的工作岗位上,努力做好本职工作。在具体工作中,依照上级法规及相关政策,上传下达,从实际出发,灵活掌握解决各种问题。在工作上兢兢业业,得到了大家的信任和支持,为基层连队事业做出了自己的贡献。

实验二 android基本控件实验

实验二 android基本控件实验 【目的】 熟悉Android常用控件的基本操作,掌握它们的基本使用方法。了解控件之间的构成关系,熟悉适配器的使用原理。 【要求】 1、了解控件的继承关系; 2、掌握适配器的使用; 3、掌握信息提示的实现机制; 4、实现基本界面。 【原理】 1.控件类之间的关系 android.view.View类(视图类)呈现了最基本的UI构造块。View类是Android中的一个超类,几乎包含了所有的屏幕类型,主要负责绘制和事件处理。 Android中控件类的扩展结构如图所示。 View有众多的扩展者,它们大部分是在android.widget包中,这些继承者实际上就是Android 系统中的“控件”。View实际上就是各个控件的基类,创建交互式的图形用户界面的基础。View的直接继承者包括文本视图(TextView)、图像视图(ImageView)、进度条(ProgressBar)等。它们各自又有众多的继承者。每个控件除了继承父类功能之外,一般还具有自己的公有 方法、保护方法、XML属性等。 在Android中使用各种控件的一般情况是在布局文件中可以实现UI的外观,然后在Java文件中实现对各种控件的控制动作。控件类的名称也是它们在布局文件XML中使用的标签名称。

2.控件通用行为和属性 View是Android中所有控件类的基类,因此View中一些内容是所有控件类都具有的通用行为和属性。 提示:由于Java语言不支持多重继承,因此Android控件不可能以基本功能的“排列组合”的方式实现。在这种情况下,为了实现功能的复用,基类的功能往往做得较强,作为控件的祖先类,View所实现的功能也是最多的。 控件类经常在布局文件中使用,因此其可以使用XML属性(XMLAttributes),和Java代码经常具有对应关系。 View作为各种控件的基类,其XML属性所有控件通用,XML属性及其对应的方法如表1所示。 表1 View中的XML属性及其对应的方法 其中,android:id表示控件的标识,通常需要在布局文件中指定这个属性。View中与控件标识相关的几个方法如下所示: public int getId() // 获得控件的id(int类型)

道德模范个人先进事迹材料5篇

道德模范个人先进事迹材料5篇 第一篇;勤劳致富道德模范事迹材料,男,生于1977年6月25日,现年38岁。于1995年12月参军入伍,在部队上挥洒热血16年,16年的军营生活也使他开阔了眼界、增长了见识、磨练了意志。作为一个出生在普通的农民家庭的农民的儿子,他自小便跟随父母到农田中劳作,所以他深知农村生活的艰苦与不易。很小的时候,他便想象着有一天能走出去,学到东西带领乡亲们去走出一条属于自己的康庄大道。在部队的日子里,他的心中仍然惦念着家乡的发展,仍然惦记着在家乡辛苦劳作的父老乡亲们。作为一名优秀的共产党员,他热爱祖国,并且拥护党的方针政策,有很高的思想觉悟。他从小就非常热爱自己的家乡,在部队服役期间,仍然眷恋着家乡的一山一水、一草一木。他总想着,我的根在家乡,有机会我还是要回到那片养育我的大山中去。2011年12月复员返乡后,他放弃了在泸州市两个门市、两套住房的优越条件,毅然决然地决定了回乡进行创业,一方面他是想回到阔别已久的家乡,回到那片熟悉的土地;另一方面也想尽自己的绵薄之力为家乡的发展做一点贡献,为家乡人过上好日子出一份力。他总说:“这片土地生我养我,这是莫大的恩惠,在很长一段时间里,我总想着我还能为它做些什么,而我现在所做的这些还远远不够。”凭借多年在部队生活学到的知识技术和自己对当今发展机遇的敏锐探索,于2012

年在文龙村五组投入资金30余万元建立了肉鸽养殖基地,并且在泸州市肉鸽基地中学习了养殖技术,学习回来后,陆续扩大了肉鸽养殖基地,如今他已经成立了镇龙宝山种养专业合作社,其肉鸽养殖基地年产达2万只。他说:“成功并不是一蹴而就的,很多人只看得到我现在的成就,其实这条路一路走来,我也遇到过很多困难,也想到过要放弃,但是最终还是战胜了困难和对失败阴影的恐惧,在慢慢摸索中我还是走到了现在。”军营是一所锻炼人才的大熔炉,也许和他在部队所接受过的训练有关,养成了他肯干、肯钻研的这股劲头。如今他的肉鸽养殖基地创造年产值30万元。主要销往泸州、古蔺、叙永、兴文、毕节等餐饮行业,并且和这些地方的多家餐饮行业签订了长期合同。很多和他合作的人都说,他这人实在、靠谱,他家的肉鸽我们用得放心。他如今已成为我们村上的种养殖大户,为我们村农民的致富之路打开了一条口子。在创立肉鸽养殖基地的同时,他还投入资金60余万元创立了脆红李种植基地,年产50万斤,主要销往沿海城市,创年产值100万元。他创立的种养殖基地不仅为文龙村的产业发展起了很好的模范带头作用,而且村上有很多村民就近在他的种养殖基地里工作,一方面使当地村民多了一个就业渠道和增收渠道,使部分村民的就业问题得到了解决,另一方面也可以让村民不用背井离乡就可以挣钱。在他的养殖基地里工作的村民,他不仅手把手地指导其种养

Android 标题栏添加控件及Button控件背景颜色的设置

Android 标题栏添加控件及Button控件背景颜色的设置 一、Android中标题栏添加按 现在很多的Android程序都在标题栏上都显示了一些按钮和标题,如下图: 下面通过实例来看一下如何实现。 1、在layout下创建一个titlebtn.xml文件,内容如下:

相关主题
文本预览
相关文档 最新文档