Com пример блокнота для Android, что это такое

Обновлено: 21.11.2024

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

В этом посте вы научитесь создавать простое приложение для блокнота. Это отличный проект, с которым можно справиться, потому что он поддается ряду альтернативных применений, поскольку аналогичные концепции можно использовать для создания приложений SMS, приложений электронной почты и всего, что требует ввода текста. Это позволит нам посмотреть, как сохранять и открывать файлы, а также работать со строками и представлениями ресайклера, и все это пригодится вам в будущем.

Прежде чем делать что-либо еще, сначала нам нужно создать новый проект. Для этого просто откройте Android Studio и выберите «Создать» > «Новый проект». Выберите «Основное действие» (с плавающей кнопкой действия), и все готово!

Если вы откроете файл content_main.xml с помощью окна слева, вы увидите предварительный просмотр того, как будет выглядеть ваше приложение (если вы этого не видите, затем нажмите вкладку «Дизайн» внизу). Настройка по умолчанию — это пустой экран с надписью «Hello World».

В окне предварительного просмотра перетащите эту метку так, чтобы она занимала весь доступный экран. Теперь в представлении «Текст» измените «TextView» на «EditText». Вместо статической метки это представление станет небольшим окном, в котором мы можем печатать наши заметки.

Пока довольно легко! Но не расслабляйтесь…

Ваш XML-код должен выглядеть примерно так:

Мы изменили текст и сделали его "подсказкой" (это означает, что он отображается серым цветом и исчезнет, ​​когда пользователь начнет вводить текст), мы исправили гравитацию, чтобы текст был выровнен по верхнему краю, и мы дали нашему представлению идентификатор, чтобы мы могли найти его в нашем Java-коде позже.

Попробуйте, и теперь вы сможете вводить текст по своему усмотрению.

Далее нам нужно дать нашим пользователям возможность сохранять свои заметки. Без этой функции приложение для создания заметок не имеет большого смысла!

Здесь есть несколько вариантов, но в большинстве случаев вы захотите сохранить свои заметки внутри. То есть мы не создаем текстовые файлы для хранения на SD-карте, где другие приложения могут получить к ним доступ, поскольку большинство пользователей не регулярно перемещаются по иерархии своих файлов так, как они это делают на ПК с Windows. Это и мы не хотели бы, чтобы другое приложение шпионило за заметками наших пользователей! Таким образом, мы хотим использовать внутреннюю память. По сути, это работает так же, как запись внешних файлов, за исключением того, что каталог будет виден только нашему приложению. Никакое другое приложение не может получить к нему доступ, и пользователь не может просматривать файлы с помощью файлового менеджера, если у них нет root. Обратите внимание, что файлы в этом каталоге будут уничтожены, если пользователь удалит и переустановит ваше приложение.

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

Чтобы сохранить язык дизайна Google Material Design, мы собираемся сопоставить это действие с FAB. Итак, откройте файл activity_main.xml (который управляет макетом вашей активности), а затем войдите в представление «Дизайн». Теперь дважды щелкните FAB, чтобы просмотреть некоторые параметры справа. Нажмите на три точки рядом с srcCompat и найдите значок сохранения.

Мы хотим, чтобы что-то происходило и тогда, когда пользователь нажимает кнопку "Сохранить". К счастью, это довольно просто, так как Android Studio уже показала нам, как это сделать. Откройте MainActivity.java и найдите текст «Заменить своим действием». Вставьте сюда все, что хотите, и это произойдет всякий раз, когда пользователь нажмет кнопку «Сохранить». Однако мы собираемся поместить этот код в метод, чтобы мы могли легко повторно использовать его по желанию. Мы назовем наш метод «Сохранить» (это кажется логичным…) и заставим его работать следующим образом:

Этот код создаст новый файл с тем же именем, что и любая строка, которую мы ему передаем. Содержимое строки будет тем, что есть в нашем EditText. Это означает, что нам также нужно определить EditText, поэтому прямо над методом onCreate напишите EditText EditText1; а затем где-то в методе onCreate в какой-то момент после setContentView напишите: EditText1 = (EditText)findViewById(R.id.EditText1); . Не волнуйтесь, я выложу полный код через минуту.

Помните, когда мы используем определенные команды, нам нужно сначала импортировать соответствующий класс. Если вы напечатали что-то и обнаружите, что это подчеркнуто как ошибка, щелкните по нему, а затем нажмите Alt+Enter. Это автоматически добавит соответствующий импорт вверху вашего кода.

Мы также хотим вызвать новый метод Save из OnCreate, поэтому добавьте: Save("Note1.txt"); для выполнения ваша ручная работа. Затем нажмите кнопку воспроизведения.

Если вы все сделали правильно, то при нажатии кнопки "Сохранить" во внутреннем каталоге приложения будет создан новый файл. Однако вы не сможете этого увидеть, так как же мы узнаем, что это сработало? Теперь нам нужно добавить функцию загрузки!

Загрузка файлов выполняется аналогично их сохранению с некоторыми дополнительными требованиями. Во-первых, нам нужно убедиться, что файл, который мы загружаем, действительно существует. Для этого мы создадим логическую переменную (true или false), которая проверяет, существует ли файл. Поместите это где-нибудь в свой код, за пределами других методов:

Теперь мы можем создать следующий метод Open и передать ему строку имени файла, который мы хотим открыть. Он вернет содержимое в виде строки, поэтому мы можем делать с ним все, что захотим. Это должно выглядеть так:

