bagaimana cara membaca nilai dari string.xml di android?


368

Saya telah menulis baris:

String Mess = R.string.mess_1 ;

untuk mendapatkan nilai string, tetapi bukannya mengembalikan string, itu memberi saya id tipe integer. Bagaimana saya bisa mendapatkan nilai senarnya? Saya menyebutkan nilai string dalam string.xmlfile.

Jawaban:


808

Coba ini

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

MEMPERBARUI

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

Anda dapat menggunakan salah satu getString(int)atau getText(int)untuk mengambil string. getText(int)akan mempertahankan gaya teks kaya apa pun yang diterapkan pada string.

Referensi: https://developer.android.com/guide/topics/resources/string-resource.html


87
Anda dapat menyederhanakannya menjadi this.getString(R.string.some_id)jika Anda sudah berada dalam Context(Aktivitas atau Layanan).
Matthias

Saya menggunakan ini: String message + = getResources (). GetString (R.string.string1) + "some more word ..."; dan saya ingin mengirim string ini melalui sms, tetapi tidak berfungsi. Ini berfungsi dengan baik tanpa sumber daya string. Apakah saya melewatkan sesuatu?
keybee

9
Anda dapat menyederhanakannya lebih jauh ke getString (R.string.some_id). Dan jika Anda ingin menyesuaikan string, Anda dapat membuat string seperti "Selamat datang,% 1 $ s", maka Anda dapat menggunakan getString (R.string.some_id, "John Doe"). untuk mendapatkan "Selamat datang, John Doe" saat runtime.
M Granja

Juga berfungsi untuk tipe lain seperti yang baru saya gunakangetResouces().getInteger(R.integer.my_value_in_xml)
Noah Herron

61

Dalam Aktivitas:

this.getString(R.string.resource_name)

Jika tidak dalam kegiatan tetapi memiliki akses ke konteks:

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

3
Anda tidak harus memasukkan thissaat Anda berada di Aktivitas. Cukup getString()akan membiarkan Anda melakukan sesuatu.
CopsOnRoad

43

Saya menggunakan ini:

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

10
Peringatan - menurut jawaban ini mengutip dokumentasi android, menggunakan Resources.getSystem()tidak memberi Anda sumber daya aplikasi, tetapi hanya android. Seharusnya tidak digunakan untuk sumber daya seperti string. Saya menggunakan solusi ini dan aplikasi macet, melempar notfoundexceptionyang sulit dimengerti (karena sumber daya ada di strings.xml).
et_l

mencobanya juga - TIDAK berfungsi. terlalu bagus untuk menjadi kenyataan
:)

23

By the way, juga dimungkinkan untuk membuat array string di strings.xml seperti ini:

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

Dan kemudian dari Aktivitas Anda, Anda bisa mendapatkan referensi seperti:

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

Jawaban ini seharusnya ada di sana. Sebagian besar waktu, Anda membaca array dari XML bukan string tunggal.
Ojonugwa Jude Ochalifu

11

Hanya untuk referensi di masa mendatang.

Dalam dokumentasi sumber daya String dikatakan:

Anda bisa menggunakan getString (int) atau getText (int) untuk mengambil string. getText (int) akan> mempertahankan gaya teks kaya apa pun yang diterapkan pada string.


6

Solusi 1

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

Solusi 2

String mess = getString(R.string.mess_1)

3

Dalam fragmen, Anda bisa menggunakan

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

3

Misalnya, jika Anda ingin menambahkan nilai string ke tombol, gunakan sederhana

android:text="@string/NameOfTheString"

Teks yang didefinisikan dalam strings.xml terlihat seperti ini:

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

2

Anda harus merujuk nama Konteks sebelum menggunakan getResources()di Android.

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

ATAU

Context mcontext=getApplicationContext();

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

1

Anda dapat menggunakan kode ini:

 getText (R.string.mess_1); 

Pada dasarnya, Anda harus meneruskan id sumber daya sebagai parameter ke metode getText ().


1

Jika Anda berada dalam suatu kegiatan yang dapat Anda gunakan

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

Jika Anda tidak dalam suatu Aktivitas, gunakan ini:

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

1

Detail

  • Android Studio 3.1.4
  • Versi Kotlin: 1.2.60

Tugas

  • penggunaan satu baris
  • kode minimum
  • gunakan saran dari kompiler

Langkah 1. Aplikasi ()

Dapatkan tautan ke konteks aplikasi Anda

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()
    }

}

Langkah 2. Tambahkan ekstensi int

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

Pemakaian

strings.xml

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

Dapatkan nilai string:

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

Hasil

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini


1

selagi kamu menulis R. Anda merujuk ke R.javakelas yang dibuat oleh eclipse, gunakan getResources().getString()dan lulus iddari sumber yang Anda coba baca di dalam getString()metode.

Contoh: String[] yourStringArray = getResources().getStringArray(R.array.Your_array);


0

**

Saya harap kode ini bermanfaat

**

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

0

Memperbarui

  • Anda dapat menggunakan getString(R.string.some_string_id)keduanya Activityatau Fragment.
  • Anda dapat menggunakan di Context.getString(R.string.some_string_id)mana Anda tidak memiliki akses langsung ke getString()metode. Seperti Dialog.

Masalahnya adalah di mana Anda tidak memiliki Contextakses , seperti metode di Utilkelas Anda .

Asumsikan metode di bawah ini tanpa Konteks.

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

Sekarang Anda akan lulus Contextsebagai parameter dalam metode ini dan gunakangetString().

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

Apa yang saya lakukan adalah

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

Apa? Sangat mudah digunakan di mana saja di aplikasi Anda!

Jadi di sini adalah solusi unik Bonus di mana Anda dapat mengakses sumber daya dari mana saja seperti 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;
    }

}

Tambahkan bidang nama ke manifest.xml <applicationtag Anda .

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

Sekarang kamu baik untuk pergi.



0

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

Sekarang string Anda disalin ke myString. Saya harap ini akan berhasil untuk Anda.


0

Anda dapat membaca secara langsung nilai yang didefinisikan dalam strings.xml:

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

dan diatur ke dalam variabel:

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

tapi kita bisa mendefinisikan string ke tampilan:

<TextView
    android:id="@+id/myTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello"/>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.