说到android应用资源,首先想到是/res/下的各种资源,另外一种是放在/assets/目录下的原生资源。首先看assets下资源文件使用,因为assets目录下放置的资源无法直接访问(R.java),需要通过AssetManager来访问,该目录下可以放置音频文件,下面通过播放一首音乐简单的使用assets目录下的资源文件。
在assets目录下放置一首歌曲,然后在布局文件中设置两个button,通过点击button播放和暂停音乐。下面是代码部分:
start = (Button)findViewById(R.id.start);
stop = (Button)findViewById(R.id.stop);
AssetManager assetManager = getAssets();
try {
AssetFileDescriptor afd = assetManager.openFd("Klave - EuroDancer.mp3");
player= new MediaPlayer();
player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
player.prepare();
}catch (Exception e){
e.printStackTrace();
}
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
player.start();
}
});
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
player.stop();
}
});
这里不介绍AssetManager的具体使用,详细参考API文档。
下面介绍/res/目录下的资源文件使用:
/res/drawable/
关于drawable下图片资源的使用,可以通过R.drawable.xxx直接引用,或者通过:
Resources resources = getResources();
Drawable drawable = resources.getDrawable(R.drawable.psb); //获取图片资源
当然还可以通过在xml文件中编写我们需要的drawable资源,可以参考之前的文章
点击打开链接
/res/color/
放置定义不同状态下颜色列表的XML文件,例如:
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="@color/blue" />
<item android:state_selected="true" android:color="@color/red" />
<item android:color="@color/pink" />
</selector>
/res/anim/
放置定义补间动画的XML文件
/res/animator/
放置定义属性动画的XML文件
/res/layout/
这个都很熟悉,布局文件
/res/xml/
放置任意的原生XML文件,这些XML文件可以在java代码中用代码获取
/res/menu/
放置应用程序定义各种菜单的资源,包括选项菜单,子菜单,上下文菜单资源
/res/raw/
放置任意类型的原生资源(比如音频,视频文件),下面会通过获取raw里的音频资源播放。也可以把原生的资源文件放置在assets目录下
/res/values/
下面重点介绍values目录下可以放置哪些资源问价:
arrays.xml 数组资源
例:
<resources xmlns="http://schemas.android.com/res/apk/android" >
<array name="wang"> <!-- 定义的是一般类型的数组-->
<item>安徽</item>
<item>江苏</item>
<item>浙江</item>
<item>北京</item>
<item>哈尔滨</item>
<item>上海</item>
<item>河南</item>
<item>河北</item>
<item>山东</item>
<item>云南</item>
<item>吉林</item>
<item>@string/resource</item> <!-- 也可以从string.xml中直接使用字符 -->
</array>
<string-array name="wen"> <!-- 定义的是字符数组 -->
<item>安徽</item>
<item>江苏</item>
<item>浙江</item>
<item>北京</item>
<item>哈尔滨</item>
<item>上海</item>
<item>河南</item>
<item>河北</item>
<item>山东</item>
<item>云南</item>
<item>吉林</item>
<item>@string/resource</item> <!-- 也可以从string.xml中直接使用字符 -->
</string-array>
<integer-array name="chao"> <!-- 定义的是整数的数组 -->
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
</integer-array>
</resources>
使用数组资源也是非常简单的:
Resources resources = getResources();
String a[] = resources.getStringArray(R.array.wen); //获取数组资源
colors.xml:
放置单纯颜色值:
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="black">#fff5ee</color>
</resources>
string.xml:放置自定义字符串
<resources>
<string name="app_name">project-one</string>
<string name="resource">diy_os</string>
</resources>
dimen.xml:放置尺寸值
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
<dimen name="wid">19dp</dimen>
<dimen name="hei">10dp</dimen>
</resources>
styles.xml:放置样式
上面定义的是应用样式,也可以给一个控件添加样式。<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style>
bools.xml:自定义bool资源
integers.xml:自定义整型资源<resources> <bool name="tr">true</bool> <bool name="fa">false</bool> </resources>
下面通过一个demo来学习values目录下面的资源文件:<resources> <integer name="wang">1</integer> <integer name="wen">2</integer> <integer name="chao">3</integer> <!---定义的整数的资源--> </resources>
布局文件:
java代码:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.example.project_one.MainActivity"> <Button android:id="@+id/start" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="播放音乐" android:background="@color/colorPrimary" /> <Button android:id="@+id/stop" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="播放音乐" android:background="@color/redredred" /> <Button android:id="@+id/rawstart" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="播放音乐" android:background="@color/colorPrimaryDark" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/redredred" android:text="Hello World!" /> <ImageView android:id="@+id/image" android:layout_width="80dp" android:layout_height="80dp" android:layout_centerHorizontal="true"/> <TextView android:id="@+id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" /> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="wrap_content" android:entries="@array/wang" /> <!--这样可以给ListView设置数据 通过arrays.xml来设置--> </LinearLayout>
效果:public class MainActivity extends Activity { private ImageView imageView; private TextView text; private ListView listview; private Button start; private Button stop; private Button rawstart; private MediaPlayer player; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView)findViewById(R.id.image); text = (TextView)findViewById(R.id.text1); listview = (ListView)findViewById(R.id.listview); start = (Button)findViewById(R.id.start); stop = (Button)findViewById(R.id.stop); rawstart = (Button)findViewById(R.id.rawstart); final MediaPlayer rawplayer = MediaPlayer.create(this,R.raw.klave); //从raw目录下获取音频资源 AssetManager assetManager = getAssets(); try { AssetFileDescriptor afd = assetManager.openFd("Klave - EuroDancer.mp3"); player= new MediaPlayer(); player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); player.prepare(); }catch (Exception e){ e.printStackTrace(); } start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { player.start(); } }); stop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { player.stop(); } }); rawstart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { rawplayer.start(); } }); Resources resources = getResources(); String res = resources.getString(R.string.app_name); //获取字符串资源 Log.d("dddddd",res); Drawable drawable = resources.getDrawable(R.drawable.psb); //获取图片资源 imageView.setImageDrawable(drawable); String a[] = resources.getStringArray(R.array.wen); //获取数组资源 StringBuilder builder = new StringBuilder(); for(String b :a){ builder.append(b); //遍历数组 然后把每一个字符串都加载build中 然后设置在TextView中 }; text.setText(builder.toString() + String.valueOf(R.bool.fa)); listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Toast.makeText(MainActivity.this,"你好",Toast.LENGTH_LONG).show(); } }); } }