Thứ Ba, 25 tháng 12, 2018

lập trình Android - Dịch vụ

Một dịch vụ là một thành phần mà chạy trên nền tảng để thực hiện các hoạt động dài chạy mà không cần phải tương tác với người sử dụng và nó hoạt động ngay cả khi ứng dụng bị phá hủy.

Một dịch vụ về cơ bản có thể có hai trạng thái

Sr.Không.Nhà nước & Mô tả
1Bắt đầu
Một dịch vụ được bắt đầu khi một thành phần ứng dụng, chẳng hạn như một hoạt động, khởi động nó bằng cách gọi startService () . Sau khi bắt đầu, một dịch vụ có thể chạy trong nền vô thời hạn, ngay cả khi thành phần khởi động nó bị phá hủy.
2Giới hạn
Một dịch vụ bị ràng buộc khi một thành phần ứng dụng liên kết với nó bằng cách gọi bindService () . Một dịch vụ ràng buộc cung cấp giao diện máy khách-máy chủ cho phép các thành phần tương tác với dịch vụ, gửi yêu cầu, nhận kết quả và thậm chí thực hiện trên các quy trình với giao tiếp giữa các quá trình (IPC).
Một dịch vụ có các phương thức gọi lại vòng đời mà bạn có thể thực hiện để theo dõi các thay đổi trong trạng thái của dịch vụ và bạn có thể thực hiện công việc ở giai đoạn thích hợp. 

Khóa học lập trình Android
Khóa học lập trình Android
Sơ đồ bên trái hiển thị vòng đời khi dịch vụ được tạo bằng startService () và sơ đồ bên phải hiển thị vòng đời khi dịch vụ được tạo bằng bindService (): (hình ảnh lịch sự: android.com)

Để tạo một dịch vụ, bạn tạo một lớp Java mở rộng lớp cơ sở Dịch vụ hoặc một trong các lớp con hiện có của nó. Lớp cơ sở dịch vụ định nghĩa các phương thức gọi lại khác nhau và quan trọng nhất được đưa ra dưới đây. Bạn không cần phải thực hiện tất cả các phương thức gọi lại.

Tuy nhiên, Khóa học lập trình Android điều quan trọng là bạn phải hiểu từng người và thực hiện những điều đảm bảo ứng dụng của bạn hoạt động theo cách người dùng mong đợi.

Sr.Không.Gọi lại & Mô tả
1onStartCommand ()

Hệ thống gọi phương thức này khi một thành phần khác, chẳng hạn như một hoạt động, yêu cầu dịch vụ được bắt đầu, bằng cách gọi startService () . Nếu bạn thực hiện phương thức này, bạn có trách nhiệm dừng dịch vụ khi công việc của nó được thực hiện, bằng cách gọi các phương thức stopSelf () hoặc stopService () .
2onBind ()
Hệ thống gọi phương thức này khi một thành phần khác muốn liên kết với dịch vụ bằng cách gọi bindService () . Nếu bạn thực hiện phương pháp này, bạn phải cung cấp giao diện mà khách hàng sử dụng để liên lạc với dịch vụ, bằng cách trả về một đối tượng IBinder . Bạn phải luôn thực hiện phương pháp này, nhưng nếu bạn không muốn cho phép ràng buộc, thì bạn nên trả về null .
3onUnbind ()

Hệ thống gọi phương thức này khi tất cả các máy khách đã ngắt kết nối khỏi một giao diện cụ thể được dịch vụ xuất bản.
4onRebind ()

Hệ thống gọi phương thức này khi các máy khách mới đã kết nối với dịch vụ, sau khi được thông báo trước đó rằng tất cả đã bị ngắt kết nối trong onUnbind (Ý định) của nó .
5onCreate ()
Hệ thống gọi phương thức này khi dịch vụ được tạo lần đầu tiên bằng cách sử dụng onStartCommand () hoặc onBind () . Cuộc gọi này là bắt buộc để thực hiện thiết lập một lần.
6trênDestroy ()
Hệ thống gọi phương thức này khi dịch vụ không còn được sử dụng và đang bị phá hủy. Dịch vụ của bạn nên thực hiện điều này để dọn sạch mọi tài nguyên như chủ đề, người nghe đã đăng ký, người nhận, v.v.
Dịch vụ bộ xương sau đây cho thấy từng phương pháp của vòng đời

