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





titulo activity (10)


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.

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?




Una forma sencilla de obtener una cadena de recursos de una cadena en un TextView. Aquí resourceName es el nombre del recurso

int resID = getResources().getIdentifier(resourceName, "string", getPackageName());
textview.setText(resID);



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.




Me gustaría agregar algo a la solución de leonvian, por lo que si por casualidad la cadena no se encuentra entre los recursos (valor de retorno 0, que no es un código de recurso válido), la función podría devolver algo:

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



Si no tiene una referencia de actividad, puede usar su contexto de esta manera:

getContext().getString(R.string.your_string_name);



String myString = getString (R.string.mystring);

forma fácil




No solo de actividades:

    public static String byIdName(Context context, String name) {
        Resources res = context.getResources();
        return res.getString(res.getIdentifier(name, "string", context.getPackageName()));
    }



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



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



Además, puedes sobrescribir algunas variables:

s = input('UPPER CASE')
lower = s.lower()

Si lo usas así:

s = "Kilometer"
print(s.lower())     - kilometer
print(s)             - Kilometer

Funcionará justo cuando se llama.





android string resources