android项目中values中几个文件的作用

ids.xml——为应用的相关资源提供唯一的资源id。id是为了获得xml中的对象而需要的参数,也就是Object = findViewById(R.id.id_name)中的id_name。这些值可以在代码中用android.R.id引用到。
若在ids.xml中定义了ID,则在layout中可如下定义@id/price_edit,否则@+id/price_edit。

为什么使用ids?
我个人认为有以下几点作用:
(1)优化编译效率。
我们知道android的组件必须用一个int类型的id属性来标识其唯一性,
id属性必须以@开头的值,例如,@id/abc、@+id/xyz等。
如果使用"@+id/name"形式,当R.java中存在名为name变量时,则该组件会使用该变量的值作为标识。如果不存在该变量,则添加一个新的变量,并为该变量赋相应的值(不会重复)。
当修改完某个布局文件并保存后,系统会自动在R.java文件中生成相应的int类型变量。变量名就是“/”后面的值,例如,@+id/xyz会在R.java文件中生成int xyz = value,其中value是一个十六进制的数。如果xyz在R.java中已经存在同名的变量,就不再生成新的变量,而该组件会使用这个已存在的变量的值。

使用@id/name形式,预先定义的id已经生成,修改配置文件时,也不会引起系统重新生成。

(2)统一管理资源Id。

public.xml——描述的是为attr、id、drawable所指定的一个32的id值,这个值在current.xml文件中会被用到。

当我们对public.xml做了改动后,执行make update-api命令,相应的current.xml就会添加这些改动。

在public.xml中资源数据的定义会影响到current.xml文件,它们分别在frameworks/asecoreesesvalues和framework/aseapicurrent.xml中。

当进行内核文件修改时,需要特别注意public.xml文件的同步,该文档定义了资源文件的二进制兼容性。因此需要小心对待该文件,否则可能会破坏该版本的向后兼容性。

  为了避免破坏兼容性,新的资源需加在同类资源的最后(主要ID值,按照ID值递增)。若是放置在中间会导致随后的同类资源被赋予新的ID值从而破坏兼容性。

添加id的方法:

1)在ids.xml中添加公共id项,在public.xml中也添加相应的id项。这种办法没有兼容性,会与后面的版本产生冲突。

2)在ids.xml中添加公共id项,每一项前面加一行<!– @hide –>的注释,这样就不用在public.xml中添加相应的项了。源码中是的形式,这样current中就不会有相应的段了。

3)在自己写的xml中,使用android:id = “@+id/id_name”的形式,就和在eclipse中一样,搜一下会发现android源码中也有这么用的,这样ids.xml和public.xml都不用改,兼容性我还不确定。

其它常用的资源文件:

attrs.xml——当中定义的是类的属性,属性是为了能在xml文件中被引用到,换句话说就是指定类中变量(也就是属性的实际作用者)的值。这些属性会在类的构造函数中用到。看过一两个源码就会明白,构造函数中的TypedArray其实就是属性的数组,数组的成员会被赋给类里的成员,完成从xml的初始化。类的构造函数一般有三个,一个是Class(context),这个用于在代码中创建一个类,所以只包含一个上下文;Class(context, attrs)和Class(context, attrs, defStyle)用于从xml创建类的情况。

styles.xml——当中是各个控件的“样式”,样式由一个个属性所组成。我们在编辑xml文件的时候,不同的类所能设置的属性有共同的,也有不同的,都是由样式来控制的。具体可以去看styles.xml这个文件的内容。
themes.xml其实也是样式,只是适用的范围大一点,这个我是参考网上别人的看法,自己还没研究过。

colors.xml——当中定义各种颜色值。

strings.xml——当中定义使用到的字符串常量。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您想在Android只存储一个字段,可以考虑以下几种方法: 1. SharedPreferences:SharedPreferences提供了一种轻量级的数据存储方式,可以用于存储简单的键值对数据,例如一个字符串字段。您可以使用SharedPreferences存储和获取一个字符串字段,示例代码如下: ``` // 存储数据 SharedPreferences.Editor editor = getSharedPreferences("my_prefs", MODE_PRIVATE).edit(); editor.putString("my_field", "my_value"); editor.apply(); // 获取数据 SharedPreferences prefs = getSharedPreferences("my_prefs", MODE_PRIVATE); String myValue = prefs.getString("my_field", "default_value"); ``` 2. 文件存储:如果您需要存储更复杂的数据或大量数据时,可以考虑将数据存储在文件。您可以使用Java的File和FileOutputStream类来创建和写入文件,示例代码如下: ``` String fileName = "my_file.txt"; String myField = "my_value"; try { FileOutputStream fos = openFileOutput(fileName, Context.MODE_PRIVATE); fos.write(myField.getBytes()); fos.close(); } catch (IOException e) { e.printStackTrace(); } ``` 3. SQLite数据库:如果您需要存储更复杂的数据或需要进行数据查询和操作时,可以考虑使用SQLite数据库。您可以使用Android提供的SQLiteOpenHelper类来创建和管理数据库,示例代码如下: ``` public class MyDatabaseHelper extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 1; private static final String DATABASE_NAME = "my_database.db"; private static final String TABLE_NAME = "my_table"; private static final String COLUMN_NAME = "my_field"; private static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + "(" + COLUMN_NAME + " TEXT)"; public MyDatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 数据库升级时的处理 } public void insert(String value) { SQLiteDatabase db = getWritableDatabase(); ContentValues values = new ContentValues(); values.put(COLUMN_NAME, value); db.insert(TABLE_NAME, null, values); db.close(); } public String select() { SQLiteDatabase db = getReadableDatabase(); String[] columns = {COLUMN_NAME}; Cursor cursor = db.query(TABLE_NAME, columns, null, null, null, null, null); String result = null; if (cursor.moveToFirst()) { result = cursor.getString(0); } cursor.close(); db.close(); return result; } } ``` 以上是三种在Android只存储一个字段的方法,您可以根据具体需求选择合适的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值