編輯:Android開發實例
一.android中的資源是在代碼中使用的外部文件。圖片,音頻,動畫和字符串等叫做android中的資源文件。
二.Android工程 資源類型布局表
與src源文件夾並列的兩個文件夾assets和res用來保存資源文件。
1.assets文件夾中放原聲文件如MP3文件,通過AssetManager類以二進制流的形式訪問
2.res中資源可以通過R資源類直接訪問:
anim:保存動畫
drawable:位圖文件
layout:xml布局文件
values:各種xml資源文件
arrays.xml:xml數組文件
colors.xml:xml顏色文件
dimens.xml:xml尺寸文件
styles.xml:xml樣式文件
raw:直接復制到設備中的源文件
menu:xml菜單文件
使用mContext.getResources()得到Resources對象來獲取資源
XML的寫法如下:
一個android工程中,有各種類型的資源文件,大致可以分為以下幾種:
1、 顏色 #RGB #ARGB #RRGGBB #AARRGGBB
顏色資源應該位於<resourses></resourses>標簽下
路徑res/values/colors.xml 名字可以隨意
定義<color name=”cname”>value</color>
使用 Resourse.getValues.getColor
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="white">#FFFFFF</color>
<color name="black">#000000</color>
</resources>
2、 字串
字串資源應該位於<resourses></resourses>標簽下
路徑res/values/strings.xml
定義<String name=”sname”>value</String>
使用 Resourse.getValues.getString
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, ResrouseTestActivity!</string>
<string name="app_name">ResrouseTest</string>
</resources>
3、 圖片
圖片資源一般使用png格式,使用其他格式的會出現各種問題,貌似不支持gif格式的圖片,可是使用Movie來播放gif格式的圖片
路徑res/drawable
可以直接存放圖片也可以是xml等配置文件(一般用於自定義組件)
使用 getDrawable
4、 圖片的顏色
位於res/values/my_drawable.xml名字隨意
<?xml version="1.0" encoding="utf-8"?>
<resources>
<drawable name="solid_red">#FF0000</drawable>
</resources>
定義用於填充一個組件的顏色值,即給view設置背景色。用法和drawable下的圖片一樣,其實沒多少意義,使用顏色定義就ok了,目前我是這樣認為的,可能有更好的優點,不過我沒發現罷了,嘿嘿,continue...
5、 單位資源
單位資源應該位於<resourses></resourses>標簽下
路徑res/values/dimen.xml 名字可以隨意
使用和String、color類似
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="dimen_name">2px</dimen>
<dimen name="dimen_px">5px</dimen>
<dimen name="dimen_pt">3pt</dimen>
<dimen name="dimen_dp">3dp</dimen>
</resources>
6、 Nine-patch(可以拉伸的小圖片)
支持圖片的拉伸
貌似就是所謂的png圖片文件資源,圖片在應用view的背景時,如果被設為background則會隨view的大小變化做相應的拉伸和收縮,像ImageView這類設置src圖片則不隨view變化,按其自身大小顯示部分或全部!
7、 菜單
菜單即可以從代碼中實現也可以在資源文件中配置,這裡就是要描述一下第二種<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/previous" android:title="@string/previous" android:enabled="false" android:icon="@android:drawable/ic_media_previous"/> <item android:id="@+id/play_pause" android:title="@string/play" android:icon="@android:drawable/ic_media_play"/> <item android:id="@+id/next" android:title="@string/next" android:icon="@android:drawable/ic_menu_next"/></menu>8、 Layout布局
這個就是你經常看到的與用戶交互的界面的xml文件,就是各個view的排列和嵌套,沒什麼好說的啦
9、 風格和主題、
風格主要是指view的顯示風格 res/values/filename.xml
<?xml version=”1.0″ encoding=”utf-8″?>
<resources>
<style name=”SpecialText” parent=”@style/Text”>
<item name=”android:textSize”>18sp</item>
<item name=”android:textColor”>#008</item>
</style>
</resources>
主題主要針對Activity等, 可以在Android Manifest中定義的<application>和<activity>元素將主題添加到整個程序或者某個 Activity,但是主題是不能應用在某一個單獨的View裡.風格可以自己定義也可以使用程序自帶的或是繼承已有的風格。
<?xml version="1.0" encoding="utf-8"?><resources><style name="CustomTheme"><item name="android:windowNoTitle">true</item><item name="windowFrame">@drawable/screen_frame</item><item name="windowBackground">@drawable/screen_background_white</item><item name="panelForegroundColor">#FF000000</item><item name="panelBackgroundColor">#FFFFFFFF</item><item name="panelTextColor">?panelForegroundColor</item><item name="panelTextSize">14</item><item name="menuItemTextColor">?panelTextColor</item><item name="menuItemTextSize">?panelTextSize</item></style></resources>
10、 動畫
動畫資源分為兩種,一是實現圖片的translate、scale、rotate、alpha四種變化。還可以設置動畫的播放特性;另一種是幀動畫,逐幀播放設置的資源
先說一下第一種
Res/anim/filename.xml<set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:interpolator="@android:anim/accelerate_interpolator" android:fromXDelta="0" android:toXDelta="200" android:fromYDelta="0" android:toYDelta="180" android:duration="2000" /> <scale android:interpolator="@android:anim/accelerate_interpolator" android:fromXScale="1.0" android:toXScale="2.0" android:fromYScale="1.0" android:toYScale="2.0" android:pivotX="150%" android:pivotY="150%" android:duration="2000" /> <alpha android:fromAlpha="1.0" android:toAlpha="1.0" android:duration="@android:integer/config_mediumAnimTime" /> <rotate ....各個屬性></rotate> <Interpolator >可以使用其子類和屬性定義動畫的運行方式,先快後慢,先慢後快等</Interpolator></set> 具體參數的用法,大家可以自己查資料
下面是第二種資源
<animation-list xmlns:android=”http://schemas.android.com/apk/res/android”
android:oneshot=”true”>
<item android:drawable=”@drawable/rocket_thrust1″ android:duration=”200″ />
<item android:drawable=”@drawable/rocket_thrust2″ android:duration=”200″ />
<item android:drawable=”@drawable/rocket_thrust3″ android:duration=”200″ />
</animation-list>
<script src="/javascripts/tinymce/plugins/javaeye/langs/zh.js" type="text/javascript"></script> rif;">1. 相關文件夾介紹 在Android項目文件夾裡面,主要的資源文件是放在res文件夾裡面的。assets文件夾是存放不進行編譯加工的原生文件,即該文件夾裡面的文件不會像xml,java文件被預編譯,可以存放一些圖片,html,js, css等文件。在後面會介紹如何讀取assets文件夾的資源!
代碼示例
/Chapter03_Resource/src/com/amaker/test/MainActivity.java
package com.amaker.test;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.amaker.ch03.color.TestColorActivity;
import com.amaker.ch03.dimen.TestDimensionActivity;
import com.amaker.ch03.drawable.TestBitmapActivity;
import com.amaker.ch03.layout.TestLayoutActivity;
import com.amaker.ch03.menu.TestMenuActivity;
import com.amaker.ch03.string.TestStringActivity;
import com.amaker.ch03.xml.TestXmlActivity;
public class MainActivity extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 菜單項數組
String[] items = {"Test Color","Test String","Test Dimension","Test XML","Test Bitmap","Test Menu","Test Layout"};
// 將菜單項數組設置為ListView的列表項展示
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, items));
getListView().setTextFilterEnabled(true);
}
// 響應菜單項的單擊事件
protected void onListItemClick(ListView l, View v, int position, long id) {
Intent intent = null;
switch (position) {
case 0:
intent = new Intent(MainActivity.this,TestColorActivity.class);
startActivity(intent);
break;
case 1:
intent = new Intent(MainActivity.this,TestStringActivity.class);
startActivity(intent);
break;
case 2:
intent = new Intent(MainActivity.this,TestDimensionActivity.class);
startActivity(intent);
break;
case 3:
intent = new Intent(MainActivity.this,TestXmlActivity.class);
startActivity(intent);
break;
case 4:
intent = new Intent(MainActivity.this,TestBitmapActivity.class);
startActivity(intent);
break;
case 5:
intent = new Intent(MainActivity.this,TestMenuActivity.class);
startActivity(intent);
break;
case 6:
intent = new Intent(MainActivity.this,TestLayoutActivity.class);
startActivity(intent);
break;
}
}
}
獲取顏色資源
/Chapter03_Resource/src/com/amaker/ch03/color/TestColorActivity.java
package com.amaker.ch03.color;
import android.app.Activity;
import android.os.Bundle;
import com.amaker.test.R;
public class TestColorActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_color);
// 引用顏色資源,設置背景色為紅色
getWindow().setBackgroundDrawableResource(R.color.red_bg);
}
}
/Chapter03_Resource/res/values/colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="red_bg">#f00</color>
<color name="blue_text">#0000ff</color>
</resources>
尺寸資源資源
/Chapter03_Resource/src/com/amaker/ch03/dimen/TestDimensionActivity.java
package com.amaker.ch03.dimen;
import android.app.Activity;
import android.content.res.Resources;
import android.os.Bundle;
import android.widget.Button;
import com.amaker.test.R;
public class TestDimensionActivity extends Activity {
private Button myButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_dimen);
myButton = (Button)findViewById(R.id.Button01);
Resources r = getResources();
float btn_h = r.getDimension(R.dimen.btn_height);
float btn_w = r.getDimension(R.dimen.btn_width);
myButton.setHeight((int)btn_h);
myButton.setWidth((int)btn_w);
}
}
/Chapter03_Resource/res/values/dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="text_width">150px</dimen>
<dimen name="text_height">100px</dimen>
<dimen name="btn_width">30mm</dimen>
<dimen name="btn_height">10mm</dimen>
</resources>
Bitmap資源
/Chapter03_Resource/src/com/amaker/ch03/drawable/TestBitmapActivity.java
package com.amaker.ch03.drawable;
import android.app.Activity;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.ImageView;
import com.amaker.test.R;
public class TestBitmapActivity extends Activity {
private ImageView myImageView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_bitmap);
myImageView = (ImageView)findViewById(R.id.bitmapImageView02);
Resources r = getResources();
Drawable d = r.getDrawable(R.drawable.moto);
myImageView.setImageDrawable(d);
}
}
/Chapter03_Resource/res/drawable
布局資源
/Chapter03_Resource/src/com/amaker/ch03/layout/TestLayoutActivity.java
package com.amaker.ch03.layout;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.amaker.test.R;
public class TestLayoutActivity extends Activity {
private TextView myTextView;
private EditText myEditText;
private Button myButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_layout);
myTextView = (TextView)findViewById(R.id.layoutTextView01);
myEditText = (EditText)findViewById(R.id.layoutEditText01);
myButton = (Button)findViewById(R.id.layoutButton01);
}
}
/Chapter03_Resource/res/layout/test_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!-- 以上四個屬性分別是:命名空間、 組件布局方向(這裡是垂直)、布局的寬(充滿屏幕)和高(充滿屏幕)-->
<!-- 以下嵌套一個TableLayout -->
<TableLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="1">
<TableRow>
<TextView
android:text="測試Layout:"
android:id="@+id/layoutTextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/red_bg"/>
<!-- 以上五個屬性分別是:文本內容、引用組件的ID、該組件的寬(內容的寬)、該組件的高(內容的高)、文件顏色 -->
<EditText
android:text=""
android:id="@+id/layoutEditText01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</TableRow>
<TableRow android:gravity="right">
<Button
android:text="Test"
android:id="@+id/layoutButton01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</TableRow>
</TableLayout>
</LinearLayout>
菜單資源
/Chapter03_Resource/src/com/amaker/ch03/menu/TestMenuActivity.java
package com.amaker.ch03.menu;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import com.amaker.test.R;
public class TestMenuActivity extends Activity {
private MenuInflater mi;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_menu);
mi = new MenuInflater(this);
}
/*
* 創建菜單
*/
public boolean onCreateOptionsMenu(Menu menu) {
mi.inflate(R.menu.file_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.about:
aboutAlert("本實例演示的是如何使用XML菜單資源來定義菜單!");
break;
case R.id.exit:
exitAlert("真的要退出嗎?");
break;
}
return true;
}
// 顯示對話框
private void exitAlert(String msg){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(msg)
.setCancelable(false)
.setPositiveButton("確定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
return;
}
});
AlertDialog alert = builder.create();
alert.show();
}
// 顯示對話框
private void aboutAlert(String msg){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(msg)
.setCancelable(false)
.setPositiveButton("確定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
/Chapter03_Resource/res/layout/test_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:text="測試菜單資源"
android:id="@+id/menuTextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></TextView>
</LinearLayout>
字符串資源
/Chapter03_Resource/src/com/amaker/ch03/string/TestStringActivity.java
package com.amaker.ch03.string;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import com.amaker.test.R;
public class TestStringActivity extends Activity {
private TextView myTextView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_string);
myTextView = (TextView)findViewById(R.id.myTextView02);
String str = getString(R.string.test_str2).toString();
myTextView.setText(str);
}
}
/Chapter03_Resource/res/layout/test_string.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:text="@string/test_str1"
android:id="@+id/myTextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:text=""
android:id="@+id/myTextView02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
xml資源
package com.amaker.ch03.xml;
import java.io.IOException;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import com.amaker.test.R;
public class TestXmlActivity extends Activity {
private TextView myTextView;
private Button myButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_xml);
myTextView = (TextView)findViewById(R.id.xmlContentTextView01);
myButton = (Button)findViewById(R.id.xmltTestButton01);
myButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int counter = 0;
StringBuilder sb = new StringBuilder("");
Resources r = getResources();
XmlResourceParser xrp = r.getXml(R.xml.test);
try {
while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) {
if (xrp.getEventType() == XmlResourceParser.START_TAG) {
String name = xrp.getName();
if(name.equals("customer")){
counter++;
sb.append("第"+counter+"條客戶信息:"+"\n");
sb.append(xrp.getAttributeValue(0)+"\n");
sb.append(xrp.getAttributeValue(1)+"\n");
sb.append(xrp.getAttributeValue(2)+"\n");
sb.append(xrp.getAttributeValue(3)+"\n\n");
}
} else if (xrp.getEventType() == XmlPullParser.END_TAG) {
} else if (xrp.getEventType() == XmlPullParser.TEXT) {
}
xrp.next();
}
myTextView.setText(sb.toString());
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:text="獲得XML內容"
android:id="@+id/xmltTestButton01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
<TextView
android:text=""
android:id="@+id/xmlContentTextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我
可以顯示在的Android任務,通過加載進度條的進展。進度條有兩種形狀。加載欄和加載微調(spinner)。在本章中,我們將討論微調(spinner)。Spinner 用
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我
本例是用ViewPager去做的實現,支持自動滑動和手動滑動,不僅優酷網,實際上有很多商城和門戶網