android string.xml değeri nasıl okunur?


368

Satırı yazdım:

String Mess = R.string.mess_1 ;

dize değeri almak için, ancak dize döndürmek yerine, bana tamsayı türü kimliği veriyor. Dize değerini nasıl alabilirim? string.xmlDosyadaki dize değerinden bahsettim .

Yanıtlar:


807

Bunu dene

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

GÜNCELLEME

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

Bir dize almak için getString(int)veya getText(int)öğelerinden birini kullanabilirsiniz . getText(int)dizeye uygulanan zengin metin stillerini koruyacaktır.

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


87
this.getString(R.string.some_id)zaten bir Context(Etkinlik veya Hizmet) içindeyseniz bunu basitleştirebilirsiniz .
Matthias

Bunu kullandım: String message + = getResources (). GetString (R.string.string1) + "biraz daha kelime ..."; ve bu dizeyi sms ile göndermek istedim, ama çalışmıyor. Dize kaynağı olmadan iyi çalışır. Bir şey mi kaçırıyorum?
keybee

9
GetString (R.string.some_id) işlevini daha da basitleştirebilirsiniz. Dizeyi özelleştirmek istiyorsanız, dizeyi "Hoş Geldiniz,% 1 $ s" gibi bir şey yapabilirsiniz, getString (R.string.some_id, "John Doe") kullanabilirsiniz. "John Doe" hoş geldiniz.
M Granja

Ayrıca az önce kullandığım tipler için de çalışıyorgetResouces().getInteger(R.integer.my_value_in_xml)
Noah Herron

61

Faaliyette:

this.getString(R.string.resource_name)

Faaliyette değil ancak içeriğe erişimi varsa:

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

3
thisEtkinlik'deyken dahil etmeniz gerekmez . Sadece bir getString()şeyler yapmanıza izin verir.
CopsOnRoad

43

Bunu kullanıyorum:

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

10
Uyarı - bu cevaba göre android belgelerini alıntı, kullanma Resources.getSystem()size uygulama kaynakları vermez, sadece android's. Gibi kaynaklar için kullanılmamalıdır string. Bu çözümü kullandım ve uygulama çöktü, notfoundexceptionanlaşılması zor bir kaynak fırlattı (kaynak var olduğu için strings.xml).
et_l

de denedim - çalışmıyor. gerçek olamayacak kadar iyi
:)

23

Bu arada, strings.xml dosyasında dize dizileri oluşturmak da mümkündür:

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

Ve sonra Faaliyetinizden referansı şu şekilde alabilirsiniz:

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

Çoğu zaman tek dizeleri değil XML dizilerini okuyorsunuz.
Ojonugwa Jude Ochalifu

11

Sadece gelecekteki referanslarımız için.

Gelen dize kaynakları belgelerine diyor:

Bir dize almak için getString (int) veya getText (int) kullanabilirsiniz. getText (int)> dizeye uygulanan zengin metin stillerini korur.


6

Çözüm 1

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

Çözüm 2

String mess = getString(R.string.mess_1)

3

Parçalarda kullanabilirsiniz

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

3

Dize değerini örneğin bir düğmeye eklemek istiyorsanız, basit kullanım

android:text="@string/NameOfTheString"

Strings.xml dosyasında tanımlanan metin şöyle görünür:

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

2

getResources()Android'de kullanmadan önce Bağlam adına başvurmanız gerekir .

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

VEYA

Context mcontext=getApplicationContext();

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

1

Bu kodu kullanabilirsiniz:

 GetText (R.string.mess_1); 

Temel olarak, getText () yöntemine kaynak kimliğini parametre olarak iletmeniz gerekir.


1

Bir aktivitedeyseniz kullanabilirsiniz

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

Bir Faaliyette değilseniz, bunu kullanın:

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

1

ayrıntılar

  • Android Studio 3.1.4
  • Kotlin sürümü: 1.2.60

Görev

  • tek hat kullanımı
  • minimum kod
  • derleyiciden önerileri kullan

Adım 1. Uygulama ()

Uygulamanızın bağlamına bağlantı alı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()
    }

}

2. Adım. İnt uzantısı ekleyin

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

kullanım

strings.xml

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

Dize değerini al:

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

Sonuçlar

resim açıklamasını buraya girin resim açıklamasını buraya girin


1

sen yazarken R. R.javaeclipse tarafından oluşturulan sınıfa atıfta bulunuyorsunuz , metodun içinde okumaya çalıştığınız kaynağın kullanılmasını getResources().getString()ve aktarılmasını idsağlıyorsunuz getString().

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


0

**

Umarım bu kod faydalıdır

**

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

0

Güncelleme

  • Sen kullanabilirsiniz getString(R.string.some_string_id)hem Activityya Fragment.
  • Yönteme Context.getString(R.string.some_string_id)doğrudan erişiminizin olmadığı yerlerde kullanabilirsiniz getString(). Gibi Dialog.

Sorun , sınıfınızdaki bir yöntem gibi erişiminizin olmadığıContext yerdir Util.

Aşağıdaki yöntemi Bağlam olmadan varsayalım.

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

Şimdi Contextbu yöntemde bir parametre olarak geçeceksiniz vegetString().

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

Yaptığım şey

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

Ne? Uygulamanızın herhangi bir yerinde kullanmak çok basit!

İşte size kaynaklara herhangi bir yerden erişebileceğiniz benzersiz bir Bonus çözümü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;
    }

}

manifest.xml <applicationEtiketinize ad alanı ekleyin .

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

Şimdi gitmekte fayda var.



0

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

Şimdi dizeniz myString'e kopyalanır. Umarım senin için çalışır.


0

Doğrudan strings.xml dosyasında tanımlanan değeri okuyabilirsiniz:

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

ve bir değişkene ayarlanır:

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

ancak dizeyi görünüme tanımlayabiliriz:

<TextView
    android:id="@+id/myTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello"/>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.