Resource được hiểu là hình ảnh, âm thanh, văn bản được đặt trong các thư mục của project và sử dụng trong ứng dụng như icon, tên ứng dụng, ...
Khi tạo project Android sẽ có 1 thư mục res (res là viết tắt của resource) được tạo ra. Trong thư mục này chứa nhiều thư mục khác nữa, dùng để chứa các loại resource khác nhau như drawable, color, dimen, string, bool, integer, ...
Cấu trúc thư mục res trong Android
Tạo project mặc định (Empty Activity) bằng Android Studio để khảo sát thư mục res.
Có các thư mục như drawable, layout, mipmap, values. Ngoài ra, có thể tạo ra các thư mục như anim, raw.
Tên thư mục | Ý nghĩa |
---|---|
drawable | Thư mục chứa drawable (hình ảnh, shape, vector) của ứng dụng. |
layout | Thư mục chứa định nghĩa layout của ứng dụng, ví dụ như layout của activity, fragment, ... |
mipmap | Thư mục chứa icon của ứng dụng. |
raw | Thư mục chứa các file raw. |
anim | Thư mục chứa các animation được định nghĩa bằng xml. |
values | Thư mục chứa các file .xml định nghĩa các loại resource khác nhau:
Ngoài ra, có thể tạo ra file xml khác như:
|
Sử dụng resource trong Android
Sử dụng resource trong XML
Hầu hết trong tập tin layout, đều có thể truy cập resource thông qua:
@resource_type/value
resource_type
thường có các giá trị sau:
drawable
color
dimen
string
style
bool
integer
values có các giá trị:
id
: của file (thường sử dụng trong trường hợp drawable).name
: định nghĩa trong tập tin đó, thường được dùng trong các file nằm trong thư mục values.
File dimens.xml
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
<!--define value diment for tvContent-->
<dimen name="text_view_content_width">40dp</dimen>
<dimen name="text_view_content_height">40dp</dimen>
<dimen name="text_view_content_margin_left">3dp</dimen>
<dimen name="text_view_content_margin_right">3dp</dimen>
<dimen name="text_view_content_margin_top">8dp</dimen>
<dimen name="text_view_content_margin_bottom">8dp</dimen>
<dimen name="text_view_content_padding_left">10dp</dimen>
<dimen name="text_view_content_padding_right">10dp</dimen>
<dimen name="text_view_content_padding_top">6dp</dimen>
<dimen name="text_view_content_padding_bottom">6dp</dimen>
<!--define text size for tvContent-->
<dimen name="text_content_text_size">16sp</dimen>
</resources>
File strings.xml
<resources>
<string name="app_name">DemoResourceInAndroid</string>
<string name="text_content">Eitguide.com</string>
</resources>
File colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="red">#ff0000</color>
</resources>
File styles.xml
<resources>
<!-- Base application theme. -->
<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>
<style name="TextViewContentStyle">
<item name="android:textStyle">bold</item>
</style>
</resources>
Và dưới đây là cách sử dụng các tài nguyên định nghĩa ở trên:
<TextView
style="@style/TextViewContentStyle"
android:layout_width="@dimen/text_view_content_width"
android:layout_height="@dimen/text_view_content_height"
android:layout_marginBottom="@dimen/text_view_content_margin_bottom"
android:layout_marginLeft="@dimen/text_view_content_margin_left"
android:layout_marginRight="@dimen/text_view_content_margin_right"
android:layout_marginTop="@dimen/text_view_content_margin_top"
android:paddingBottom="@dimen/text_view_content_padding_bottom"
android:paddingLeft="@dimen/text_view_content_padding_left"
android:paddingRight="@dimen/text_view_content_padding_right"
android:paddingTop="@dimen/text_view_content_padding_top"
android:text="@string/text_content"
android:textColor="@color/red"
android:textSize="@dimen/text_content_text_size" />
Ngoài ra, tạo thêm các resource khác như tập tin trong thư mục values của project như:
- bools.xml chứa các giá trị logic.
- integers.xml chứa các giá trị số nguyên.
- string_arrays.xml chứa mảng kiểu string.
Ví dụ:
File bools.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="Checked">true</bool>
<bool name="NotChecked">false</bool>
</resources>
Sử dụng cho những View nào có thuộc tính chấp nhận là true
hay false
, trong trường hợp này sử dụng CheckBox
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="@bool/Checked"/>
File integers.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="minimum">0</integer>
<integer name="maximum">100</integer>
</resources>
Và được sử dụng cho những thuộc tính của View
chấp nhận giá trị kiểu int
, trờng trường hợp này sử dụng SeekBar
.
<SeekBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="@integer/maximum"
android:progress="@integer/minimum" />
Sử dụng lại resource để định nghĩa resource
Sử dụng lại những resource đã định nghĩa trước để định nghĩa lại resource mới.
Ví dụ:
<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="circle_bound_width">20dp</dimen>
<dimen name="circile_bound_height">@dimen/circle_bound_width</dimen>
</resources>
Định nghĩa màu sắc và sử dụng màu sắc này để định nghĩa kiểu:
File colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="white">#ffffff</color>
<color name="red">#ff0000</color>
<color name="green">#00ff00</color>
</resources>
File styles.xml
<resources>
<!-- Base application theme. -->
<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>
<style name="TextViewStyle">
<item name="android:textColor">@color/red</item>
<item name="android:background">@color/green</item>
</style>
</resources>
Sử dụng resrouce trong Java
Trong Java, để truy cập vào resource phải thông qua: R.resource_type.value
, với resource_type
và value
đã giải thích ở phần trên và sử dụng phương thức:
getResources().getResourcesType(R.resource_type.value);
Với getResourcesType
là các phương thức:
getColor()
getDrawable()
getInteger()
getBoolean()
getDimension()
getString()
- …
Có thể gõ getResources()
để Android Studio gợi ý cho các phương thức các loại resource:
Ví dụ lấy 1 số resource đã sử dụng trong bài viết:
// Get color resource
int color = getResources().getColor(R.color.red);
// Get integer resource
int max = getResources().getInteger(R.integer.max);
// Get boolean resource
boolean checked = getResources().getBoolean(R.bool.Checked);
// Get dimen resource
int margin = (int)getResources().getDimension(R.dimen.activity_horizontal_margin);
// Get drawable resource
Drawable drawable = getResources().getDrawable(R.drawable.icon_what_app);
// Get String resource
String str = getResources().getString(R.string.app_name);