resources Android: come posso ottenere una stringa dalle risorse usando il suo nome?



5 Answers

Ho lo stesso problema. Ma questo codice qui sotto funziona per me: verifica se il tuo packageName è corretto. Devi fare riferimento per il pacchetto radice della tua applicazione Android.

private String getStringResourceByName(String aString) {
      String packageName = getPackageName();
      int resId = getResources().getIdentifier(aString, "string", packageName);
      return getString(resId);
    }
android string resources

Mi piacerebbe avere 2 lingue per l'interfaccia utente e valori di stringa separati per loro nel mio file di risorse res\values\strings.xml :

<string name="tab_Books_en">Books</string>
<string name="tab_Quotes_en">Quotes</string>
<string name="tab_Questions_en">Questions</string>
<string name="tab_Notes_en">Notes</string>
<string name="tab_Bookmarks_en">Bookmarks</string>

<string name="tab_Books_ru">Книги</string>
<string name="tab_Quotes_ru">Цитаты</string>
<string name="tab_Questions_ru">Вопросы</string>
<string name="tab_Notes_ru">Заметки</string>
<string name="tab_Bookmarks_ru">Закладки</string>

Ora ho bisogno di recuperare questi valori dinamicamente nella mia app:

spec.setContent(R.id.tabPage1);
String pack = getPackageName();
String id = "tab_Books_" + Central.lang;
int i = Central.Res.getIdentifier(id, "string", pack);
String str = Central.Res.getString(i);

Il mio problema è che i = 0 .

Perché non funziona nel mio caso?




getResources().getString(getResources().getIdentifier("propertyName", "string", getPackageName()))






C'è anche un set di stringhe Android predefinite come "Ok", "Annulla" e molte altre - quindi non devi dichiarare tutto. Sono disponibili semplicemente da:

getString(android.R.string.ok)

(In questo caso, stringa "Ok"). A proposito ci sono anche altre risorse Android disponibili come ad esempio immagini di icone ecc.




Il miglior approccio unico

App.getRes().getString(R.string.some_id)

questo funzionerà ovunque nell'app.

Ho letto tutte le risposte, tutte le risposte possono fare il tuo lavoro.

  • Puoi usare getString(R.string.some_string_id) sia in Activity che in Fragment .
  • È possibile utilizzare Context.getString(R.string.some_string_id) cui non si ha accesso diretto al metodo getString() . Mi piace il Dialog

Problema

Quando non hai accesso al Context , come un metodo nella tua classe Util .

Assumi di seguito il metodo senza contesto.

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

Ora passerai Context come parametro in questo metodo e userai getString().

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

Quello che faccio è

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

Che cosa? È molto semplice da usare ovunque nella tua app!

Quindi ecco una soluzione unica di bonus con la quale è possibile accedere alle risorse da qualsiasi luogo come la 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;
    }

}

Aggiungi il campo nome al tag manifest.xml <application .

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

Ora sei a posto. Usa App.getRes().getString(R.string.some_id) ovunque nell'app.




Related