Ví dụ này sẽ đưa bạn qua các bước đơn giản để chỉ ra cách tạo Dịch vụ Android của riêng bạn. Thực hiện theo các bước sau để sửa đổi ứng dụng Khóa học lập trình Android mà chúng tôi đã tạo trong chương Ví dụ Hello World

Bậc thangSự miêu tả
1Bạn sẽ sử dụng Android StudioIDE để tạo một ứng dụng Android và đặt tên là Ứng dụng của tôi theo góicom.example.tutorialspoint7.myapplication như được giải thích trongchương Ví dụ Hello World .
2Sửa đổi tệp hoạt động chính MainActivity.java để thêm các phương thứcstartService () và stopService () .
3Tạo một tệp java mới MyService.java trong gói com.example.My Application . Tập tin này sẽ có triển khai các phương pháp liên quan đến dịch vụ Android.
4Xác định dịch vụ của bạn trong tệp AndroidManifest.xml bằng cách sử dụng thẻ <service ... />. Một ứng dụng có thể có một hoặc nhiều dịch vụ mà không có bất kỳ hạn chế nào.
5Sửa đổi nội dung mặc định của tệp res / layout / Activity_main.xml để bao gồm hai nút trong bố cục tuyến tính.
6Không cần thay đổi bất kỳ hằng số nào trong tệp res / value / chuỗi.xml .Studio Android chăm sóc các giá trị chuỗi
7Chạy ứng dụng để khởi chạy trình giả lập Android và xác minh kết quả của những thay đổi được thực hiện trong ứng dụng.
Sau đây là nội dung của tệp hoạt động chính được sửa đổi MainActivity.java. Tập tin này có thể bao gồm từng phương pháp vòng đời cơ bản. Chúng tôi đã thêm các phương thức startService () và stopService () để bắt đầu và dừng dịch vụ.

Sau đây là nội dung của MyService.java . Tệp này có thể thực hiện một hoặc nhiều phương thức được liên kết với Dịch vụ dựa trên các yêu cầu. Hiện tại, chúng tôi sẽ chỉ triển khai hai phương thức onStartCommand () và onDestroy ()
package com.example.tutorialspoint7.myapplication;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.widget.Toast;

/**
   * Created by TutorialsPoint7 on 8/23/2016.
*/

public class MyService extends Service {
   @Nullable
   @Override
   public IBinder onBind(Intent intent) {
      return null;
   }
 
   @Override
   public int onStartCommand(Intent intent, int flags, int startId) {
      // Let it continue running until it is stopped.
      Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
      return START_STICKY;
   }

   @Override
   public void onDestroy() {
      super.onDestroy();
      Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
   }
}
Sau đây sẽ là nội dung được sửa đổi của tệp AndroidManifest.xml . Ở đây chúng tôi đã thêm thẻ <service ... /> để bao gồm dịch vụ của chúng tôi
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.tutorialspoint7.myapplication">

   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:supportsRtl="true"
      android:theme="@style/AppTheme">
  
      <activity android:name=".MainActivity">
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>
  
      <service android:name=".MyService" />
   </application>

</manifest>
Sau đây sẽ là nội dung của tệp res / layout / Activity_main.xml để bao gồm hai nút

Hãy thử chạy Hello World đã được sửa đổi của chúng tôi ! ứng dụng chúng tôi vừa sửa đổi. Tôi giả sử bạn đã tạo AVD của mình trong khi thực hiện thiết lập môi trường.

Để chạy ứng dụng từ studio Android, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào biểu tượng Chạy từ thanh công cụ.

Khóa học lập trình Android Studio cài đặt ứng dụng trên AVD của bạn và khởi động nó và nếu mọi thứ đều ổn với thiết lập và ứng dụng của bạn, nó sẽ hiển thị theo cửa sổ Trình mô phỏng

Bây giờ để bắt đầu dịch vụ của bạn, hãy nhấp vào nút Bắt đầu dịch vụ , thao tác này sẽ khởi động dịch vụ và theo chương trình của chúng tôi theo phương thức onStartCommand () , một thông báo Dịch vụ bắt đầu sẽ xuất hiện ở dưới cùng của trình giả lập như sau

Để dừng dịch vụ, bạn có thể nhấp vào nút Dừng dịch vụ.

Thứ Hai, 24 tháng 12, 2018

Lập trình Android - Hoạt động

Một hoạt động biểu thị một màn hình duy nhất với giao diện người dùng giống như cửa sổ hoặc khung của hoạt động Java. Học lập trình Android là lớp con của lớp ContextThemeWrapper.

Nếu bạn đã làm việc với ngôn ngữ lập trình C, C ++ hoặc Java thì bạn phải thấy rằng chương trình của bạn bắt đầu từ hàm main () .

Rất giống với cách này, hệ thống Android khởi tạo chương trình của nó bằng một Hoạt động bắt đầu bằng một cuộc gọi trên phương thức gọi lại onCreate () . 

Học lập trình Android
Học lập trình Android

Có một chuỗi các phương thức gọi lại khởi động một hoạt động và một chuỗi các phương thức gọi lại phá bỏ một hoạt động như trong sơ đồ vòng đời Hoạt động dưới đây: ( hình ảnh lịch sự: Android )

Lớp Activity định nghĩa các cuộc gọi trở lại tức là các sự kiện. Bạn không cần phải thực hiện tất cả các phương thức gọi lại.

Tuy nhiên, điều quan trọng là bạn phải hiểu từng người và thực hiện những điều đảm bảo ứng dụng của bạn hoạt động theo cách người dùng mong đợi.

Không.Gọi lại & Mô tả
1onCreate ()
Đây là cuộc gọi lại đầu tiên và được gọi khi hoạt động được tạo lần đầu tiên.
2băt đâu()
Cuộc gọi lại này được gọi khi hoạt động hiển thị cho người dùng.
3onResume ()
Điều này được gọi khi người dùng bắt đầu tương tác với ứng dụng.
4onPause ()
Hoạt động bị tạm dừng không nhận được đầu vào của người dùng và không thể thực thi bất kỳ mã nào và được gọi khi hoạt động hiện tại đang bị tạm dừng và hoạt động trước đó đang được tiếp tục.
5dừng lại()
Cuộc gọi lại này được gọi khi hoạt động không còn hiển thị.
6trênDestroy ()

Cuộc gọi lại này được gọi trước khi hoạt động bị phá hủy bởi hệ thống.
7onRestart ()

Cuộc gọi lại này được gọi khi hoạt động khởi động lại sau khi dừng nó.
Ví dụ này sẽ đưa bạn qua các bước đơn giản để hiển thị vòng đời hoạt động của ứng dụng Android. Thực hiện theo các bước sau để sửa đổi ứng dụng Android mà chúng tôi đã tạo trong chương Ví dụ Hello World

Bậc thangSự miêu tả
1Bạn sẽ sử dụng studio Android để tạo một ứng dụng Android và đặt tên làHelloWorld theo gói com.example.helloworld như được giải thích trongchương Ví dụ Hello World .
2Sửa đổi tệp hoạt động chính MainActivity.java như được giải thích bên dưới. Giữ phần còn lại của các tập tin không thay đổi.
3Chạy ứng dụng để khởi chạy trình giả lập Android và xác minh kết quả của những thay đổi được thực hiện trong ứng dụng.
Sau đây là nội dung của tệp hoạt động chính được sửa đổi src / com.example.helloworld / MainActivity.java . Học lập trình Android Tập tin này bao gồm mỗi phương pháp vòng đời cơ bản. Phương thức Log.d () đã được sử dụng để tạo thông điệp tường trình
package com.example.helloworld;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;

public class MainActivity extends Activity {
   String msg = "Android : ";
   
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      Log.d(msg, "The onCreate() event");
   }

   /** Called when the activity is about to become visible. */
   @Override
   protected void onStart() {
      super.onStart();
      Log.d(msg, "The onStart() event");
   }

   /** Called when the activity has become visible. */
   @Override
   protected void onResume() {
      super.onResume();
      Log.d(msg, "The onResume() event");
   }

   /** Called when another activity is taking focus. */
   @Override
   protected void onPause() {
      super.onPause();
      Log.d(msg, "The onPause() event");
   }

   /** Called when the activity is no longer visible. */
   @Override
   protected void onStop() {
      super.onStop();
      Log.d(msg, "The onStop() event");
   }

   /** Called just before the activity is destroyed. */
   @Override
   public void onDestroy() {
      super.onDestroy();
      Log.d(msg, "The onDestroy() event");
   }
}
Một lớp hoạt động tải tất cả các thành phần UI bằng cách sử dụng tệp XML có sẵn trong thư mục res / layout của dự án. Câu lệnh sau tải các thành phần UI từ tệp res / layout / Activity_main.xml :
setContentView(R.layout.activity_main);
Một ứng dụng có thể có một hoặc nhiều hoạt động mà không có bất kỳ hạn chế nào.

Mọi hoạt động bạn xác định cho ứng dụng của mình phải được khai báo trong tệp AndroidManifest.xml và hoạt động chính cho ứng dụng của bạn phải được khai báo trong tệp kê khai với <bộ lọc ý định> bao gồm hành động MAIN và danh mục LAUNCHER như sau:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.tutorialspoint7.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
Nếu danh mục hành động CHÍNH hoặc LAUNCHER không được khai báo cho một trong các hoạt động của bạn, thì biểu tượng ứng dụng của bạn sẽ không xuất hiện trong danh sách ứng dụng của Màn hình chính.

Hãy thử chạy Hello World đã được sửa đổi của chúng tôi ! ứng dụng chúng tôi vừa sửa đổi. Tôi giả sử bạn đã tạo AVD của mình trong khi thực hiện thiết lập môi trường.

Để chạy ứng dụng từ studio Android, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào biểu tượng Chạy từ thanh công cụ.

Học lập trình Android studio cài đặt ứng dụng trên AVD của bạn và khởi động nó và nếu mọi thứ đều ổn với thiết lập và ứng dụng của bạn, nó sẽ hiển thị cửa sổ Trình mô phỏng và bạn sẽ thấy các thông báo nhật ký sau trong cửa sổ LogCat trong studio Android

08-23 10:32:07.682 4480-4480/com.example.helloworld D/Android :: The onCreate() event
08-23 10:32:07.683 4480-4480/com.example.helloworld D/Android :: The onStart() event
08-23 10:32:07.685 4480-4480/com.example.helloworld D/Android :: The onResume() event
Chúng ta hãy thử bấm vào nút khóa màn hình trên trình giả lập Android và nó sẽ tạo ra các thông báo sự kiện sau trong cửa sổ LogCat trong studio Android:

08-23 10:32:53.230 4480-4480/com.example.helloworld D/Android :: The onPause() event
08-23 10:32:53.294 4480-4480/com.example.helloworld D/Android :: The onStop() event

Hãy để chúng tôi thử mở khóa màn hình của bạn trên trình giả lập Android và nó sẽ tạo ra các thông báo sự kiện sau trong cửa sổ LogCat trong studio Android:

08-23 10:34:41.390 4480-4480/com.example.helloworld D/Android :: The onStart() event
08-23 10:34:41.392 4480-4480/com.example.helloworld D/Android :: The onResume() event

Tiếp theo, chúng ta hãy thử bấm vào nút Quay lại trên trình giả lập Android và nó sẽ tạo ra các thông báo sự kiện sau trong cửa sổ LogCat trong studio Android và điều này hoàn thành Vòng đời hoạt động cho Ứng dụng Lập trình Android.

08-23 10:37:24.806 4480-4480/com.example.helloworld D/Android :: The onPause() event
08-23 10:37:25.668 4480-4480/com.example.helloworld D/Android :: The onStop() event
08-23 10:37:25.669 4480-4480/com.example.helloworld D/Android :: The onDestroy() event

Thứ Bảy, 22 tháng 12, 2018

Tổ chức và truy cập tài nguyên Android

Còn nhiều mục nữa mà bạn sử dụng để xây dựng một ứng dụng lập trình Android tốt. Ngoài việc mã hóa cho ứng dụng, bạn còn quan tâm đến nhiều tài nguyên khác như nội dung tĩnh mà mã của bạn sử dụng, chẳng hạn như bitmap, màu sắc.

Định nghĩa bố cục, chuỗi giao diện người dùng, hướng dẫn hoạt hình, v.v. Các tài nguyên này luôn được duy trì riêng trong các thư mục con khác nhau trong thư mục res / của dự án.

Hướng dẫn này sẽ giải thích cho bạn cách bạn có thể sắp xếp các tài nguyên ứng dụng của mình, chỉ định các tài nguyên thay thế và truy cập chúng trong các ứng dụng của bạn.

Học lập trình Android
Học lập trình Android

Sắp xếp tài nguyên trong Android Studio

MyProject/
   app/
      manifest/
         AndroidManifest.xml
   java/
      MyActivity.java  
      res/
         drawable/  
            icon.png  
         layout/  
            activity_main.xml
            info.xml
         values/  
            strings.xml 
     
Sr.Không.Loại thư mục & tài nguyên
1hoạt hình /
Các tệp XML xác định hình ảnh động thuộc tính. Chúng được lưu trong thư mục res / anim / và được truy cập từ lớp R.anim.
2màu/

Các tệp XML xác định danh sách màu của trạng thái. Chúng được lưu trong res / color / và được truy cập từ lớp R.color .
3có thể rút /
Các tệp hình ảnh như các tệp .png, .jpg, .gif hoặc XML được biên dịch thành bitmap, danh sách trạng thái, hình dạng, hình động có thể vẽ được. Chúng được lưu trong res / drawable / và được truy cập từ lớp R.drawable .
4bố trí/
Các tệp XML xác định bố cục giao diện người dùng. Chúng được lưu trong res / layout / và được truy cập từ lớp R.layout .
5thực đơn/

Các tệp XML xác định các menu ứng dụng, chẳng hạn như Menu Tùy chọn, Menu ngữ cảnh hoặc Menu phụ. Chúng được lưu trong res / menu / và được truy cập từ lớp R.menu .
6nguyên /
Các tập tin tùy ý để lưu ở dạng thô của chúng. Bạn cần gọi Tài nguyên.openRawResource () bằng ID tài nguyên, đó là R.raw.filename để mở các tệp thô như vậy.
7giá trị /

Các tệp XML chứa các giá trị đơn giản, chẳng hạn như chuỗi, số nguyên và màu sắc. Ví dụ: đây là một số quy ước tên tệp cho các tài nguyên bạn có thể tạo trong thư mục này

mảng cho các mảng tài nguyên và được truy cập từ lớp R.array .

integers.xml cho các số nguyên tài nguyên và được truy cập từ lớp R.integer .

bools.xml cho boolean tài nguyên và được truy cập từ lớp R.bool .

colors.xml cho các giá trị màu và được truy cập từ lớp R.color .

dimens.xml cho các giá trị thứ nguyên và được truy cập từ lớp R.dimen .

String.xml cho các giá trị chuỗi và được truy cập từ lớp R. String .

style.xml cho các kiểu và được truy cập từ lớp R.style .
số 8xml /

Các tệp XML tùy ý có thể được đọc trong thời gian chạy bằng cách gọi Tài nguyên.getXML () . Bạn có thể lưu các tệp cấu hình khác nhau ở đây sẽ được sử dụng trong thời gian chạy.

Tài nguyên thay thế

Ứng dụng của bạn sẽ cung cấp các tài nguyên thay thế để hỗ trợ các cấu hình thiết bị cụ thể. 

Ví dụ: bạn nên bao gồm các tài nguyên có thể rút ra (ieimages) cho độ phân giải màn hình khác nhau và tài nguyên chuỗi thay thế cho các ngôn ngữ khác nhau. Khi chạy, Học lập trình Android Android phát hiện cấu hình thiết bị hiện tại và tải các tài nguyên phù hợp cho ứng dụng của bạn.

Để chỉ định các lựa chọn thay thế dành riêng cho cấu hình cho một bộ tài nguyên, hãy làm theo các bước sau

Tạo một thư mục mới trong res / có tên ở dạng <resource_name> - <config_qualifier> . Ở đây resource_name sẽ là bất kỳ tài nguyên nào được đề cập trong bảng trên, như bố cục, có thể vẽ được, v.v ... 

Vòng loại sẽ chỉ định một cấu hình riêng mà các tài nguyên này sẽ được sử dụng. Bạn có thể kiểm tra tài liệu chính thức để biết danh sách đầy đủ các vòng loại cho các loại tài nguyên khác nhau.

Lưu các tài nguyên thay thế tương ứng trong thư mục mới này. Các tệp tài nguyên phải được đặt tên chính xác giống như các tệp tài nguyên mặc định như trong ví dụ dưới đây, nhưng các tệp này sẽ có nội dung cụ thể để thay thế. Ví dụ mặc dù tên tệp hình ảnh sẽ giống nhau nhưng đối với màn hình độ phân giải cao, độ phân giải của nó sẽ cao.

