Search…

Resource trong Android

Nguyễn NghĩaNguyễn Nghĩa
15/11/20205 min read
Khám phá thư mục res để hiểu rõ hơn về resource trong Android.

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:
  • attrs.xml: định nghĩa các thuộc tính sử dụng cho việc tạo view mới (custom View).
  • color.xml: định nghĩa màu sắc được sử dụng trong ứng dụng.
  • dimen.xml: định nghĩa các giá trị về kích thước, font chữ và thường có đơn vị là dp, dip, sp, px.
  • strings.xml: chứa các chuỗi được sử dụng trong app. Ví dụ như tên app, tên button, text của TextView…
  • styles.xml: định nghĩa Theme, Style cho View.

Ngoài ra, có thể tạo ra file xml khác như:

  • bool.xml: chứa các giá trị boolean.
  • integers.xml: chứa các giá trị số.
  • arrays.xml: chứa các mảng.

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_typevalue đã 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);
IO Stream

IO Stream Co., Ltd

developer@iostream.co
383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024