Поиск…


Перевести строку

Строки могут быть интернационализированы путем определения другого strings.xml для каждого поддерживаемого вами языка.

Вы добавляете новый язык, создавая новый каталог значений с кодом языка ISO в качестве суффикса. Например, при добавлении немецкого набора ваша структура может выглядеть следующим образом:

введите описание изображения здесь

Когда система ищет запрашиваемую строку, она сначала проверяет специфический для языка xml, если он не найден, возвращается значение из файла strings.xml по умолчанию. Ключ остается неизменным для каждого языка, и изменяется только значение.

Пример содержимого:

/res/values/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">HelloWorld</string>
    <string name="hello_world">Hello World!</string>
</resources>

/res/values-fr/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello_world">Bonjour tout le monde !!!</string>
</resources>

Определить строки

Строки обычно хранятся в файле ресурсов strings.xml . Они определяются с помощью XML-элемента <string> .

Цель strings.xml - разрешить интернационализацию. Вы можете определить strings.xml для каждого языка iso-кода. Таким образом, когда система ищет строку «app_name», она сначала проверяет файл xml, соответствующий текущему языку, и если он не найден, ищет запись в файле strings.xml по умолчанию. Это означает, что вы можете выбрать локализовать некоторые из ваших строк, а не другие.

/res/values/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Hello World App</string>
    <string name="hello_world">Hello World!</string>
</resources>

Как только строка определена в файле ресурсов XML, ее можно использовать другими частями приложения.

Файлы проекта проекта XML могут использовать элемент <string> , ссылаясь на @string/string_name . Например, файл манифеста приложения (/manifests/AndroidManifest.xml) включает в себя следующую строку по умолчанию в Android Studio:

android:label="@string/app_name"

Это говорит андроиду искать ресурс <string> называемый «имя приложения», для использования в качестве имени для приложения, когда он установлен или отображается в панели запуска.

В другой раз, когда вы используете ресурс <string> из файла XML в android, вы будете в файле макета. Например, следующее представляет TextView, который отображает строку hello_world мы определили ранее:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world"/>

Вы также можете получить доступ к ресурсам <string> из части java вашего приложения. Чтобы отозвать нашу же hello_world сверху в классе Activity, используйте:

String helloWorld = getString(R.string.hello_world);

Определить массив строк

Чтобы определить строковый массив, напишите в файле ресурсов

RES / значения / filename.xml

<string-array name="string_array_name">
    <item>text_string</item>
    <item>@string/string_id</item>
</string-array>

например

RES / значения / arrays.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="string_array_example">
        <item>@string/app_name</item>
        <item>@string/hello_world</item>
    </string-array>
</resources>

и использовать его из java как

String[] strings = getResources().getStringArray(R.array.string_array_example;
Log.i("TAG",Arrays.toString(strings)));

Выход

I/TAG: [HelloWorld, Hello World!]

Определить размеры

Размеры обычно хранятся в именах файлов ресурсов dimens.xml . Они определяются с помощью элемента <dimen> .

RES / значения / dimens.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="small_padding">5dp</dimen>
    <dimen name="medium_padding">10dp</dimen>
    <dimen name="large_padding">20dp</dimen>

    <dimen name="small_font">14sp</dimen>
    <dimen name="medium_font">16sp</dimen>
    <dimen name="large_font">20sp</dimen>
</resources> 

Вы можете использовать разные единицы:

  • sp: Масштабируемые пиксели. Для шрифтов.
  • dp: независимые от плотности пиксели. Для всего остального.
  • pt: Очки
  • px: пиксели
  • мм: миллиметры
  • im: Дюймы

Теперь размеры могут быть @dimen/name_of_the_dimension в XML с синтаксисом @dimen/name_of_the_dimension .

Например:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/large_padding">
</RelativeLayout>

Определить целые числа

Целые элементы обычно хранятся в файле ресурсов с именем integers.xml , но имя файла может быть выбрано произвольно. Каждое целое число определяется с помощью элемента <integer> , как показано в следующем файле:

RES / значения / integers.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="max">100</integer>
</resources> 

Теперь целые числа можно ссылаться в XML с синтаксисом @integer/name_of_the_integer , как показано в следующем примере:

<ProgressBar
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:max="@integer/max"/>

Определить целочисленный массив

Чтобы определить целочисленный массив, напишите в файле ресурсов

RES / значения / filename.xml

<integer-array name="integer_array_name">
    <item>integer_value</item>
    <item>@integer/integer_id</item>
</integer-array>

например

RES / значения / arrays.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer-array name="fibo">
        <item>@integer/zero</item>
        <item>@integer/one</item>
        <item>@integer/one</item>
        <item>@integer/two</item>
        <item>@integer/three</item>
        <item>@integer/five</item>
    </integer-array>
</resources>

и использовать его из java как

int[] values = getResources().getIntArray(R.array.fibo);
Log.i("TAG",Arrays.toString(values)));

Выход

I/TAG: [0, 1, 1, 2, 3, 5]

Определение цветов

Цвета обычно хранятся в файле ресурсов с именем colors.xml в colors.xml /res/values/ .

Они определяются элементами <color> :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>

    <color name="blackOverlay">#66000000</color>
</resources>

Цвета представлены шестнадцатеричными значениями цвета для каждого цветового канала (0 - FF) в одном из форматов:

  • #RGB
  • #ARGB
  • #RRGGBB
  • #AARRGGBB

легенда

  • Значение A - alpha channel - 0 полностью прозрачно, значение FF непрозрачно
  • R - красный канал
  • G - зеленый канал
  • B - синий канал

Определенные цвета могут использоваться в XML со следующим синтаксисом @color/name_of_the_color

Например:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/blackOverlay">

Использование цветов в коде

Эти примеры предполагают, что this ссылка на активность. Ссылка на контекст может использоваться и на своем месте.

1,6
int color = ContextCompat.getColor(this, R.color.black_overlay);
view.setBackgroundColor(color);
6,0
int color = this.getResources().getColor(this, R.color.black_overlay);
view.setBackgroundColor(color);

В вышеуказанной декларации colorPrimary , colorPrimaryDark и colorAccent используются для определения цветов дизайна материалов, которые будут использоваться при определении пользовательской темы Android в styles.xml . Они автоматически добавляются при создании нового проекта с помощью Android Studio.

Получение ресурсов без «устаревших» предупреждений

Используя Android API 23 или выше, очень часто можно увидеть такую ​​ситуацию:

введите описание изображения здесь

Эта ситуация вызвана структурными изменениями API Android в отношении получения ресурсов.
Теперь функция:

public int getColor(@ColorRes int id, @Nullable Theme theme) throws NotFoundException    

должен быть использован. Но в библиотеке android.support.v4 есть другое решение.

Добавьте следующую зависимость в файл build.gradle :

com.android.support:support-v4:24.0.0

Затем доступны все методы из библиотеки поддержки:

ContextCompat.getColor(context, R.color.colorPrimaryDark);
ContextCompat.getDrawable(context, R.drawable.btn_check);
ContextCompat.getColorStateList(context, R.color.colorPrimary);
DrawableCompat.setTint(drawable);
ContextCompat.getColor(context,R.color.colorPrimaryDark));

Кроме того, можно использовать больше методов из библиотеки поддержки:

ViewCompat.setElevation(textView, 1F);
ViewCompat.animate(textView);
TextViewCompat.setTextAppearance(textView, R.style.AppThemeTextStyle);
...

Определите ресурс меню и используйте его внутри Activity / Fragment

Определить меню в res / menu

<?xml version="1.0" encoding="utf-8"?>
<menu
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/first_item_id"
        android:orderInCategory="100"
        android:title="@string/first_item_string"
        android:icon="@drawable/first_item_icon"
        app:showAsAction="ifRoom"/>

    <item
        android:id="@+id/second_item_id"
        android:orderInCategory="110"
        android:title="@string/second_item_string"
        android:icon="@drawable/second_item_icon"
        app:showAsAction="ifRoom"/>

</menu>

Дополнительные параметры конфигурации см. В разделе : Ресурс меню

Внутри Activity :

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    ///Override defining menu resource
    inflater.inflate(R.menu.menu_resource_id, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

@Override
public void onPrepareOptionsMenu(Menu menu) {
    //Override for preparing items (setting visibility, change text, change icon...)
    super.onPrepareOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    //Override it for handling items
    int menuItemId = item.getItemId();
    switch (menuItemId) {
        case: R.id.first_item_id
             return true; //return true, if is handled
    }
    return super.onOptionsItemSelected(item);
}

Для вызова методов выше при показе представления вызовите getActivity().invalidateOptionsMenu();

Внутри Fragment дополнительный вызов:

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    setHasOptionsMenu(true);
    super.onCreateView(inflater, container, savedInstanceState);
}

Форматирование строк в strings.xml

Определение строк в файле strings.xml также позволяет форматировать строки. Единственное предостережение в том, что String нужно будет обрабатывать в коде, как показано ниже, или просто привязывать его к макету.

<string name="welcome_trainer">Hello Pokémon Trainer, %1$s! You have caught %2$d Pokémon.</string>
String welcomePokemonTrainerText = getString(R.string.welcome_trainer, tranerName, pokemonCount);

В приведенном выше примере,
% 1 $ s
«%» отделяется от обычных символов,
'1' обозначает первый параметр,
'$' используется как разделитель между номером параметра и типом,
's' обозначает тип строки ('d' используется для целого числа)

Обратите внимание: getString() - это метод Context или Resources , т. getActivity().getString() Вы можете использовать его непосредственно в экземпляре Activity , иначе вы можете использовать getActivity().getString() или getContext().getString() соответственно.

Определить список состояний цвета

Списки состояния цвета могут использоваться как цвета, но будут меняться в зависимости от состояния вида, для которого они используются.

Чтобы определить один, создайте файл ресурсов в res/color/foo.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#888888" android:state_enabled="false"/>
    <item android:color="@color/lightGray" android:state_selected="false"/>
    <item android:color="@android:color/white" />
</selector>

Элементы оцениваются в том порядке, в котором они определены, и используется первый элемент, чьи указанные состояния соответствуют текущему состоянию представления. Таким образом, хорошая практика заключается в том, чтобы указать конечную точку, без каких-либо определенных селекторов.

Каждый элемент может использовать цветной литерал или ссылаться на цвет, определенный в другом месте.

Определение строковых множеств

Чтобы различать множественные и сингулярные строки, вы можете определить множественное число в файле strings.xml и указать разные количества, как показано в следующем примере:

<?xml version="1.0" encoding="utf-8"?>
<resources>  
    <plurals name="hello_people">
        <item quantity="one">Hello to %d person</item>
        <item quantity="other">Hello to %d people</item>
    </plurals>
</resources>

Это определение можно получить из кода Java с помощью getQuantityString() класса Resources , как показано в следующем примере:

getResources().getQuantityString(R.plurals.hello_people, 3, 3);

Здесь первый параметр R.plurals.hello_people - это имя ресурса. Второй параметр ( 3 в этом примере) используется для выбора правильной строки quantity . Третий параметр (также 3 в этом примере) - это аргумент формата, который будет использоваться для замены спецификатора формата %d .

Возможные значения количества (перечислены в алфавитном порядке):

few
many
one
other
two
zero

Важно отметить, что не все локали поддерживают каждую номинал quantity . Например, китайский язык не имеет понятия об one элементе. У английского языка нет zero элемента, так как он грамматически совпадает с other . Неподдерживаемые экземпляры quantity будут помечены IDE как предупреждения Lint, но не будут вызывать ошибки сложности, если они используются.

Импортировать массив объектов, определенных в ресурсах

Бывают случаи, когда пользовательские объекты должны быть созданы и определены в ресурсах приложения. Такие объекты могут состоять из простых типов Java , например Integer , Float , String .

Ниже приведен пример того, как импортировать объект, определенный в ресурсах приложения. Объект Category 3 свойства категории:

  • Я БЫ
  • цвет
  • название

Этот POJO имеет эквивалент в файле categories.xml , где каждый из массива имеет те же свойства, которые определены для каждой категории.

  1. Создайте модель для объекта:
public class Category {
    private Type id;
    private @ColorRes int color;
    private @StringRes String name;

    public Category getId() {
        return id;
    }

    public void setId(Category id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getColor() {
        return color;
    }

    public void setColor(int color) {
        this.color = color;
    }

    public enum Type{
        REGISTRATION,
        TO_ACCEPT,
        TO_COMPLETE,
        TO_VERIFY,
        CLOSED
    }
}
  1. Создайте файл в папке res/values :

categories.xml

  1. Составьте каждую модель, состоящую из ресурсов:
<array name="no_action">
    <item>0</item>
    <item>@android:color/transparent</item>
    <item>@string/statusRegistration</item>
</array>
<array name="to_accept">
    <item>1</item>
    <item>@color/light_gray</item>
    <item>@string/acceptance</item>
</array>
<array name="opened">
    <item>2</item>
    <item>@color/material_green_500</item>
    <item>@string/open</item>
</array>
<array name="to_verify">
    <item>3</item>
    <item>@color/material_gray_800</item>
    <item>@string/verification</item>
</array>
<array name="to_close">
    <item>4</item>
    <item>@android:color/black</item>
    <item>@string/closed</item>
</array>
  1. Определить массив в файле ресурсов:

    <array name="categories">
        <item>@array/no_action</item>
        <item>@array/to_accept</item>
        <item>@array/opened</item>
        <item>@array/to_verify</item>
        <item>@array/to_close</item>
    </array>
    
  2. Создайте функцию для их импорта:

