Làm thế nào để đọc giá trị từ string.xml trong Android?


368

Tôi đã viết dòng:

String Mess = R.string.mess_1 ;

để lấy giá trị chuỗi, nhưng thay vì trả về chuỗi, nó đưa cho tôi id của kiểu nguyên. Làm thế nào tôi có thể nhận được giá trị chuỗi của nó? Tôi đã đề cập đến giá trị chuỗi trong string.xmltệp.

Câu trả lời:


807

Thử cái này

String mess = getResources().getString(R.string.mess_1);

CẬP NHẬT

String string = getString(R.string.hello);

Bạn có thể sử dụng getString(int)hoặc getText(int)để lấy một chuỗi. getText(int)sẽ giữ lại bất kỳ kiểu văn bản phong phú nào được áp dụng cho chuỗi.

Tham khảo: https://developer.android.com/guide/topics/resource/opes-resource.html


87
bạn có thể đơn giản hóa điều đó this.getString(R.string.some_id)nếu bạn đã ở trong Context(Hoạt động hoặc Dịch vụ).
Matthias

Tôi đã sử dụng cái này: String message + = getResource (). GetString (R.opes.opes1) + "thêm một số từ ..."; và tôi muốn gửi chuỗi này qua sms, nhưng nó không hoạt động. Nó hoạt động tốt mà không cần tài nguyên chuỗi. Tui bỏ lỡ điều gì vậy?
keybee 22/03/13

9
Bạn có thể đơn giản hóa hơn nữa để getString (R.opes.some_id). Và nếu bạn muốn tùy chỉnh chuỗi, bạn có thể tạo chuỗi như "Chào mừng,% 1 $ s", sau đó bạn có thể sử dụng getString (R.opes.some_id, "John Doe"). để nhận "Chào mừng, John Doe" trong thời gian chạy.
M Granja

Cũng hoạt động cho các loại khác như tôi vừa sử dụnggetResouces().getInteger(R.integer.my_value_in_xml)
Noah Herron

61

Trong hoạt động:

this.getString(R.string.resource_name)

Nếu không hoạt động nhưng có quyền truy cập vào ngữ cảnh:

context.getString(R.string.resource_name)
application.getString(R.string.resource_name)

3
Bạn không cần phải bao gồm thistrong khi bạn đang ở trong Hoạt động. Đơn giản là getString()sẽ cho phép bạn làm mọi thứ.
CopsOnRoad

43

Tôi đang sử dụng cái này:

String URL = Resources.getSystem().getString(R.string.mess_1);

10
Cảnh báo - theo câu trả lời này trích dẫn tài liệu của Android, việc sử dụng Resources.getSystem()không cung cấp cho bạn tài nguyên ứng dụng mà chỉ cung cấp cho Android. Nó không nên được sử dụng cho các tài nguyên như string. Tôi đã sử dụng giải pháp này và ứng dụng bị sập, ném một notfoundexceptionthứ khó hiểu (vì tài nguyên tồn tại strings.xml).
et_l

cũng đã thử nó - KHÔNG làm việc. quá tốt để trở thành sự thật :))
Razvan_TK9692

23

Nhân tiện, cũng có thể tạo các chuỗi chuỗi trong chuỗi XML như vậy:

<string-array name="tabs_names"> 
    <item>My Tab 1</item> 
    <item>My Tab 2</item>
</string-array>

Và sau đó từ Hoạt động của bạn, bạn có thể nhận được tài liệu tham khảo như vậy:

String[] tab_names = getResources().getStringArray(R.array.tab_names);
String tabname1=tab_names[0];//"My Tab 1"

Câu trả lời này sẽ xuất hiện ở đó. Hầu hết thời gian, bạn đang đọc các mảng từ XML không phải là các chuỗi đơn.
Ojonugwa Jude Ochalifu

11

Chỉ để tham khảo trong tương lai.

Trong tài liệu tài nguyên String có ghi :

Bạn có thể sử dụng getString (int) hoặc getText (int) để lấy chuỗi. getText (int) sẽ> giữ lại mọi kiểu dáng văn bản phong phú được áp dụng cho chuỗi.


6

Giải pháp 1

Context context;
String mess = context.getString(R.string.mess_1)

Giải pháp 2

String mess = getString(R.string.mess_1)

3

Trong các mảnh, bạn có thể sử dụng

getActivity().getString(R.id.whatever);

3

Nếu bạn muốn thêm giá trị chuỗi vào một nút chẳng hạn, hãy sử dụng đơn giản

android:text="@string/NameOfTheString"

Văn bản được xác định trong chuỗi XML trông như thế này:

 <string name="NameOfTheString">Test string</string>

2

Bạn phải tham khảo tên bối cảnh trước khi sử dụng getResources()trong Android.

String user=getApplicationContext().getResources().getString(R.string.muser);

HOẶC LÀ

Context mcontext=getApplicationContext();

String user=mcontext.getResources().getString(R.string.muser);

1

Bạn có thể sử dụng mã này:

 getText (R.opes.mess_1); 

Về cơ bản, bạn cần truyền id tài nguyên dưới dạng tham số cho phương thức getText ().


1

Nếu bạn đang ở trong một hoạt động bạn có thể sử dụng

getResources().getString(R.string.whatever_string_youWant);

Nếu bạn không ở trong Hoạt động, hãy sử dụng:

getApplicationContext.getResource().getString(R.String.Whatever_String_you_want)

1

Chi tiết

  • Studio Android 3.1.4
  • Phiên bản Kotlin: 1.2.60

Bài tập

  • sử dụng một dòng
  • mã tối thiểu
  • sử dụng các đề xuất từ ​​trình biên dịch

Bước 1. Ứng dụng ()

Nhận liên kết đến ngữ cảnh của ứng dụng của bạn

class MY_APPLICATION_NAME: Application() {

    companion object {
        private lateinit var instance: MY_APPLICATION_NAME

        fun getAppContext(): Context = instance.applicationContext
    }

    override fun onCreate() {
        instance = this
        super.onCreate()
    }

}

Bước 2. Thêm phần mở rộng int

inline fun Int.toLocalizedString(): String = MY_APPLICATION_NAME.getAppContext().resources.getString(this)

Sử dụng

chuỗi DOM

<resources>
    <!-- .......  -->
    <string name="no_internet_connection">No internet connection</string>
    <!-- .......  -->
</resources>

Nhận giá trị chuỗi:

val errorMessage = R.string.no_internet_connection.toLocalizedString()

Các kết quả

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây


1

trong khi u viết R. bạn đang đề cập đến R.javalớp được tạo bởi nhật thực, sử dụng getResources().getString()và chuyển idtài nguyên mà bạn đang cố đọc bên trong getString()phương thức.

Thí dụ : String[] yourStringArray = getResources().getStringArray(R.array.Your_array);


0

**

Tôi hy vọng mã này có lợi

**

String user = getResources().getString(R.string.muser); 

0

Cập nhật

  • Bạn có thể sử dụng getString(R.string.some_string_id)trong cả hai Activityhoặc Fragment.
  • Bạn có thể sử dụng Context.getString(R.string.some_string_id)ở nơi bạn không có quyền truy cập trực tiếp vào getString()phương thức. Thích Dialog.

Vấn đề là nơi bạn không có Contextquyền truy cập , như một phương thức trong Utillớp học của bạn .

Giả sử phương pháp dưới đây không có ngữ cảnh.

public void someMethod(){
    ...
    // can't use getResource() or getString() without Context.
}

Bây giờ bạn sẽ vượt qua Contextnhư một tham số trong phương thức này và sử dụnggetString().

public void someMethod(Context context){
    ...
    context.getString(R.string.some_id);
}

Những gì tôi làm là

public void someMethod(){
    ...
    App.getRes().getString(R.string.some_id)
}

Gì? Nó rất đơn giản để sử dụng bất cứ nơi nào trong ứng dụng của bạn!

Vì vậy, đây là một giải pháp độc đáo mà bạn có thể truy cập tài nguyên từ bất cứ đâu như thế Util class.

import android.app.Application;
import android.content.res.Resources;

public class App extends Application {
    private static App mInstance;
    private static Resources res;


    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
        res = getResources();
    }

    public static App getInstance() {
        return mInstance;
    }

    public static Resources getResourses() {
        return res;
    }

}

Thêm trường tên vào manifest.xml <applicationthẻ của bạn .

<application
        android:name=".App"
        ...
        >
        ...
    </application>

Bây giờ bạn tốt để đi.



0

String myString = getResources().getString(R.string.here_your_string_name);

Bây giờ chuỗi của bạn được sao chép vào myString. Tôi hy vọng nó sẽ làm việc cho bạn.


0

Bạn có thể đọc trực tiếp giá trị được xác định thành chuỗi String:

<resources>
    <string name="hello">Hello StackOverflow!</string>
</resources>

và thiết lập thành một biến:

String mymessage = getString(R.string.hello);

nhưng chúng ta có thể định nghĩa chuỗi vào dạng xem:

<TextView
    android:id="@+id/myTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello"/>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.