Dưới đây là một ví dụ chỉ định hình ảnh cho màn hình mặc định và hình ảnh thay thế cho màn hình độ phân giải cao.

MyProject/
   app/
      manifest/
         AndroidManifest.xml
   java/
      MyActivity.java   
      res/
         drawable/  
            icon.png
            background.png
         drawable-hdpi/  
            icon.png
            background.png  
         layout/  
            activity_main.xml
            info.xml
         values/  
            strings.xml 

Dưới đây là một ví dụ khác chỉ định bố cục cho ngôn ngữ mặc định và bố cục thay thế cho ngôn ngữ Ả Rập.

MyProject/
   app/
      manifest/
         AndroidManifest.xml
   java/
      MyActivity.java   
      res/
         drawable/  
            icon.png
            background.png
         drawable-hdpi/  
            icon.png
            background.png  
         layout/  
            activity_main.xml
            info.xml
         layout-ar/
            main.xml
         values/  
            strings.xml  

Tài nguyên truy cập

Trong quá trình phát triển ứng dụng của bạn, bạn sẽ cần truy cập các tài nguyên được xác định hoặc trong mã của bạn hoặc trong các tệp XML bố cục của bạn. Phần sau đây giải thích cách truy cập tài nguyên của bạn trong cả hai trường hợp

Truy cập tài nguyên trong mã

Khi ứng dụng Lập trình Android của bạn được biên dịch, một lớp R sẽ được tạo, chứa ID tài nguyên cho tất cả các tài nguyên có sẵn trong thư mục res / của bạn . Bạn có thể sử dụng lớp R để truy cập tài nguyên đó bằng thư mục con và tên tài nguyên hoặc ID tài nguyên trực tiếp.

Thí dụ

Để truy cập res / drawable / myimage.png và đặt ImageView, bạn sẽ sử dụng mã sau
ImageView imageView = (ImageView) findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);
Ở đây, dòng đầu tiên của mã sử dụng R.id.myimageview để xác định ImageView với id myimageview trong tệp Bố cục.

Dòng mã thứ hai sử dụngR.drawable.myimage để có được một hình ảnh với tên myimage có sẵn trong thư mục con có thể vẽ được dưới / res .

Thí dụ

Xem xét ví dụ tiếp theo trong đó res / value / chuỗi.xml có định nghĩa sau
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string  name="hello">Hello, World!</string>
</resources>
Bây giờ bạn có thể đặt văn bản trên một đối tượng TextView bằng thông điệp ID bằng ID tài nguyên như sau
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello);
Thí dụ

Hãy xem xét một bố cục res / layout / Activity_main.xml với định nghĩa sau
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent" 
   android:layout_height="fill_parent" 
   android:orientation="vertical" >
   
   <TextView android:id="@+id/text"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Hello, I am a TextView" />

   <Button android:id="@+id/button"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Hello, I am a Button" />
      
</LinearLayout>
Mã ứng dụng này sẽ tải bố cục này cho một Hoạt động, trong phương thức onCreate () như sau
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
}
Truy cập tài nguyên trong XML

Hãy xem xét tệp res / value / chuỗi XML tài nguyên sau đây bao gồm tài nguyên màu và tài nguyên chuỗi
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <string name="hello">Hello!</string>
</resources>
Bây giờ bạn có thể sử dụng các tài nguyên này trong tệp bố cục sau để đặt màu văn bản và chuỗi văn bản như sau
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:textColor="@color/opaque_red"
   android:text="@string/hello" /> 
Bây giờ nếu bạn sẽ đi qua chương trước một lần nữa, nơi tôi đã giải thích Hello World! ví dụ, và tôi chắc chắn bạn sẽ hiểu rõ hơn về tất cả các khái niệm được giải thích trong chương này.

Vì vậy, tôi đặc biệt khuyên bạn nên kiểm tra chương trước để biết ví dụ hoạt động và kiểm tra xem tôi đã sử dụng các tài nguyên khác nhau ở mức độ cơ bản như thế nào.

Lập trình Android - RenderScript

Trong chương này, chúng ta sẽ tìm hiểu về Android RenderScript. Thông thường các ứng dụng trên Android được thiết kế để tiêu thụ tài nguyên ...