studio layout_width layout_weight gridlayout examples ejemplos ejemplo dinamico android android-xml

android - layout_width - ¿Conseguir una cadena de Plurales para usar en XML?



layout dinamico android (4)

Estoy usando Plurals para simplificar mi código. por ejemplo, solía tener

<string name="cat">Cat</string> <string name="cats">Cats</string>

Usando plurales en lugar de múltiples cadenas, ahora tengo

<plurals name="cats"> <item quantity="one">Cat</item> <item quantity="other">Cats</item> </plurals>

Sin embargo, solía recuperar cadenas para usar como títulos o resúmenes en mi XML. p.ej,

android:title="@string/cats"

Después de haber eliminado esa cadena en favor de un plural, ahora no estoy seguro de cómo recuperar mi cadena de XML. Hice un intento ingenuo con

android:title="@plurals/cats"

pero esto solo me da @1234567890 lugar de Cats (o Cat ).

¿Alguien sabe si es posible recuperar una cadena de un plural de XML?


Aquí hay una forma de usar un recurso plural como un atributo de su Vista personalizada.

src / main / res / xml / layout.xml

<com.mypackage.MyView app:foo="@plurals/cats"/>

src / main / res / values ​​/ attrs.xml

<resources> <declare-styleable name="MyView"> <attr name="foo"/> </declare-styleable> </resources>

MyView.java

public class MyView extends View { private int fooResId; private int quantity; public MyView(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyView); fooResId = a.getResourceId(R.styleable.MyView_foo, 0); a.recycle(); } // this will return "Cat" or "Cats" depending on the value of quantity private String getFooString() { return getContext().getResources().getQuantityString(fooResId, quantity); } }


Puede tener los beneficios en tiempo de ejecución de Plurals y el beneficio estático de los recursos de cadena dejando sus recursos de cadena donde están y refiriéndose a ellos en sus recursos plurales.

Desde developer.android.com/guide/topics/resources/… (énfasis agregado).

<item>

Una cadena plural o singular. El valor puede ser una referencia a otro recurso de cadena. Debe ser un hijo de un elemento. Tenga en cuenta que debe escapar de apóstrofes y comillas. Consulte Formateo y estilo, a continuación, para obtener información acerca del estilo y el formato adecuados de sus cadenas. Ejemplo:

<string name="cat">Cat</string> <string name="cats">Cats</string> <plurals name="cats"> <item quantity="one">@string/cat</item> <item quantity="other">@string/cats</item> </plurals>

Ahora puedes usar android:title="@string/cats" en archivos XML y también usar

getQuantityString(R.plurals.cats, numberOfCats)

en tiempo de ejecución.


Si su cadena incluye un formato de cadena con un número, entonces necesita enviar la variable entera dos veces, por ejemplo

strings.xml

<resources> <plurals name="numberOfMinute"> <item quantity="one">%d minute</item> <item quantity="other">%d minutes</item> </plurals> </resources>

en java

int min = getNumberOfMinute(); Resources res = getResources(); String formattedStr = res.getQuantityString(R.plurals.numberOfMinute, min, min); //this will return "20 minutes" or "1 minute" depending on cariable


Tienes que configurarlo por código:

...setText(yourContext.getResources().getQuantityString(R.plurals.cats, catsCountVar));