    @NonNull
    public List<Category> getCategories(@NonNull Context context) {
    final int DEFAULT_VALUE = 0;
    final int ID_INDEX = 0;
    final int COLOR_INDEX = 1;
    final int LABEL_INDEX = 2;
    
    if (context == null) {
        return Collections.emptyList();
    }
    // Get the array of objects from the `tasks_categories` array
    TypedArray statuses = context.getResources().obtainTypedArray(R.array.categories);
    if (statuses == null) {
        return Collections.emptyList();
    }
    List<Category> categoryList = new ArrayList<>();
    for (int i = 0; i < statuses.length(); i++) {
        int statusId = statuses.getResourceId(i, DEFAULT_VALUE);
        // Get the properties of one object
        TypedArray rawStatus = context.getResources().obtainTypedArray(statusId);
    
        Category category = new Category();
    
        int id = rawStatus.getInteger(ID_INDEX, DEFAULT_VALUE);
        Category.Type categoryId;
        //The ID's should maintain the order with `Category.Type`
        switch (id) { 
            case 0:
                categoryId = Category.Type.REGISTRATION;
                break;
            case 1:
                categoryId = Category.Type.TO_ACCEPT;
                break;
            case 2:
                categoryId = Category.Type.TO_COMPLETE;
                break;
            case 3:
                categoryId = Category.Type.TO_VERIFY;
                break;
            case 4:
                categoryId  = Category.Type.CLOSED;
                break;
            default:
                categoryId = Category.Type.REGISTRATION;
                break;
        }
        category.setId(categoryId);
    
        category.setColor(rawStatus.getResourceId(COLOR_INDEX, DEFAULT_VALUE));
    
        int labelId = rawStatus.getResourceId(LABEL_INDEX, DEFAULT_VALUE);
        category.setName(getString(context.getResources(), labelId));
    
        categoryList.add(taskCategory);
    }
    return taskCategoryList;
    }
    

9 патчей

9 Патч - это растяжимые изображения, в которых области, которые могут быть растянуты, определяются черными маркерами на прозрачной границе.

Существует большой учебник здесь .
Несмотря на то, что он настолько стар, он по-прежнему так ценен, и он помог многим из нас глубоко понять 9 патч-экипировку.

К сожалению, недавно эта страница была отложена на некоторое время (сейчас она снова включена).

Следовательно, необходимо иметь физическую копию этой страницы для разработчиков Android на наших надежных серверах.

Вот.

ПРОСТОЕ РУКОВОДСТВО ДЛЯ 9-PATCH ДЛЯ ANDROID UI 18 мая 2011 г.

Пока я работал над своим первым Android-приложением, я нашел 9-patch (aka 9.png), чтобы запутать и плохо документировать. Через некоторое время я наконец понял, как это работает, и решил собрать что-то, чтобы помочь другим понять это.

В принципе, 9-patch использует прозрачность png, чтобы сделать расширенную форму 9-среза или scale9. Направляющие - прямые, 1-пиксельные черные линии, нарисованные на краю вашего изображения, которые определяют масштабирование и заливку вашего изображения. Назвав ваш файл изображения name.9.png, Android распознает формат 9.png и использует черные направляющие для масштабирования и заполнения ваших растровых изображений.

Вот базовая карта:

введите описание изображения здесь

Как вы можете видеть, у вас есть руководства по каждой стороне вашего изображения. Направляющие TOP и LEFT предназначены для масштабирования вашего изображения (например, 9-среза), в то время как направляющие RIGHT и BOTTOM определяют область заполнения.

Черные направляющие линии отключаются / удаляются из вашего изображения - они не будут отображаться в приложении. Гиды должны быть только одного пикселя, поэтому, если вы хотите кнопку 48 × 48, ваш png будет фактически 50 × 50. Все, что толще, чем один пиксель, останется частью вашего изображения. (Мои примеры имеют направляющие шириной 4 пикселя для лучшей видимости. Они должны быть действительно только 1 пикселем).

Ваши направляющие должны быть сплошными черными (# 000000). Даже небольшое различие в цвете (# 000001) или альфа приведет к сбою и нормальному растяжению. Этот провал не будет очевидным *, он терпит неудачу! Да. В самом деле. Теперь ты знаешь.

Также вы должны иметь в виду, что оставшаяся область однопиксельного контура должна быть полностью прозрачной. Это включает в себя четыре угла изображения - они всегда должны быть четкими. Это может быть большой проблемой, чем вы понимаете. Например, если вы масштабируете изображение в Photoshop, оно добавит сглаженные пиксели, которые могут содержать почти невидимые пиксели, которые также могут привести к его сбою *. Если вы хотите масштабировать в Photoshop, используйте параметр Nearest Neighbor в раскрывающемся меню Resample Image (в нижней части всплывающего меню «Размер изображения»), чтобы сохранить острые края ваших направляющих.

* (обновлено 1/2012) Это фактически «исправление» в последнем наборе для разработчиков. Раньше это проявлялось бы, когда все ваши образы и ресурсы внезапно ломались, а не фактически сломанное изображение с 9 патчами.

введите описание изображения здесь

Направляющие TOP и LEFT используются для определения масштабируемой части вашего изображения - LEFT для масштабирования высоты, TOP для масштабирования ширины. Используя образ кнопки в качестве примера, это означает, что кнопка может растягиваться горизонтально и вертикально внутри черной части, а все остальное, например, углы, будет оставаться того же размера. Позволяет иметь кнопки, которые могут масштабироваться до любого размера и поддерживать единообразный внешний вид.

Важно отметить, что 9-патч-изображения не уменьшаются - они только расширяются. Поэтому лучше всего начинать как можно меньше.

Кроме того, вы можете оставить части в середине линии шкалы. Например, если у вас есть кнопка с резким глянцевым краем по середине, вы можете оставить несколько пикселей в середине руководства LEFT. Центральная горизонтальная ось вашего изображения не будет масштабироваться, только части выше и ниже нее, поэтому ваш острый блеск не будет получать сглаживание или нечеткость.

заполнить область

Гиды области заполнения являются необязательными и обеспечивают способ определения области для таких вещей, как текстовая метка. Заполнение определяет, сколько места в вашем изображении помещается для размещения текста или значка или других вещей. 9-патч предназначен не только для кнопок, но и для фоновых изображений.

Приведенный выше пример кнопки & label преувеличен просто для объяснения идеи заполнения - ярлык не совсем точен. Честно говоря, я не знал, как Android делает многострочные метки, поскольку ярлык кнопки обычно представляет собой одну строку текста.

Наконец, вот хорошая демонстрация того, как гиды масштабирования и заливки могут меняться, например LinearLayout с фоновым изображением и полностью закругленными сторонами:

введите описание изображения здесь

В этом примере руководство LEFT не используется, но мы по-прежнему должны иметь руководство. Фоновое изображение не масштабируется вертикально; он просто масштабируется горизонтально (на основе TOP-ориентира). Глядя на направляющие для заполнения, направляющие RIGHT и BOTTOM выходят за пределы, где они соответствуют изогнутым краям изображения. Это позволяет мне размещать круглые кнопки близко к краям фона для плотного, подогнанного вида.

Итак, это все. 9-patch очень просто, как только вы его получите. Это не идеальный способ масштабирования, но масштабные и многострочные шкалы-наборы обеспечивают большую гибкость, чем традиционный 9-срез и масштабирование9. Попробуйте, и вы быстро это выясните.

Уровень прозрачности (альфа)

Значения непрозрачности шестнадцатеричных

    ------------------------------
   |   Alpha(%)  |   Hex Value    |
    ------------------------------
   |    100%     |      FF        |
   |     95%     |      F2        |
   |     90%     |      E6        |
   |     85%     |      D9        |
   |     80%     |      CC        |
   |     75%     |      BF        |
   |     70%     |      B3        |
   |     65%     |      A6        |
   |     60%     |      99        |
   |     55%     |      8C        |
   |     50%     |      80        |
   |     45%     |      73        |
   |     40%     |      66        |
   |     35%     |      59        |
   |     30%     |      4D        |
   |     25%     |      40        |
   |     20%     |      33        |
   |     15%     |      26        |
   |     10%     |      1A        |
   |      5%     |      0D        |
   |      0%     |      00        |
    ------------------------------   

Если вы хотите установить 45% на красный цвет.

<color name="red_with_alpha_45">#73FF0000</color> 

шестнадцатеричное значение для красного цвета - # FF0000

Вы можете добавить 73 для непрозрачности 45% в префиксе - # 73FF0000

Работа с файлом strings.xml

Строковый ресурс предоставляет текстовые строки для вашего приложения с дополнительным стилем текста и форматированием. Существует три типа ресурсов, которые могут предоставить вашему приложению строки:

строка

XML resource that provides a single string.

Синтаксис:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="string_name">text_string</string>
</resources>

И использовать эту строку в макете:

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/string_name" />

Строковый массив

XML resource that provides an array of strings.

Синтаксис:

    <resources>
<string-array name="planets_array">
    <item>Mercury</item>
    <item>Venus</item>
    <item>Earth</item>
    <item>Mars</item>
</string-array>

использование

Resources res = getResources();
String[] planets = res.getStringArray(R.array.planets_array);

Количество строк (плоских)

XML resource that carries different strings for pluralization. 

Синтаксис:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <plurals
        name="plural_name">
        <item
            quantity=["zero" | "one" | "two" | "few" | "many" | "other"]
            >text_string</item>
    </plurals>
</resources>

Использование:

int count = getNumberOfsongsAvailable();
Resources res = getResources();
String songsFound = res.getQuantityString(R.plurals.plural_name, count, count);


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow