string Android: ¿Cómo obtengo una cadena de recursos usando su nombre?



5 Answers

Tengo el mismo problema. Pero este código a continuación funciona para mí: verifique si su nombre de paquete es correcto. Tienes que referirte al paquete raíz de tu aplicación de Android.

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

Me gustaría tener 2 idiomas para la interfaz de usuario y valores de cadena separados para ellos en mi archivo de recursos 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>

Ahora necesito recuperar estos valores dinámicamente en mi aplicación:

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);

Mi problema es que i = 0 .

¿Por qué no funciona en mi caso?




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






También hay un conjunto de cadenas de Android predefinidas como "Ok", "Cancel" y muchas otras, para que no tenga que declarar todo. Están disponibles simplemente por:

getString(android.R.string.ok)

(En este caso, "Ok" cadena). Por cierto, también hay otros recursos de Android disponibles como, por ejemplo, imágenes de iconos, etc.




El mejor enfoque único

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

Esto funcionará en todas partes en la aplicación.

He leído todas las respuestas, todas las respuestas pueden hacer su trabajo.

  • Puede usar getString(R.string.some_string_id) en Activity o Fragment .
  • Puede usar Context.getString(R.string.some_string_id) donde no tiene acceso directo al método getString() . Como Dialog

Problema

Cuando no tiene acceso de Context , como un método en su clase Util .

Supongamos el siguiente método sin contexto.

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

Ahora pasará Context como parámetro en este método y usará getString().

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

Lo que hago es

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

¿Qué? ¡Es muy simple de usar en cualquier parte de tu aplicación!

Así que aquí hay una solución exclusiva de Bonus mediante la cual puede acceder a recursos desde cualquier lugar como 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;
    }

}

Agregue el campo de nombre a su manifest.xml <application etiqueta de <application .

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

Ahora eres bueno para irte. Use App.getRes().getString(R.string.some_id) en cualquier lugar de la aplicación.






Related