Как создать интерфейс программы в android studio
В этом курсе вы познакомитесь с основами дизайна пользовательского интерфейса Android. Вы поймете пользовательский ввод, представления и макеты, а также адаптеры и фрагменты. Проверьте это здесь !
Содержание
1. Введение
В этой последней статье о пользовательском интерфейсе Android мы создадим приложение для Android, которое использует почти все концепции, о которых мы говорили в предыдущих статьях. Мы говорили о наиболее важных аспектах, которые необходимо учитывать при разработке приложения для Android. Мы увидели, как создать структуру пользовательского интерфейса с помощью менеджеров макетов и как мы можем размещать виджеты; мы описали некоторые лучшие практики, которые мы должны использовать при разработке приложения. Итак, приложение, которое мы создадим, будет основано на темах, которые мы уже обсуждали ранее, поэтому взгляните на них еще раз, чтобы освежить вашу память.
2. Структура приложения
Прежде чем углубляться в детали кода, первое, что мы должны учитывать при создании приложения, — это сделать несколько набросков, которые помогут нам понять навигацию приложения и взаимодействие с пользователем. Мы можем использовать несколько инструментов, некоторые из них бесплатны. Кроме того, эти эскизы помогают нам понять, как будет выглядеть наше приложение, и мы могли бы показать их нашим клиентам, чтобы они могли понять, соответствует ли приложение, которое мы хотим построить, их потребностям.
Возвращаясь к нашему приложению To do, мы можем представить, что у нас есть следующие требования:
- Там должен быть список предметов (для выполнения предметов).
- Пользователь может добавить элемент к существующим.
- Предметы должны иметь приоритетный цвет.
- Приложение должно работать на смартфоне и планшете.
Конечно, в реальном приложении требования будут намного сложнее, но это всего лишь ступенька. Мы можем представить простую навигацию, подобную этой:
Это очень простая навигация: при запуске приложение отображает текущий список элементов, а когда пользователь нажимает «Добавить элемент» на панели действий. приложение покажет экран добавления элемента. Для простоты и сосредоточенности на аспектах пользовательского интерфейса мы можем предположить, что приложение не будет сохранять элементы. Читателю может быть интересно расширить приложение, чтобы оно сохраняло элементы.
Теперь, когда мы примерно знаем, какой будет навигация и как будет выглядеть пользовательский интерфейс приложения, мы можем приступить к созданию нашего приложения с помощью нашей IDE. В этом случае мы будем использовать Eclipse + ADT. Мы создаем новый проект Android, который мы можем назвать Todo . Мы не будем рассказывать, как создать проект Android с использованием Eclipse, поэтому мы предполагаем, что вы уже знакомы с этой IDE. Посмотрите наш пример «Android Hello World», если вы не знакомы с процессом.
2.1. Список предметов с ListView и объектной моделью
Теперь у нас есть структура проекта, и мы можем сосредоточиться на разработке модели, стоящей за приложением. В этом случае модель очень проста, это просто класс, который содержит информацию о новом элементе todo:
Это будет основной класс, который мы будем обрабатывать в нашем приложении. Глядя на проект Android, который мы только что создали, мы можем заметить, что под каталогом макетов есть макет по умолчанию, называемый activity_main.xml . Это макет по умолчанию, созданный инструментом.
К настоящему времени мы можем предположить, что у нас есть только список элементов в этом макете: этот макет будет использоваться только для смартфона, и мы рассмотрим позже, когда приложение будет работать на планшете. Расположение элемента списка очень простое, оно просто создается стандартным виджетом ListView :
android:paddingBottom = "@dimen/activity_vertical_margin" android:paddingLeft = "@dimen/activity_horizontal_margin" android:paddingRight = "@dimen/activity_horizontal_margin"Если вы заметили, мы дали указание Android использовать только пространство, необходимое для хранения элементов в списке. Мы знаем, что для использования ListView мы должны реализовать адаптер. Мы могли бы использовать стандартный адаптер, предоставляемый Android, но в этом случае этих стандартных адаптеров недостаточно, мы хотим реализовать собственный адаптер, потому что мы хотели бы показать некоторую информацию для каждой строки в списке. Нам бы хотелось, чтобы строка в списке выглядела так:
Как вы можете заметить, каждая строка имеет изображение слева, которое представляет приоритет задачи и некоторую информацию. В настоящее время мы не рассматриваем применение какого-либо стиля к нашим строкам. Чтобы иметь такую строку в нашем ListView , мы должны создать макет строки, который мы будем использовать в нашем настраиваемом адаптере. Таким образом, мы можем создать новый файл с именем item_layout.xml в директории layout . Этот файл выглядит так:
В этом макете мы используем менеджер RelativeLayout чтобы легко размещать виджеты там, где нам нужно. Как вы можете видеть в этом менеджере компоновки, представления размещаются в соответствии с другими позициями просмотра. Например, мы хотим, чтобы имя нашей задачи было размещено сразу после изображения, поэтому мы используем атрибут:
Более того, мы можем размещать представления относительно родителя, например, мы хотим, чтобы информация о дате была размещена справа от строки и внизу:
Теперь, когда у нас есть макет, мы должны построить адаптер. Мы расширим ArrayAdapter и переопределим некоторые методы, чтобы мы могли обрабатывать данные нашей модели и новый макет. Мы называем этот адаптер ToDoItemAdaper , поэтому мы имеем:
public class ToDoItemAdapter extends ArrayAdapter<Item> < public ToDoItemAdapter(Context context, List<Item> itemList) <Конструктор получает Context и itemList качестве параметров, последний параметр содержит список элементов todo. Вы можете заметить, что когда мы вызываем супер метод, мы R.layout.item_layout пользовательский макет с именем R.layout.item_layout . Теперь нам нужно переопределить один из наиболее важных методов, называемый getView , который используется для создания View и рендеринга макета строки:
public View getView( int position, View convertView, ViewGroup parent) < LayoutInflater inf = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); TextView nameTv = (TextView) v.findViewById(R.id.nameView); TextView descrView = (TextView) v.findViewById(R.id.descrView); TextView dateView = (TextView) v.findViewById(R.id.dateView); h.tagView.setBackgroundResource(itemList.get(position).getTag().getTagColor()); h.dateView.setText(sdf.format(itemList.get(position).getDate()));В этом методе мы проверяем в начале, является ли представление, которое мы получаем как параметр, нулевым. В этом случае мы должны надуть наш макет. Если вы заметили, мы использовали шаблон ViewHolder , чтобы сделать прокрутку ListView более плавной. Мы создали небольшой внутренний класс ItemHolder который содержит ссылки на View внутри нашего пользовательского макета:
Одна вещь, которую вы должны заметить, это то, как мы обрабатывали цвет фона ImageView . Мы использовали setBackgroundResource для установки imageview изображения. Этот метод принимает int, представляющий идентификатор ресурса, который мы хотим использовать в качестве фона:
h.tagView.setBackgroundResource(itemList.get(position).getTag().getTagColor());Глядя на наш класс модели, мы можем заметить, что метод getTag() возвращает экземпляр класса TagEnum . Это перечисление, определенное следующим образом:
GREEN(R.color.green, "Green" ), BLUE(R.color.blue, "Blue" ),YELLOW(R.color.yellow, "Yellow" );В перечислении мы определяем различные цвета, которые мы хотим поддерживать, и в качестве первого параметра мы передаем идентификатор ресурса. Если вы помните, в предыдущей статье мы говорили о том, как определить цвет ресурса в формате XML. Мы уже знаем, что нам нужно создать XML-файл в res/values который мы можем назвать colors.xml :
Даже если результат будет таким же, не рекомендуется использовать жестко закодированные значения в исходном коде. Например, если мы хотим изменить красный цвет на другой, нам нужно будет найти шестнадцатеричный цвет в исходном коде и изменить его, но если бы мы использовали ресурсы для определения цветов, мы бы обратились непосредственно к файлу, содержащему определения цвета и изменить цвет, который нам нравится.
Обратите внимание, что в перечислении мы использовали плохую практику: мы написали непосредственно имя цвета. Мы использовали его специально, чтобы показать вам то, что вы не должны делать. В этом случае, если мы хотим поддерживать многоязычное приложение, нам нужно изменить способ инициализации перечисления, используя имя, записанное в файле строковых ресурсов.
2.2. Поддержка нескольких устройств и особенности компоновки
Помните, что одним из наших требований является создание приложения, которое поддерживает как смартфоны, так и планшеты. Думая о размерах экрана планшета, мы понимаем, что экран слишком большой, чтобы вместить только список элементов, поэтому мы могли бы рассмотреть возможность разделения экрана на две области: одну, в которой содержится список, и другую, которую мы можем использовать для отображения деталей элемента или даже показать пользовательский интерфейс, чтобы добавить новый элемент. Это верно, если мы используем планшеты, но если у нас смартфон, размеры экрана недостаточно велики, чтобы разделить их на две части.
Android Studio (10) --- Используйте редактор макетов для создания пользовательского интерфейса
В редакторе макетов Android Studio вы можете быстро создать макет, перетаскивая виджеты в редактор визуального дизайна, без необходимости вручную писать XML макета. Этот редактор предварительно просматривает макет на различных устройствах и версиях Android, и вы можете динамически изменять размер макета, чтобы убедиться, что он хорошо подходит для экрана разных размеров. Редактор макетов использует ConstraintLayout Он особенно эффективен при создании новых макетов. ConstraintLayout - это менеджер макетов, предоставляемый в библиотеке поддержки и совместимый с Android 2.3 (уровень API 9) и выше.
На этой странице описаны интерфейс и функции редактора макетов. Для получения дополнительной информации о том, как использовать ConstraintLayout Для получения дополнительной информации о компоновке здания см.Создание ConstraintLayout с помощью ConstraintLayout。
Введение редактора
Редактор макетов отображается при открытии файла макета XML. Области редактора, соответствующие номерам на рисунке 1, следующие:
- Цветовая палитра: Предоставляет список виджетов и макетов, которые можно перетащить в макет в редакторе.
- пакетдерево: Просмотр иерархии с отображением макета. Нажав на элемент, вы увидите, что он выбран в редакторе.
- Панель инструментов: Предоставляет кнопки для настройки внешнего вида макета и редактирования свойств макета в редакторе.
- Редактор дизайна: Отображает макет в сочетании дизайна и дизайна.
- собственности: Предоставляет элементы управления свойствами для текущего выбранного представления.
Рисунок 1дисплейDesignРедактор макет редактор
При открытии файла макета XML система открывается по умолчанию.DesignРедактор (как показано на рисунке 1). Если вы хотитеTextЧтобы редактировать XML в редакторе, нажмите внизу окнаTextТеги. вTextКогда в редакторе, нажмите на правой стороне окнаPreview Вы также можете просмотретьPalette、Component TreeиDesignРедактор (как показано на рисунке 2). Тем не менее,TextРедактор не предоставляетPropertiesОкно.
подсказка: Нажав Control + Shift + стрелка вправо / влево, вы можетеDesignиTextПереключаться между редакторами.
Рисунок 2открытыйPreviewокноTextредактор
Изменить внешний вид предварительного просмотра
DesignКнопки в верхней строке редактора позволяют настроить внешний вид макета в редакторе. Также доступно наTextредакторPreviewЭта панель инструментов открывается в окне.
Рисунок 3Кнопки на панели инструментов редактора макетов для настройки внешнего вида макета
Кнопки, соответствующие номерам на рисунке 3, следующие:
подсказка: Вы можете переключаться между этими видами, нажимая B.
подсказка: Вы можете изменить размер устройства, перетаскивая правый нижний угол макета.
банкнота: Эти конфигурации не влияют на код или манифест вашего приложения (если вы не решите начать сLayout VariantsДобавить новые файлы макетов), они влияют только на предварительный просмотр макета.
Создать новый макет
При добавлении нового макета в приложение сначала layout/ Создайте файл макета в каталоге, чтобы он применялся ко всем конфигурациям устройства. Если у вас есть макет по умолчанию, вы можете создать вариант этого макета для конкретной конфигурации устройства, например, большого экрана - если вы хотите это сделать, пропуститеСоздать вариант макета。
Есть несколько разных способов создать новый макет, в зависимости от вашегоProject Вид из окна, но следующие шаги могут быть выполнены из любого вида.
- вProject В окне выберите модуль, в который вы хотите добавить макет (например,app)。
- В главном меню выберитеFile > New > XML > Layout XML File。
- В появившемся диалоговом окне введите имя файла, корневой тег макета и исходный набор, к которому принадлежит макет. Затем нажмитеFinish。
Рисунок 4Диалоговое окно для добавления нового макета XML-файла
Вот несколько других способов создания нового файла макета (хотя отображаемые диалоговые окна различаются):
- Если вы ужеProject Выберите в окнеProject Просмотр: Откройте модуль приложенияres Каталог, щелкните правой кнопкой мыши каталог макетов, в который вы хотите добавить макет, а затем нажмитеNew > Layout resource file。
- Если вы ужеProject Выберите в окнеAndroid Вид: щелкните правой кнопкой мышиlayout Папка и выберитеNew > Layout resource file。
Создать вариант макета
Если у вас уже есть макет и вы хотите создать альтернативную версию для оптимизации макета для разных размеров экрана или ориентации, выполните следующие действия:
- Откройте исходный файл макета и убедитесь, что вы просматриваетеDesignРедактор (нажмите в нижней части окнаDesignЭтикетка).
- Нажмите на панели инструментовLayout Variants, В раскрывающемся списке выберите предложенный вариант (например,Create Landscape Variant) И закончите создание, или нажмитеCreate OtherИ переходите к следующему шагу.
- В появившемся диалоговом окне вам нужно только определить квалификатор ресурса для имени каталога. Вы можетеDirectory nameВведите квалификатор ресурса в илиAvailable qualifiersВыберите один из списка и нажмитеAdd。
- После добавления всех классификаторов нажмитеOK。
Если у вас есть несколько вариантов одного и того же макета, при нажатииLayout Variants , Вы можете легко переключаться между ними через отображаемый список.
Чтобы узнать больше о том, как создавать макеты для разных экранов, прочитайтеПоддержка разных размеров экрана。
Преобразовать макет в ConstraintLayout
ConstraintLayout Представление - это группа представлений, представленная в библиотеке макетов ограничений, которая включена в Android Studio 2.2 и более поздние версии. Он построен с нуля с помощью редактора макетов, поэтому все функции доступны через редактор дизайна, и вам не нужно вручную редактировать XML. Лучшее в ConstraintLayout - система макетов на основе ограничений, которая позволяет создавать большинство макетов без необходимости вложения каких-либо групп представлений.
Чтобы улучшить производительность макета, вы должны конвертировать предыдущие макеты в ConstraintLayout , Android Studio предоставляет встроенные конвертеры, чтобы помочь вам сделать это:
- Откройте существующий макет в Android Studio и нажмите в нижней части окна редактора.DesignТеги.
- вComponent TreeВ окне щелкните правой кнопкой мыши макет и выберитеConvert layout to ConstraintLayout。
Для получения дополнительной информации о том, как использовать ConstraintLayout Для получения дополнительной информации о компоновке здания см.Создание ConstraintLayout с помощью ConstraintLayout。
Добавление видов в макет
Создание макета для вашего приложения требует пониманияБазовые знания по версткеНо Android Studio сохраняет много сложной работы непосредственно в файлах XML. Перетаскивая виджет вDesignРедактор и вProperties Оптимизируйте свойства макета в окнах, и редактор макетов может помочь вам выполнить большую работу.
Когда вы начинаете строить макет, просто переместите вид изPaletteПеретащите панель наDesignРедактор. Когда вы размещаете представление в макете, редактор указывает на связь вида с остальной частью макета в зависимости от типа макета, в который вы поместили представление.
Например, видео 1 показывает, как TextView Перетащите в ConstraintLayout Чтобы создать ответ на вышеизложенное TextView Ограничения «внизу» и «выравнивание по левому краю» (включеноAutoconnect)。
Видео 1.Когда вы перетаскиваете представление в редактор, редактор макетов добавляет ограничения к вашему представлению.
Перетащите вид на ConstraintLayout Для макетов, отличных от Layout Editor, реакция редактора Layout будет отличаться в зависимости от свойств макета, доступных для макета.
Любые ошибки, обнаруженные в макете, учитываются на панели инструментов. Чтобы просмотреть их, нажмитеShow Warnings and Errors 。
Появления в редакторе дизайна только для предварительного просмотра, хотяDesignРедактировать макет в редакторе сложно, чтобы получить точный вид, но вы должны запустить свое приложение на эмуляторе или реальном устройстве, чтобы проверить результаты.
Для получения дополнительной информации о том, как Android View API создает макеты, см.Базовые знания по верстке, Получить доступ ConstraintLayout Для руководства см.Создание ConstraintLayout с помощью ConstraintLayout。
Изменить свойства вида
Рисунок 5 Propertiesокно
Вы можете начать сProperties Отредактируйте свойства представления в окне (справа от редактора макетов) без редактирования в XML. Это окно открывается толькоDesignРедактор доступен, поэтому убедитесь, что вы выбрали нижнюю часть окнаDesignТеги.
Выберите представление, которое вы хотите просмотреть в редакторе, и отредактируйте общие свойства представления. Если вам нужно получить доступ к другим свойствам этого представления, пожалуйста, нажмитеView all properties 。
Если выбранный вид ConstraintLayout Для детей окно «Свойства» предоставляет инспектор вида с несколькими элементами управления вверху, как показано на рисунке 7. Для получения дополнительной информации ConstraintLayout Для получения дополнительной информации о контроле свойств представления см.Создание согласованного пользовательского интерфейса с макетом ограничений。
В данном уроке мы создадим XML разметку, включающую текстовое поле и кнопку. В следующем уроке мы научимся обрабатывать нажатие на кнопку и передавать данные из текстового поля в другое явление.
Android предоставляет набор XML элементов, соответствующих наследникам View и ViewGroup, чтобы вы могли описывать интерфейс пользователя с помощью XML.
Объекты разметки (Layouts) являются наследниками класса ViewGroup. В данном уроке мы будем работать с линейной разметкой LinearLayout.
Рисунок 1.ViewGroup позволяет строить дерево объектов разметки.
Различная разметка
Создание разметки в XML файлах предпочтительнее, чем в исходном коде по нескольким причинам, но главным образом из-за необходимости создания различных файлов разметки для устройств с различными размерами экрана. К примеру, вы можете создать две версии разметки и заставить систему отображать одну из них на маленьких экранах, а другую на больших. Подробности читайте в разделе Поддержка устройств с различными экранами.
Создание линейной разметки (Linear Layout)
- В Android Studio откройте файл res/layout/activity_my.xml
Шаблон BlankActivity, который вы выбрали при создании проекта включает в себя файл activity_my.xml , который содержит корневой элемент RelativeLayout с вложенным виджетом TextView.
В Android Studio при открытии файла разметки по умолчанию открывается окно предпросмотра, которое содержит WYSIWYG редактор для создания интерфейса пользователя. Однако в данном уроке мы будем работать напрямую с XML файлом.
В результате разметка должна выглядеть так:
< LinearLayout xmlns : android = "http://schemas.android.com/apk/res/android"LinearLayout является наследником класса ViewGroup и размещает вложенные элементы в вертикальном или горизонтальном порядке, в зависимости от значения атрибута android:orientation. Вложенные в LinearLayout элементы отображается на экране в том порядке, в котором они описаны в XML.
Все элементы разметки должны иметь атрибуты android:layout_width и android:layout_height, которые указывают на их размер.
Поскольку LinearLayout корневой элемент разметки, он должен быть растянут на весь экран. Для этого укажем значение атрибутов android:layout_width и android:layout_height равное "match_parent". Это означает, что ширина и высота элемента должна соответствовать ширине и высоте родительского элемента.
Подробную информацию о свойствах разметки читайте в разделе Разметка.
Добавление текстового поля
Как и для каждого объекта типа View, необходимо указать некоторые XML атрибуты, характерные для элемента EditText.
- В файле activity_my.xml , создайте внутри <LinearLayout> элемент <EditText> и укажите для него атрибут android:id со значением @+id/edit_message.
- Создайте атрибуты layout_width и layout_height со значением "wrap_content".
- Создайте атрибут hint и укажите в качестве значения строковый объект с названием edit_message.
В результате элемент <EditText> должен выглядеть следующим образом:
Атрибуты элемента <EditText> означают следующее:
android:layout_width и android:layout_height Вместо указания конкретных размеров элемента, мы указали "wrap_content" , что позволяет элементу менять размер в зависимости от содержимого. Если мы зададим значение "match_parent" , то элемент EditText заполнит весь экран, поскольку его ширина и высота будут равны родительскому LinearLayout.
Подробную информацию смотрите в разделе Разметка.
Этот атрибут задает подсказку, которая отображается в текстовом поле, если оно не заполнено.
Примечание: Указанный строковый ресурс имеет такое же имя, как и идентификатор элемента. Однако при ссылке на ресурс всегда учитывается его тип (например id или string), поэтому использование одинаковых имен не вызывает проблем.
Android предоставляет XML-словарь, который соответствует подклассам View и ViewGroup, поэтому вы можете определить свой ??пользовательский интерфейс в XML, используя иерархию элементов пользовательского интерфейса.
Альтернативные макеты
Объявление пользовательского интерфейса макета в XML, а не выполнения кода полезно по нескольким причинам, но это особенно важно, поэтому вы можете создавать различные макеты для различных размеров экрана. Например, вы можете создать две версии макета и сообщить системе, чтобы в одних случаях использовался "малый" экран, в других - «большой». Для получения дополнительной информации см. класс о поддержке различных устройств.
Два других атрибута, android:layout_width и android: layout_height требуются для всех представлений для того, чтобы указать их размер.
Поскольку LinearLayout является корнем в макете, он должна заполнить всю область экрана, которая доступна в приложении, установив ширину и высоту "match_parent". Это значение указывает, что вид должен расширить свою ширину или высоту, чтобы соответствовать ширине или высоте родительского вида.
Для получения дополнительной информации о расположении свойств см. руководство Макет.
Добавление текстового поля
Для создания пользовательского редактируемого текстового поля, добавьте элемент <EditText> внутри <LinearLayout>.
Как и любом объекте View, необходимо определить некоторые атрибуты XML, чтобы указать свойства EditText объекта. Вот как вы должны объявить его в элементе <LinearLayout>:
Об объектах ресурса
Объект ресурса - уникальное имя, представляющее integer-имя, связанное с приложением ресурсов, таким, как растр, файл представления или строки.
Каждый ресурс имеет соответствующий объект ресурса, определенный в файле проекта gen/R.java. Вы можете использовать имена объектов в R классе, обратитясь к ресурсам, когда вам нужно указать строковое значение для атрибута android:hint. Вы также можете создавать произвольные идентификаторы ресурсов, которые вы связываете с целью использования атрибута android:id, который позволяет ссылаться на эту точку представления в другом коде.
SDK инструменты генерируют R.java каждый раз при компиляции вашего приложения. Вы никогда не должны изменять этот файл вручную.
Для получения дополнительной информации, читайте руководство по предоставлению ресурсов.
Об этих атрибутах:
Обеспечивает уникальный идентификатор для вида, который можно использовать для ссылки на объект из кода вашего приложения, чтобы счтиывать и управлять объектом (мы рассмотрим это в следующем уроке).
Знак (@) требуется в том случае, если вы имеете в виду любой ресурс объекта из XML. За ним следуют тип ресурса (в данном случае ID), косая черта и имя ресурса (edit_message).
Знак плюс (+) перед типом ресурсов необходим только тогда, когда вы определяете идентификатор ресурса впервые. При компиляции приложений SDK инструменты используют ID имя для создания нового идентификатора ресурса в файле проекта gen/R.java, который ссылается на элементов EditText. Как только идентификатор ресурса объявлен, другие ссылки на ID не требуют указания знака плюс. Использование знака плюс необходимо только при указании нового идентификатора ресурса и не требуется для конкретных ресурсов, таких как строки или макеты. См. в боковой колонке более подробную информацию о ресурсах объектов.
Android: layout_width и Android: layout_height
Вместо конкретных размеров по ширине и высоте, значение "wrap_content" указывает, что представление должно быть только большим по необходимости, чтобы соответствовать содержанию представления. Если бы вы вместо этого использовали "match_parent", элемент EditText заполнил бы экран,поскольку это соответствует размеру родительского LinearLayout. Для получения дополнительной информации см. руководство Макеты.
Строка для отображения по умолчанию, когда текстовое поле остается пустым. Вместо использования жесткой строки, в качестве значения "@string/edit_message" ссылается на строку ресурса, определенную в отдельном файле. Поскольку это относится к конкретному ресурсу (а не только к идентификатору), знак плюс не нужен. Однако, раз вы еще не определили строку ресурса, вы увидите ошибку компилятора. Вы исправите ее в следующем разделе, определяя строку.
Примечание: Этот строковый ресурс имеет то же имя, что и идентификатор: edit_message. Тем не менее, ссылки на ресурсы всегда ограничены областью по типу ресурса (например, id или string), поэтому использование одинаковых имен не вызывает конфликтов.
Добавление строковых ресурсов
Если вам нужно добавить текст в пользовательский интерфейс, вы всегда должны указывать каждую строку в качестве ресурса. Строковые ресурсы позволяют вам управлять всеми UI текста в одном месте, что упрощает поиск и обновление текста. Вынесение строки также позволяет локализовать ваше приложение на разных языках путем предоставления альтернативных определений для каждой строки ресурса.
В результате файл strings.xml выглядит следующим образом:
Для получения дополнительной информации об использовании строковых ресурсов для локализации приложений на другие языки, смотрите класс поддержка различных устройств.
Добавление кнопки
Теперь добавьте <Button> в макет, сразу же после элемента <EditText>:
Высота и ширина установлены ??во "wrap_content", так что кнопка расширяется в соответствии с текстом кнопки. Этой кнопке не нужен атрибут android:id, потому что он не будет ссылаться из активного кода.
Читайте также: