.:: CODE SNIPPET ::.

"Your time is limited, so don't waste it living someone else's life"

Tìm hiểu về các Preference trong Android


Preference là một phần quan trọng trong ứng dụng Android. Nó rất quan trọng vì giúp cho người dùng có những chọn lựa thay đổi và tùy chỉnh ứng dụng của họ theo những nhu cầu riêng biệt của cá nhân. Ở đây, mình sử dụng lại chữ Preference trong tiếng Anh luôn vì không biết dịch nó ra như thế nào cả.
Android Prefereces có thể được thiết lập qua hai cách. Bạn có thể:

  • tạo ra một file preferences.xml trong thư mục res/xml.
  • hoặc bạn có thể thiết lập các preferences thông qua code.

Sau đây là một ví dụ sử dụng file preference.xml. Mỗi preference sử dụng một khóa (key value) để chúng ta thông qua đó lấy giá trị của preference đó. Biến android:title chưa tiêu đề của preference…
Hiện tại có 5 loại View để hiển thị các preference khác nhau như sau:

    1. CheckBoxPreference là một checkbox đơn giản, nó trả về giá trị true hoặc false.
    2. ListPreference sẽ hiển thị lên một radioGroup cho phép chọn một trong các giá trị. Trong đó biến android:entries dẫn đến một mảng nằm trong thư mục res/values/arrays để tạo ra danh sách, và giá trị android:entryValues là một mảng khác chứa các giá trị trả về của nó.
    3. EditTextPreference hiển thị một dialog với một EditText cho phép chúng ta nhập vào một chuối.

    1. RingtonePreference hiển thị một radioGroups chứa các bài nhạc chuông.

    1. Preference là một preference tùy biến. Nó hoạt động như một Button cho phép click vào.

    1. PreferenceScreen là một màn hình với các preferences. Khi bạn tạo ra một PreferenceScreen bên trong một PreferenceScreen khác, thì nó đơn giản là tạo ra một màn hình mới với các preference.

  1. PreferenceCategory là danh mục với các preference.

Sau đây là một ví dụ về một file preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
        <PreferenceCategory
                android:title="First Category">
                <CheckBoxPreference
                        android:title="Checkbox Preference"
                        android:defaultValue="false"
                        android:summary="This preference can be true or false"
                        android:key="checkboxPref" />
                <ListPreference
                        android:title="List Preference"
                        android:summary="This preference allows to select an item in a array"
                        android:key="listPref"
                        android:defaultValue="digiGreen"
                        android:entries="@array/listArray"
                        android:entryValues="@array/listValues" />
        </PreferenceCategory>
        <PreferenceCategory
                android:title="Second Category">
        <EditTextPreference
                android:name="EditText Preference"
                android:summary="This allows you to enter a string"
                android:defaultValue="Nothing"
                android:title="Edit This Text"
                android:key="editTextPref" />
        <RingtonePreference
                android:name="Ringtone Preference"
                android:summary="Select a ringtone"
                android:title="Ringtones"
                android:key="ringtonePref" />
        <PreferenceScreen
                android:key="SecondPrefScreen"
                android:title="Second PreferenceScreen"
                android:summary="This is a second PreferenceScreen">
                <EditTextPreference
                        android:name="An other EditText Preference"
                        android:summary="This is a preference in the second PreferenceScreen"
                        android:title="Edit text"
                        android:key="SecondEditTextPref" />
        </PreferenceScreen>
        <Preference
                android:title="Custom Preference"
                android:summary="This works almost like a button"
                android:key="customPref" />
        </PreferenceCategory>
</PreferenceScreen>

Cũng có thể xem như đây là một file layout giành cho một loại Activity đặc biệt để thay đổi các thông số của chương trình một cách tiện lợi và đơn giản. Activity đặc biệt mà mình vừa nói là PreferenceActivity :

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.Preference.OnPreferenceClickListener;
import android.widget.Toast;

public class Preferences extends PreferenceActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                addPreferencesFromResource(R.xml.preferences);
                // Get the custom preference
                Preference customPref = (Preference) findPreference("customPref");
                customPref
                                .setOnPreferenceClickListener(new OnPreferenceClickListener() {

                                        public boolean onPreferenceClick(Preference preference) {
                                                Toast.makeText(getBaseContext(),
                                                                "The custom preference has been clicked",
                                                                Toast.LENGTH_LONG).show();
                                                SharedPreferences customSharedPreference = getSharedPreferences(
                                                                "myCustomSharedPrefs", Activity.MODE_PRIVATE);
                                                SharedPreferences.Editor editor = customSharedPreference
                                                                .edit();
                                                editor.putString("myCustomPref",
                                                                "The preference has been clicked");
                                                editor.commit();
                                                return true;
                                        }

                                });
        }
}

Ở đây chúng ta thấy xuất hiện SharedPreference. Nó là một interface giúp chúng ta có thể truy xuất và thay đổi các preference của chương trình thông qua đối tượng SharedPreferences.Editor. Để tìm hiểu sâu hơn về interface này các bạn xem lại bài viết về cách sử dụng SharedPreference mà mình đã viết trước đây nhé.
Để gọi PreferenceActivity chúng ta cũng thực hiện y như khi cần gọi một Activity vậy. Có thể là thông qua một sự kiện nút bấm

@Override
public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      Button prefBtn = (Button) findViewById(R.id.prefButton);
      prefBtn.setOnClickListener(new OnClickListener() {

               public void onClick(View v) {
                       Intent settingsActivity = new Intent(getBaseContext(),
                                       Preferences.class);
                       startActivity(settingsActivity);
               }
      });
}

Khi đã được thay đổi thì giá trị của các preferece sẽ được lưu trữ trong thiết bị, và sau này khi chạy chương trình nó sẽ thực hiện theo các thiết lập mà bạn đã cài đặt cho dù là khi bạn khởi động lại máy.
Trong khi lập trình nếu cần đến giá trị của các preference các bạn sẽ khởi tạo một SharedPreferences và gọi lại thông qua các biến mà bạn đã đặt lúc lưu trữ nó nhé ví dụ như:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String customPref = mySharedPreferences.getString("myCusomPref", "");

Một điều quan trọng khác khi làm việc với cái này là bạn phải thêm PreferenceActivity vào trong file AndroidManifest.xml như là một activity luôn nhé

<activity
        android:name=".Preferences"
        android:label="@string/set_preferences">
</activity>

Good luck!!

Advertisements

4 responses to “Tìm hiểu về các Preference trong Android

  1. ypLzLEv November 25, 2012 at 2:42 AM

    691934 186145Register a domain, search for available domains, renew and transfer domains, and decide on from a wide variety of domain extensions. 860159

  2. Pingback: Homepage

  3. singapore company December 1, 2012 at 4:12 PM

    Thanks on your marvelous posting! I certainly enjoyed reading it, you might be a great author.
    I will ensure that I bookmark your blog and will come back very soon.

    I want to encourage you to continue your great job,
    have a nice weekend!

  4. Hoàng Minh December 3, 2012 at 2:08 PM

    really a joke

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: