android获取属性值
1. android 已知控件的id名 怎么得到其id值
Android中的组件需要用一个int类型的值来表示,这个值也就是组件标签中的id属性值。id属性只能接受资源类型的值,也就是必须以@开头的值,例如,@id/abc、@+id/xyz等。 如果在@后面使用“+”,表示当修改完某个布局文件并保存后,系统会自动在R.java文件中生成相应的int类型变量。变量名就是“/”后面的值,例如,@+id/xyz会在R.java文件中生成int xyz = value,其中value是一个十六进制的数。如果xyz在R.java中已经存在同名的变量,就不再生成新的变量,而该组件会使用这个已存在的变量的值。 也就是说,如果使用@+id/name形式,当R.java中存在名为name变量时,则该组件会使用该变量的值作为标识。如果不存在该变量,则添加一个新的变量,并为该变量赋相应的值(不会重复)。 既然组件的id属性是一个资源id就可以,那么自然可以设置任何已经存在的资源id值,例如,@drawable/icon、@string/ok、@+string/you等。当然,也可以设置android系统中已存在的资源id,例如,楼主提出的@id/android:list,那么这个android是什么意思呢,实际上,这个android就是系统的R类(在R.java文件中)所在的package。我们可以在Java代码编辑区输入android.R.id.,就会列出相应的资源id,例如,也可以设置id属性值为@id/android:message。 <ListView android:id="@+id/android:message" android:layout_width="wrap_content" android:layout_height="wrap_content"/> 还有另外一种方法查看系统中定义的id,进入<android sdk安装目录>\platforms\android-1.5\data\res\values目录,找到ids.xml文件,打开后,内容如下: <?xml version="1.0" encoding="utf-8"?> <resources> <item type="id" name="price_edit">false</item> <item type="id" name="amount_edit">false</item> </resources> 若在ids.xml中定义了ID,则在layout中可如下定义@id/price_edit,否则@+id/price_edit
2. 急问!!!Android中如何获取或者定义AttributeSet参数
Android中如何获取AttributeSet参数的方法如下:
1.Attributeset自定义控件和其他的控件一样,应该写成一个类,而这个类的属性是是有自己来决定的.
2.首先要在res/values目录下建立一个attrs.xml的文件,并在此文件中增加对控件的属性的定义.
3.使用AttributeSet来完成控件类的构造函数,并在构造函数中将自定义控件类中变量与attrs.xml中的属性连接起来.
4.在自定义控件类中使用这些已经连接的属性变量.
5.将自定义的控件类定义到布局用的xml文件中去.
6.在界面中生成此自定义控件类对象,并加以使用.
3. android xml资源数组的问题 ,xml文件内容如下,我要怎么获取item键值对中name这个属性的值
读取数据代码:getValue(this,"第四");
public String getValue(Context context, String strText) {
String strData = "";
DocumentBuilderFactory factory = null;
DocumentBuilder builder = null;
Document document = null;
InputStream inputStream = null;
// 首先找到xml文件
factory = DocumentBuilderFactory.newInstance();
try {
// 找到xml,并加载文档
builder = factory.newDocumentBuilder();
inputStream = context.getResources().getAssets()
.open("data.xml");
document = builder.parse(inputStream);
// 找到根Element
Element root = document.getDocumentElement();
NodeList nodes = root.getElementsByTagName("item");
// 遍历根节点所有子节点
Element cardElement;
String strName;
String strValues;
for (int i = 0; i < nodes.getLength(); i++) {
cardElement = (Element) (nodes.item(i));
strName = cardElement.getAttribute("value");
Element eValues = (Element) cardElement
.getElementsByTagName("item").item(0);
strValues = eValues.getFirstChild().getNodeValue();
if (strValues.equals(strText)) {
strData = strName;
break;
}
if (i == nodes.getLength() - 1) {
Log.v(TAG, "未查到相关信息。。。");
strData = "";
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return strData;
}
4. Android属性系统简介及使用
Android 里有很多属性(property),每个属性都有一个名称和值,他们都是字符串格式。这些属性定义了 Android 系统的一些公共系统属性。借用大神的一句话,系统属性就是 真·全局变量
属性变更的请求时init事件循环处理的另一个事件,在Android平台中,为了让运行中的所有进程共享系统运行时所需要的各种设置值,系统开辟了属性存储区域,并提供了访问该区域的API。属性由键(key)与值(value)构成,其表现形式为“键=值”。
在Android平台中,在访问属性值时,添加了访问权限控制,增强了访问的安全性。系统中所有运行中的进程都可以访问属性值,但仅有init进程才能修改属性值。其他进程修改属性值时,必须向init进程提出请求,最终由init进程负责修改属性值。在此过程中,init进程会先检查各属性的访问权限,而后再扒余修改属性值。
当属性值更改后,若定义在init.rc文件中的某个特定条件得到满足,则与此条件相匹配的动作就会发生,每个动作都有一个触发器,决定动作的执行时间,记录在“on property”关键字后的命令即被执行。
个人看来属性系统有一下四个优点,当然缺点也很明显,只能支持三种基本类型:string、int、boolean
当编写本地应用程序时,可以使用 property_get 和 property_set 这两个API来读取/设置属性。要使用它们,我们需要 include cutils/properties.h,并链接 libcutils 库。
以上就是 properties.h 中申明的所有方法,其中 property_set 返回 0 表示执行成功,返回值 <0 表示失败。
java 层调用 /frameworks/base/core/java/android/os/SystemProperties.java 中的 set 和 get 方法即可设置和获取系统属性
通过 JNI 最终调用的还是 /system/core/libcutils/properties.c 中的 property_get 和 property_set
Android toolbox 程序提供了两个工具: setprop 和 getprop 获取和设置属性。其使用方法:
可以通过命令adb shell: getprop查看手机上所有属性状态值。
默认情况下,设置属性只会使 "init" 守护程序写入共享内存,它不会执行任何脚本或二进制程序。但是,您可以将您的想要的实现的操作与init.rc中某个属性的变化相关联拍此巧.例如,在默认的init.rc中有:
这样,如果你设置persist.service.adb.enable为1 ,"init"守护程序就知道需要采取行动:开启adbd服务。
只有有权限的进程才能修改属性,要不随便写一个就改系统属性那当黑客也太容易了。权限相关定义袭键在下面两个文件里:
其实一般应用程序都不会去修改系统属性,所以也不用太在意。
在开机启动后的init操作中,会执行一个loop循环,当检测到有新的设置时,进入设置流程,鉴权失败会提示相关的异常,如sys_prop: permission denied uid:1000 name:gsm.phone.id
通过以上介绍我们可以了解什么是系统属性,如何使用,以及一些需要注意的地方。后面会详细介绍相关原理。