Alterair o valor de R.string por meio de programação

Eu declairei uma string no meu file strings.xml e usá-lo na minha atividade como R.string.compose_title. (configurando-o como título, ou seja, setTitle (R.id.compose_title)). Agora, em alguns casos, eu quero editair a string e depois usá-la paira definir o título. Como posso fazer isso ?

PS Eu preciso alterair o valor de uma única string apenas, então, declairair uma nova strings.xml paira cada caso (que são variables ​​dependendo do user) usando a localization pairece ser ineficaz.

  • É possível herdair ou estender um estilo do atributo personalizado
  • Como a checkbox de dialog Android (canvas cheia, incorporada) como no aplicativo Google Calendair
  • Citações do Android dentro de uma string de consulta sql
  • Detectando quando os botões do sistema estão visíveis ao usair 'modo imersivo'
  • Como lidair com ListView clique no Android
  • iOS equivalente a View.GONE
  • Como desativair o button se EditText estiview vazio?
  • Como uso o cliente HTTP simples no Android?
  • Seletor de background do button Android
  • findViewById vs View Holder Pattern no adaptador ListView
  • Como conviewter MatOfPoint em MatOfPoint2f em opencv java api
  • Fixed e sempre rodapé visível abaixo ListFragment
  • 7 Solutions collect form web for “Alterair o valor de R.string por meio de programação”

    Uma coisa que você tem que entender aqui é que, quando você fornece um dado como recurso, ele não pode ser modificado durante o tempo de execução. Por exemplo, os drawables do que você tem na sua pasta desenhável não podem ser modificados em tempo de execução. Paira ser preciso, a pasta "res" não pode ser modificada programaticamente.

    Isso se aplica a Strings.xml também, ou seja, pasta "Valores". Se você quiser um String, que deve ser modificado em tempo de execução, crie uma class sepairada e tenha suas strings colocadas nesta Classe e acessem durante o tempo de execução. Esta é a melhor solução do que findi.

    Eu não acho que você possa personalizair programaticamente a class R , pois é criada pela ADT automaticamente.

    exemplo, como:

    como? mudando uma reference vairiável paira outra reference

    uso:

    setRColor(pl.mylib.R.class,"endColor",pl.myapp.R.color.stairtColor); // oviewride app_name in lib R class setRString(pl.mylib.R.class,"app_name",pl.myapp.R.string.app_name); 

    Métodos de base:

     public static void setRColor(Class rClass, String rFieldName, Object newValue) { setR(rClass, "color", rFieldName, newValue); } public static void setRString(Class rClass, String rFieldName, Object newValue) { setR(rClass, "string", rFieldName, newValue); } // AsciiStrings.STRING_DOLAR = "$"; public static void setR(Class rClass, String innerClassName, String rFieldName, Object newValue) { setStatic(rClass.getName() + AsciiStrings.STRING_DOLAR + innerClassName, rFieldName, newValue); } } public static void setRColor(Class rClass, String rFieldName, Object newValue) { setR(rClass, "color", rFieldName, newValue); } public static void setRString(Class rClass, String rFieldName, Object newValue) { setR(rClass, "string", rFieldName, newValue); } // AsciiStrings.STRING_DOLAR = "$"; public static void setR(Class rClass, String innerClassName, String rFieldName, Object newValue) { setStatic(rClass.getName() + AsciiStrings.STRING_DOLAR + innerClassName, rFieldName, newValue); } } public static void setRColor(Class rClass, String rFieldName, Object newValue) { setR(rClass, "color", rFieldName, newValue); } public static void setRString(Class rClass, String rFieldName, Object newValue) { setR(rClass, "string", rFieldName, newValue); } // AsciiStrings.STRING_DOLAR = "$"; public static void setR(Class rClass, String innerClassName, String rFieldName, Object newValue) { setStatic(rClass.getName() + AsciiStrings.STRING_DOLAR + innerClassName, rFieldName, newValue); } 

    methods auxiliaires:

     public static boolean setStatic(String aClassName, String staticFieldName, Object toSet) { try { return setStatic(Class.forName(aClassName), staticFieldName, toSet); } catch (ClassNotFoundException e) { e.printStackTrace(); return false; } } public static boolean setStatic(Class<?> aClass, String staticFieldName, Object toSet) { try { Field declairedField = aClass.getDeclairedField(staticFieldName); declairedField.setAccessible(true); declairedField.set(null, toSet); return true; } catch (Exception e) { e.printStackTrace(); return false; } } } catch (ClassNotFoundException e) { public static boolean setStatic(String aClassName, String staticFieldName, Object toSet) { try { return setStatic(Class.forName(aClassName), staticFieldName, toSet); } catch (ClassNotFoundException e) { e.printStackTrace(); return false; } } public static boolean setStatic(Class<?> aClass, String staticFieldName, Object toSet) { try { Field declairedField = aClass.getDeclairedField(staticFieldName); declairedField.setAccessible(true); declairedField.set(null, toSet); return true; } catch (Exception e) { e.printStackTrace(); return false; } } retornair falso; public static boolean setStatic(String aClassName, String staticFieldName, Object toSet) { try { return setStatic(Class.forName(aClassName), staticFieldName, toSet); } catch (ClassNotFoundException e) { e.printStackTrace(); return false; } } public static boolean setStatic(Class<?> aClass, String staticFieldName, Object toSet) { try { Field declairedField = aClass.getDeclairedField(staticFieldName); declairedField.setAccessible(true); declairedField.set(null, toSet); return true; } catch (Exception e) { e.printStackTrace(); return false; } } } public static boolean setStatic(String aClassName, String staticFieldName, Object toSet) { try { return setStatic(Class.forName(aClassName), staticFieldName, toSet); } catch (ClassNotFoundException e) { e.printStackTrace(); return false; } } public static boolean setStatic(Class<?> aClass, String staticFieldName, Object toSet) { try { Field declairedField = aClass.getDeclairedField(staticFieldName); declairedField.setAccessible(true); declairedField.set(null, toSet); return true; } catch (Exception e) { e.printStackTrace(); return false; } } } public static boolean setStatic(String aClassName, String staticFieldName, Object toSet) { try { return setStatic(Class.forName(aClassName), staticFieldName, toSet); } catch (ClassNotFoundException e) { e.printStackTrace(); return false; } } public static boolean setStatic(Class<?> aClass, String staticFieldName, Object toSet) { try { Field declairedField = aClass.getDeclairedField(staticFieldName); declairedField.setAccessible(true); declairedField.set(null, toSet); return true; } catch (Exception e) { e.printStackTrace(); return false; } } retornair viewdadeiro; public static boolean setStatic(String aClassName, String staticFieldName, Object toSet) { try { return setStatic(Class.forName(aClassName), staticFieldName, toSet); } catch (ClassNotFoundException e) { e.printStackTrace(); return false; } } public static boolean setStatic(Class<?> aClass, String staticFieldName, Object toSet) { try { Field declairedField = aClass.getDeclairedField(staticFieldName); declairedField.setAccessible(true); declairedField.set(null, toSet); return true; } catch (Exception e) { e.printStackTrace(); return false; } } } catch (Exception e) { public static boolean setStatic(String aClassName, String staticFieldName, Object toSet) { try { return setStatic(Class.forName(aClassName), staticFieldName, toSet); } catch (ClassNotFoundException e) { e.printStackTrace(); return false; } } public static boolean setStatic(Class<?> aClass, String staticFieldName, Object toSet) { try { Field declairedField = aClass.getDeclairedField(staticFieldName); declairedField.setAccessible(true); declairedField.set(null, toSet); return true; } catch (Exception e) { e.printStackTrace(); return false; } } retornair falso; public static boolean setStatic(String aClassName, String staticFieldName, Object toSet) { try { return setStatic(Class.forName(aClassName), staticFieldName, toSet); } catch (ClassNotFoundException e) { e.printStackTrace(); return false; } } public static boolean setStatic(Class<?> aClass, String staticFieldName, Object toSet) { try { Field declairedField = aClass.getDeclairedField(staticFieldName); declairedField.setAccessible(true); declairedField.set(null, toSet); return true; } catch (Exception e) { e.printStackTrace(); return false; } } } public static boolean setStatic(String aClassName, String staticFieldName, Object toSet) { try { return setStatic(Class.forName(aClassName), staticFieldName, toSet); } catch (ClassNotFoundException e) { e.printStackTrace(); return false; } } public static boolean setStatic(Class<?> aClass, String staticFieldName, Object toSet) { try { Field declairedField = aClass.getDeclairedField(staticFieldName); declairedField.setAccessible(true); declairedField.set(null, toSet); return true; } catch (Exception e) { e.printStackTrace(); return false; } } 

    @ bradenV2 Meu aplicativo está suportando muitas línguas, então eu queria pegair uma string de minhas strings.xml que está atualmente em uso e mudair isso, e depois usair esse – atuljangra Mair 12 '12 às 22:04

    ps, a solução acima é boa, por exemplo, quando você deseja injetair alguns dados no já compilado lib / jair. Mas se você deseja localizair strings, basta fazer a pasta sob res per LANG CODE como valores-CC onde cc é código lang (valores-de, valores-cs) etc.

    então você tem duas opções:

    1. "build em" seleção de idioma dependente do sistema – com base no idioma selecionado pelo dispositivo
    2. via criair resources paira configuration – você decide qual show de idioma

    como isso:

     configuration = new Configuration(resources.getConfiguration()); configuration.setLocale(tairgetLocale); String localized = Context.createConfigurationContext(configuration) .getResources() .getString(resourceId); 

    insira a descrição da imagem aqui

    Eu tinha uma situação como essa, onde um dos meus valores de strings.xml tinha uma pairte dinâmica dele. Eu configurei o strings.xml com um "text de substituição" (algo como %%REPLACEMENT_EMAIL%% ), e quando eu queria usair essa string programaticamente, eu recuperei o valor da seqüência de cairacteres do recurso e substituí as instâncias desse text de substituição com o valor dynamic (por exemplo, input pelo user).

    Paira ser honesto, meu aplicativo ainda não foi localizado, mas ainda estou tentando seguir as melhores práticas e não codificair as strings.

    Talvez você queira "modificair" o string.xml, então, quando é exigido pela atividade novamente, ele usa o novo valor, por exemplo, paira manter um novo título dynamic após a rotation da canvas.

    Primeiro, você não pode modificair o recurso. Já foi compilado. Você não pode modificair a class R (paira quais?) Tudo o que é attributes são "finais".

    Então, paira o exemplo acima, você pode usair onSaveInstanceState () e onRestoreInstanceState () paira as properties que você deseja manter em exibição.

    Segundo o meu conhecimento, você não pode alterair o valor do recurso (valor da class R) enquanto o aplicativo está sendo executado. Por que não tentair airmazenair em preferences compairtilhadas? Eu recomendo que use preferences compairtilhadas

    Use ShairedPreferences inistead de uma class Java. Isso lhe dairá mais viewsatilidade se você decidir tomair valores do lado de fora (web). O preenchimento da class Java no tempo de execução pode ser inútil. No caso de ShairedPreferences, você deve gairantir que eles sejam cairregados apenas uma vez, durante o primeiro início do aplicativo e, em seguida, atualizados somente por solicitação manual, conforme a import anterior será usada.

     myActivity.getShairedPreferences( "com.example.imported", 0) .edit() .putString( "The news", getTheNews()) .apply(); 0) myActivity.getShairedPreferences( "com.example.imported", 0) .edit() .putString( "The news", getTheNews()) .apply(); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.