1、通过Button的setOnClickListener方法为该按钮绑定一个单击事件监听器,用于监听用户的单击事件。代码如下:
[java] view plaincopy
public class MyActivity extends Activity {
protected void onCreate(Bundle icicle) {
super.onCreate(icicle)
setContentView(R.layout.content_layout_id)
//手工增加代码开始
//将按钮绑定一个单 *** 作的事件监听器。用于监听用户的单击 *** 作。
final Button button = (Button) findViewById(R.id.button_id)
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
//增加自己的代码......
final TextView text = (TextView) findViewById(R.id.textView1)
text.setText("OnClick. " + " ....")
}
})
//手工增加代码结束
}
}
2、通过修改main.xml中Button的属性,为按钮增加单击事件请求。修改的xml文件如下:
[html] view plaincopy
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="OnMySelfClick"
android:text="Button" />
framework的开发比应用层就要烦的多啦。做应用在eclipse中就足够了,用android系统中的控件等工具,或者是自己写个类来实现特定的功能。而framework层的开发,需要往源码中添加代码、xml、图片、id等等数据,这个id可是费了我好大的劲才搞定的。在项目开始的一个半月里,我探索、尝试了很多,现在把我的经验分享出来。网上关于framework层的开发信息很少,多是靠自己。最有效的方式就是分析android的源码,看google是怎样实现一个类的,以及类的层次。我现在看的主要是widget和app中的代码,其他的还没涉及。像View,ViewGroup,Activity,ActivityThread都是非常重要的类,也是代码量很大的类,我只是大概地过了下,还没有仔细分析过。我花大力气的地方是资源文件夹下values中几个文件的作用。attrs.xml中定义的是类的属性,属性是为了能在xml文件中被引用到,换句话说就是指定类中变量(也就是属性的实际作用者)的值。这些属性会在类的构造函数中用到。看过一两个源码就会明白,构造函数中的TypedArray其实就是属性的数组,数组的成员会被赋给类里的成员,完成从xml的初始化。类的构造函数一般有三个,一个是Class(context),这个用于在代码中创建一个类,所以只包含一个上下文Class(context, attrs)和Class(context, attrs, defStyle)用于从xml创建类的情况。styles.xml中是各个控件的“样式”,样式由一个个属性所组成。我们在编辑xml文件的时候,不同的类所能设置的属性有共同的,也有不同的,都是由样式来控制的。具体可以去看styles.xml这个文件的内容。themes.xml其实也是样式,只是适用的范围大一点,这个我是参考网上别人的看法,自己还没研究过。ids.xml是公共的id,也就是对应用层可见的id,id是为了获得xml中的对象而需要的参数,也就是Object = findViewById(R.id.id_name)中的id_name。这些值可以在代码中用android.R.id引用到public.xml描述的是为attr、id、drawable所指定的一个32的id值,这个值在current.xml文件中会被用到。当我们对public.xml做了改动后,执行make update-api命令,相应的current.xml就会添加这些改动。因为这些值按类型被放在不同的段上,类型相同的必须连续存放,不指定id值的话系统会自动计算出下一个值。添加id的方法:1)在ids.xml中添加公共id项,在public.xml中也添加相应的id项。这种办法没有兼容性,会与后面的版本产生冲突。2)在ids.xml中添加公共id项,每一项前面加一行的注释,这样就不用在public.xml中添加相应的项了。源码中是/** @hide */的形式,这样current中就不会有相应的段了。3)在自己写的xml中,使用android:id = "@+id/id_name"的形式,就和在eclipse中一样,搜一下会发现android源码中也有这么用的,这样ids.xml和public.xml都不用改,兼容性我还不确定。上面这些希望能对大家有所帮助吧。我们在Android framework中修改资源文件时,在Android4.0之前,都是直接在sourcecode/frameworks/base/core/res/res下面添加对应的资源文件,然后编译framework-res即可,但是这种情况到了Android
4.1就有改变了。按照以前的方法在编译的时候却会报错,提示找不到引用的资源文件,一般情况下找不到资源文件有以下几个原因:
(1). 资源id写错了,导致id不匹配
(2). 未编译framework-res,从而导致无法找到资源文件;
比如你在framework中添加了一张图片,但你在编译framework-res之前去编译引用该资源的SystemUI,那肯定是找不到的。
(3). 未import正确的资源包;
在frameworks/base/core/res/res下编译生成的资源文件保存在out/target/common/R/com/android/internal/R.java
可以先在该R.java内看有没有你的资源id,然后检查源代码有没有:
import com.android.internal.R
(4). 没有修改frameworks/base/core/res/res/values/public.xml;
第四点是Android 4.1才需要做的,在Android
4.1之前,我们添加一个资源文件,编译时会自动添加到public.xml中,但到了Android 4.1却不会了,需要手动添加,比如:
添加了一个布局文件,则需要在public.xml中添加如下代码:
[html] view
plaincopyprint?
<java-symbol type="layout" name="usb_storage_connection_connected" />
<java-symbol type="layout" name="usb_storage_connection_connected" />
添加了一个字符串,则需要在public.xml中添加如下代码:
[html] view
plaincopyprint?
<java-symbol type="string" name="usb_storage_connection_message" />
<java-symbol type="string" name="usb_storage_connection_message" />
添加了一张图片,则需要在public.xml中添加如下代码:
[html] view
plaincopyprint?
<java-symbol type="drawable" name="usb_storage_connected" />
<java-symbol type="drawable" name="usb_storage_connected" />
在布局文件中新增了一个控件的id,则需要在public.xml中添加如下代码:
[html] view
plaincopyprint?
<java-symbol type="id" name="mytextView" />
<java-symbol type="id" name="mytextView" />
新添加的资源仿照public.xml中原有的方式加上即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)