9. Текстовий редактор для Android
Первинні вкладки
1. Створіть новий проект в Android Studio.
2. Видаліть всі елементи активного екрану та додайте один: MultiLine Text. Розтягніть його на весь екран.
3. Додайте до файлу strings.xml наступні рядки:
1 2 3 4 5 | <string name="action_open">Відкрити</string> <string name="action_save">Зберегти</string> <string name="action_settings">Налаштування</string> <string name="pref_openmode">Режим відкриття</string> <string name="pref_size">Розмір шрифта</string> |
4. Редагуйте меню таки чином, щоб там з'явились наступні пункти:
- Відкрити
- Зберегти
- Налаштування
1 2 3 4 5 6 7 8 | <item android:id="@+id/action_open" android:title="@string/action_open" android:icon="@android:drawable/ic_menu_day" android:orderInCategory="100" app:showAsAction="never" /> <item android:id="@+id/action_save" android:title="@string/action_save" android:icon="@android:drawable/ic_menu_save" android:orderInCategory="99" app:showAsAction="never" /> <item android:id="@+id/action_settings" android:orderInCategory="100" android:title="@string/action_settings"/> |
5. Перейдіть у режим перегляду файлів проекту, в папку app/src/main/res та створіть там папку xml. У цій папці створіть файл preferences.xml та наповніть його наступним вмістом:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="<a href="http://schemas.android.com/apk/res/android"">http://schemas.android.com/apk/res/android"</a> > <CheckBoxPreference android:key="@string/pref_openmode" android:summary="Відкривати файл при запуску" android:title="Відкрити" /> <EditTextPreference android:defaultValue="14" android:dialogTitle="Введіть розмір шрифта(12-36" android:key="@string/pref_size" android:summary="Встановлює новий розмір шрифта" android:title="Розмір шрифта" /> </PreferenceScreen> |
6. Створіть нову активність наступним чином: ПКМ на App -> New -> Activity -> Settings Activity. В полі ім'я напишіть SettingsActivity. Напишіть наступний код:
1 2 3 4 5 6 7 8 9 | public class SettingsActivity extends PreferenceActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // завантаження налаштувань з ресурсів addPreferencesFromResource(R.xml.preferences); } } |
7. Перейдіть в папку Manifiests та відкрийте AndroidManifiest.xml. Необхідно ініцілізувати нову активність. Для цього після останньої активності наберіть код:
1 2 3 4 | <activity android:name=".SettingsActivity" // ім'я активності android:label="@string/title_activity_settings" > // назва на екрані </activity> |
8. В MainActivity пишеться основний код. Необхідні методи для збереження, зчитування та виклику налаштувань. Ініціалізація змінних:
1 2 3 4 5 6 7 8 9 10 11 12 | public final static String FILENAME = "lab.txt"; // ім'я файлу public EditText mEditText; // змінна для текстового поля public static final String APP_PREFERENCES = "preferences"; // глобальна змінна файлу налаштуваня private SharedPreferences mSettings; // самі налаштування @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mEditText = (EditText)findViewById(R.id.editText); // пошук текстового поля } |
Код зчитування:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | private void openFile(String fileName) { // сам метод try { InputStream inputStream = openFileInput(fileName); // створення потоку if (inputStream != null) { // не = 0 InputStreamReader isr = new InputStreamReader(inputStream); // конструктор нового потоку зчитування BufferedReader reader = new BufferedReader(isr); // буфер зчитування String line; // змінна для тексту StringBuilder builder = new StringBuilder(); while ((line = reader.readLine()) != null) { // цикл з передумовою builder.append(line + "\n"); // до кінця файла } inputStream.close(); // закриття потоку mEditText.setText(builder.toString()); // текст передається у текстове поле } } catch (Throwable t) { // якщо помилка Toast.makeText(getApplicationContext(), // повідомлення з допомогою Toast "Exception: " + t.toString(), Toast.LENGTH_LONG).show(); } } |
Код збереження:
1 2 3 4 5 6 7 8 9 10 11 | private void saveFile(String fileName) { // метод try { OutputStream outputStream = openFileOutput(fileName, 0); // поток запису OutputStreamWriter osw = new OutputStreamWriter(outputStream); // створення нового запису osw.write(mEditText.getText().toString()); // запис тексту з поля osw.close(); // закриття потоку } catch (Throwable t) { // повідомлення про помилку Toast.makeText(getApplicationContext(), "Exception: " + t.toString(), Toast.LENGTH_LONG).show(); } } |
Код для обробки вибору пунктів меню:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | switch (id) { case R.id.action_open: openFile(FILENAME); return true; case R.id.action_save: saveFile(FILENAME); return true; case R.id.action_settings: Intent intent = new Intent(); intent.setClass(this, SettingsActivity.class); startActivity(intent); return true; default: return true; } |
Код для події OnResume:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public void onResume() {// метод Resume super.onResume(); // працює тоді, коли активність знову включена SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(this); // зчитування значень із налаштувань if (prefs.getBoolean(getString(R.string.pref_openmode), false)) { openFile(FILENAME); } // зчитування розміру шрифта float fSize = Float.parseFloat(prefs.getString( getString(R.string.pref_size), "20")); // зміна налаштувань текстового поля mEditText.setTextSize(fSize); } |
9. Запустіть та подивіться на результати: перед вами звичайний блокнот написаний на Java, який може зберігати та зчитувати текст з файлу, а також змінювати налаштування розміру тексту:
Контрольні питання:
1. Що містить файл strings.xml?
2. Які команди java на android відовідають за роботу з файлами?
3. Як ініціалізувати глобальні статичні змінні і нові активності?
4. За що відповідає подія OnResume?
5. Що містить клас Toast? Для чого він?