Это читает каждую строку, а затем строит из них строку, используя ‘\n’ (символ новой строки) в конце каждой строки для базового форматирования. Наконец, мы используем эту новую строку для заполнения нашего EditText1.

Я сейчас вызываю эту функцию Open из метода onCreate, что означает, что файл будет отображаться, как только приложение загрузится. Очевидно, что это нетипичное поведение для приложения-блокнота, но мне оно очень нравится — это означает, что все, что вы пишете, будет мгновенно видно при загрузке — как мини-блокнот, где вы можете записывать то, что вам нужно временно запомнить!

Полный код должен выглядеть так:

Попробуйте запустить это снова. Напишите что-нибудь, сохраните и выйдите из приложения. Затем снова зайдите, и вы обнаружите, что текст сохраняется. Успех!

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

Щелкните правой кнопкой мыши где-нибудь в иерархии слева и выберите «Создать» > «Активность», затем снова выберите «Основная активность». Мы называем это «NoteSelect». Введите это в поле «Название действия» и нажмите «Готово».

Это создаст ваш файл Java, макет вашего контента и макет вашего приложения. Откройте файл activity_note_select.xml, и мы собираемся внести некоторые изменения, аналогичные предыдущему. На этот раз мы хотим, чтобы наш FAB отображал значок «новая заметка» для создания новых заметок. На данный момент нет ничего, что действительно удовлетворяло бы нашим требованиям, поэтому сделайте свое собственное и поместите его в папку «drawable» вашего приложения. Вы можете сделать это, перейдя в каталог проекта или щелкнув правой кнопкой мыши папку слева от Android Studio и выбрав «Показать в проводнике». Теперь вы должны иметь возможность выбрать его из списка, как и раньше — помните, что имена файлов в ваших ресурсах должны быть в нижнем регистре.

Мы собираемся использовать представление переработчика для отображения наших заметок, что немного усложняет жизнь. Хорошей новостью является то, что использование представлений ресайклера стало проще с прошлого раза (когда мы создавали приложение галереи). Вам больше не нужно добавлять зависимость в Gradle, и теперь представление можно выбрать прямо из дизайнера, здорово!

Поэтому, как обычно, добавьте представление переработчика в файл notes_select_content.xml и присвойте ему идентификатор «notes». Код XML должен выглядеть следующим образом:

Далее создайте новый класс Java (пока мы игнорируем новую активность). Этот класс Java создаст наш объект примечания (краткий пример того, что такое объект в программировании), поэтому мы назовем его NotesBuilder. Щелкните правой кнопкой мыши папку Java и выберите «Создать» > «Класс Java». Добавьте следующий код:

Теперь нам нужен еще один новый файл макета, который будет определять макет каждой строки в нашем представлении ресайклера. Он будет называться list_row.xml, и вы создадите его, щелкнув правой кнопкой мыши папку макета и выбрав «Создать» > «Файл ресурсов макета». Выберите «Относительный макет» в следующем появившемся диалоговом окне. Самое замечательное в представлении recycler — это то, что вы можете быть настолько сложными, насколько вам нравится, и включать изображения и все виды других представлений в каждую строку. Пока нам нужно что-то простое, поэтому оно будет выглядеть так:

Далее нам нужно создать «адаптер». По сути, адаптер берет набор данных и прикрепляет его к представлению ресайклера. Это будет еще один новый класс Java, и он будет называться NotesAdapter.

Теперь, если вы посмотрите на этот код, вы увидите, что он проходит через список с именем notesList, созданный с помощью нашего класса NoteBuilder. Теперь все на месте, осталось только добавить соответствующий код в скрипт NoteSelect.java. Это будет выглядеть следующим образом:

Опять же убедитесь, что вы помните об импорте классов, когда вам будет предложено это сделать.

Так что же здесь происходит? Во-первых, мы используем LinearLayoutManager и заполняем RecyclerView с помощью адаптера, чтобы он отображал наши заметки. prepareNotes — метод, в котором это происходит. Здесь мы открываем каталог внутреннего хранилища и просматриваем файлы. Мы назвали первую созданную нами заметку «Note1» и будем следовать этой номенклатуре по мере продвижения, если будем создавать это приложение дальше. Другими словами, следующей заметкой будет Note2, Note3 и так далее.

Это означает, что мы можем использовать цикл For для просмотра списка файлов. Затем каждый из них используется для заполнения списка, так что имя файла является заголовком, а содержимое отображается под ним. Чтобы получить содержимое, я повторно использую метод Open.

Теперь в идеальном мире мы бы поместили методы Save и Open в отдельный класс Java и вызывали их оттуда, но это простой способ сделать это в интересах краткости.

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

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

Последнее изменение: у вас должен быть доступ к списку заметок! Для этого добавьте следующий код в метод onOptionsItemSelected в MainActivity и измените значение action_settings с «Settings» на «List Notes» в файле ресурсов strings.xml. . Пока вы там, измените также цветовые коды, чтобы сделать ваше приложение менее универсальным.

Теперь в верхнем правом меню есть опция «Список заметок», и нажатие на нее приведет вас к списку ваших заметок:

Мы хотели бы добавить onClickListener в наш переработчик, чтобы нажатие на ноту выполняло нечто подобное — запускало MainActivity и передавало дополнительный параметр, указывающий действие какую заметку загрузить. Если пользователь решил создать новую заметку с помощью FAB, то именем файла будет число файлов во внутреннем каталоге +1. При нажатии кнопки "Сохранить" этот файл будет сохранен и добавлен в список.

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

Читайте также: