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.

UMAR
sumber

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

ccheneson
sumber
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)
Hakan Cakirkan
sumber
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);
Robertas Uldukis
sumber
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"
oabarca
sumber
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.

Alvaro
sumber
6

Solusi 1

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

Solusi 2

String mess = getString(R.string.mess_1)
Viktor
sumber
3

Dalam fragmen, Anda bisa menggunakan

getActivity().getString(R.id.whatever);
ir2pid
sumber
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>
Bondus
sumber
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);
Ashish Vora
sumber
1

Anda dapat menggunakan kode ini:

 getText (R.string.mess_1); 

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

coderz
sumber
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)
Hoque MD Zahidul
sumber
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

Bodnarchuk dengan mudah
sumber
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);

Giridhar Karnik
sumber
0

**

Saya harap kode ini bermanfaat

**

String user = getResources().getString(R.string.muser); 
dhiraj kakran
sumber
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.

Khemraj
sumber
0

getString (R.string.your_string) dapatkan hasilnya

Bisht Lalit
sumber
0

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

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

KAbhijeet21
sumber
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"/>
Jorgesys
sumber