Суббота, 24.02.2018, 14:45
Поиск
Никнэйм
Сертификат на никнейм Olelucoye, зарегистрирован на Тимофеев Константин Михайлович
Зарегистрируй свой никнейм
Обратная связь
olelucoye.tk@yandex.ru
Реклама AdSense
Реклама
Друзья сайта
  • Лига медицинского права
  • Гостиница "Зай"
  • FAQ по системе
  • Инструкции для uCoz
  • Главная » Статьи » Андроид разработка

    Программируем калькулятор на андроид. Урок 10.

    Урок сделан специально для группы http://vk.com/amdroid.developer

    Урок 10. Локализируем приложение. Сохранение данных при смене ориентации экрана.

    Для того чтобы расширить аудиторию пользователей, нужно добавить в приложение поддержку других языков. Добавим для калькулятора английский язык. Для этого нужно перевести все текстовые константы в string.xml на английский язык.

    Для этого создадим локализованную папку values. Клик правой кнопкой на папке res, New->Folder, задаем имя папки values-en. Скопируем файл string.xml из папки values в папку values-en. Затем переведем все переменные в скопированном файле в папке values-en на английский язык.

    <?xml version="1.0" encoding="utf-8"?>

    <resources>

     

        <string name="app_name">Calculator</string>

        <string name="options">Options</string>

        <string name="about_app">About</string>

        <string name="text_about">Calculator - program is created specifically for  groups</string>

        <string name="vk_link">Android developer</string>

        <string name="bt_good">Good</string>

        <string name="add_bt">Advanced buttons</string>

        <string name="descr_add_bt">Show advanced button</string>

        <string name="style_app">Style of app</string>

        <string name="descr_style_app">Change style interface</string>

        <string-array name="style_entries">

                 <item>Style 1</item>

                 <item>Style 2</item>      

           </string-array>

           <string-array name="style_entry_values">

                 <item>1</item>

                 <item>2</item>

           </string-array>

           <string name="other_operation">Already set another operation</string>

           <string name="no_operation">Operation is not set</string>

        <string name="limit">Limitation bit = 10</string>

        <string name="degree_overflow">Error: overflow bit.</string>

       

    </resources>

    Все. Теперь если запустить приложение на устройстве с английской локализацией (Настройки->Язык и ввод->Выбрать язык->English) весь текст будет отображаться на английском языке. На устройствах с другой локализацией строки будут браться из папки по умолчанию (values).

    Теперь нужно позволить пользователю самостоятельно выбирать язык приложения. Для этого в настройках сделаем еще один пункт для выбора языка. Но для начала добавим новые строковые константы для нового пункта настроек.

    В папке по умолчанию в string.xml добавляем:

           <string name="locale_app">Язык интерфейса</string>

           <string name="descr_locale_app">Сменить язык интерфеса</string>

           <string-array name="lang_entries">

                 <item>Русский</item>

                 <item>Английский</item>   

           </string-array>

           <string-array name="lang_entry_values">

                 <item>ru</item>

                 <item>en</item>

           </string-array>

    В англоязычный файл добавляем:

           <string name="locale_app">Language</string>

           <string name="descr_locale_app">Select language</string>

           <string-array name="lang_entries">

                 <item>Russian</item>

                 <item>English</item>      

           </string-array>

           <string-array name="lang_entry_values">

                 <item>ru</item>

                 <item>en</item>

           </string-array>

    В макете экрана настроек pref_screen.xml добавляем список для выбора языка.

           <ListPreference

                 android:entries="@array/lang_entries"

                 android:entryValues="@array/lang_entry_values"

                 android:key="lang_calc"

                 android:summary="@string/descr_locale_app"

                 android:title="@string/locale_app">

           </ListPreference>

    Теперь переходим в MainActivity.java. Нужно получить настройку lang_calc и применить её для приложения. Дабавим два новых объявления до onCreate:

    String lang_calc;

    private Locale locale;

     

    В onResume добавляем:

           lang_calc = sp.getString("lang_calc", "default");

           locale = new Locale(lang_calc);

           Locale.setDefault(locale);

           Configuration config = new Configuration();

           config.locale = locale;

           getBaseContext().getResources().updateConfiguration(config, null);

    Можно запустить и потестить. Локализация примененяется, но не полностью - меню, например, остается на предыдущем языке. Полностью локализация будет сменена при перезапуске приложения. Чтобы не напрягать этим пользователя, сделаем так чтобы при выходе из экрана настроек, приложение перезапускалось автоматически. Для этого в PrefActivity.java допишем:

            @Override

            public void onDestroy(){

                        super.onDestroy();

                        Intent i = getBaseContext().getPackageManager()

                               .getLaunchIntentForPackage( getBaseContext()

                                      .getPackageName() );

                        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                        startActivity(i);

            }

    С локализацией закончили. Можно тестировать.

    Теперь попробуем ввести какое-нибудь число и повернуть экран (на эмуляторе это делается кнопкой "9" на дополнительной клавиатуре или Ctrl+F12). Все обнулилось. Это происходит, потому что при смене ориентации экрана существующий экземпляр активити уничтожается и создается новый. Что бы этого не происходило, нам нужно сохранить переменные и восстановить их при создании нового экземпляра активити. Для этого в активити есть два метода - onSaveInstanceState и onRestoreInstanceState. Вот как это будет выглядеть для нашего калькулятора:

           protected void onSaveInstanceState(Bundle outState) {

               super.onSaveInstanceState(outState);

               outState.putString("LCD_value", tvLCD.getText().toString());

               outState.putBoolean("flagPoint", flagPoint);

               outState.putString("operand1", operand1);

               outState.putString("operand2", operand2);

               outState.putInt("flagAction", flagAction);

               outState.putDouble("result", result);

             }

           protected void onRestoreInstanceState(Bundle savedInstanceState) {

               super.onRestoreInstanceState(savedInstanceState);

               tvLCD.setText(savedInstanceState.getString("LCD_value"));

               flagPoint = savedInstanceState.getBoolean("flagPoint");

               operand1 = savedInstanceState.getString("operand1");

               operand2 = savedInstanceState.getString("operand2");

               flagAction = savedInstanceState.getInt("flagAction");

               result = savedInstanceState.getDouble("result");

              

             }

    Сначала записываем все необходимые для восстановления переменные в объект Bundle, затем считываем их при создании нового экземпляра активити. Для справки - метод onRestoreInstanceState вызывается системой непосредственно перед методом onResume.

    Готово. Запускаем приложение, пробуем менять ориентацию и язык.

    Полные листинги MainActivity.java и PrefActivity.java.

    Полные листинги string.xml и pref_screen.xml.

    А здесь неподписанный APK-файл.

    Программируем калькулятор на андроид. Урок 9.

    Программируем калькулятор на андроид. Урок 8.

    Программируем калькулятор на андроид. Урок 7.

    Программируем калькулятор на андроид. Урок 6.

    Программируем калькулятор на андроид. Урок 5.

    Программируем калькулятор на андроид. Урок 4.

    Программируем калькулятор на андроид. Урок 3.

    Программируем калькулятор на андроид. Урок 2.

    Программируем калькулятор на андроид. Урок 1.

    Категория: Андроид разработка | Добавил: Olelucoye (06.12.2014)
    Просмотров: 2752
    | Теги: Калькулятор, java, локализация приложения, Android | Рейтинг: 0.0/0
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Меню сайта
    Категории раздела
    Андроид разработка [23]
    libGDX [24]
    Мои андроид проекты [6]
    Excel [7]
    Железяки [5]
    Скрипты в блокноте [4]
    Разное [1]
    Форма входа
    Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Яндекс Метрика
    Яндекс.Метрика