Несколько языков с textView и setText

Я использую ImageAdapter для установки пользовательского представления с изображениями и подписью. Как я могу поддерживать несколько языков для этого текста?

Текст теперь мокрый в методе getView(...) в imageAdapter:

public View getView(int position, View convertView, ViewGroup parent) {
        View v;
        if (convertView == null) {
            LayoutInflater li = getLayoutInflater();
            v = li.inflate(R.layout.activity_main_icon, null);

            TextView tv = (TextView)v.findViewById(R.id.main_icon_text);
            tv.setText("**MENU TEXT**");

            ImageView iv = (ImageView)v.findViewById(R.id.main_icon_image);

            iv.setImageResource(mThumbIds[position]);
        } else {
            v = convertView;
        }

        return v;
    }

Я предполагаю, что «ТЕКСТ МЕНЮ» должен быть установлен динамически из res/Strings для поддержки разных языков, но как я могу это сделать?

GridView имеет четыре изображения, которые должны иметь четыре разные строки. Например. «Добавить друга», «Найти друга», «Редактировать друга» и «Удалить друга».


person EirikO    schedule 02.01.2013    source источник


Ответы (3)


Рекомендую прочитать этот тренинг:

http://developer.android.com/guide/topics/resources/localization.html

Тогда ваш код должен выглядеть так:

view.setText(getResources().getString(R.string.YOURSTRINGKEY));

person noni    schedule 02.01.2013
comment
Да, я понимаю. Проблема в том, что getView() в imageAdapter будет вызываться один раз для каждого изображения, поэтому каждый раз должны использоваться разные строки. - person EirikO; 02.01.2013
comment
Используйте ENUM для определения строк позиции, а затем переключатель (позиция) - person noni; 02.01.2013

Сначала поместите строковое значение в файл ресурсов: res/values/strings.xml.

<string name="menu_text">menu text</string>

Затем разрешите строку во время выполнения:

String menuText = context.getString(R.string.menu_text);

Затем вы можете использовать версии файла строк на иностранных языках для переводов: например. res/values-fr/strings.xml

person EJK    schedule 02.01.2013
comment
Да, проблема в том, что getView вызывается один раз для каждого изображения. Но я могу решить это с помощью оператора if для позиции. Это лучший способ? - person EirikO; 02.01.2013

Вы просто используете TextView.setText(int) (например, R.string.menu_text_hello) и поместите строки в уважаемые папки res.

person Edison    schedule 02.01.2013
comment
Да, поэтому я должен использовать оператор if с позицией?. т.е. если (позиция == 1) строка = getString (R.string.menu1); иначе если (позиция == 2) getSTring (R.string.menu_text2) и т. д.? - person EirikO; 02.01.2013
comment
Вы можете использовать, скажем, int text. и просто установите setText (текст) после ваших if и elses. - person Edison; 02.01.2013