Программное создание FrameLayout
рамка, соответствующая элементу, станет желтой (),
Рассмотрим работу с его свойствами при помощи вкладки Properties. Когда разметка открыта в графическом представлении, то слева от основной части редактора кода можно увидеть панель инструментов, в которой сгруппированы различные элементы по группам Layouts, Widgets, Text Fields и так далее. В группе Widgets найдите элемент ImageButton, перетащите её на форму и отпустите. Точное расположение нас не интересует, поэтому не заморачивайтесь по этому поводу, постарайтесь разместить компонент в центре экрана активности.
Теперь научимся менять фон для экрана приложения. Сейчас у нас экран белого цвета. Подготовим цветовой ресурс с нужным цветом.
Возвращаемся в файл разметки activity_main.xml. Справа найдите вкладку Properties, в которой отображаются свойства для выбранного элемента. Новички часто путаются на первых порах и начинают менять свойства не у тех элементов, которые им были нужны. Сейчас у вас есть сама форма, графическая кнопка ImageButton и текстовая метка TextView с надписью Hello World!. Пощёлкайте по этим элементами, чтобы увидеть, как меняется содержание свойств в панели свойств. Так как мы собираемся работать с фоном экрана приложения, то щёлкните в области формы и в панели свойств найдите свойство background. Щелкните рядом с этим словом во второй колонке, где нужно прописывать значения. Появится текстовое поле, в которое можно ввести значение вручную, и кнопка с тремя точками, которая запустит диалоговое окно для создания ресурса.
Переходим на вкладку Color и выбираем цвет, удобным вам способом. Я ввёл значение FFC0CB в текстовом поле с меткой #.
Нажимаем кнопку OK и форма окрасится в розовый цвет. Получилось глаМУРненько.
Если переключиться в текстовый режим, то увидим, что у элемента RelativeLayout добавилась строчка:
android:background="#ffffc0cb"
Мы напрямую установили нужное нам значение. В реальности это неправильный подход. Вы должны использовать цветовые ресурсы, поэтому изучим правильный вариант добавления цвета.
Снова нажимаем на кнопку с тремя точками у свойства background и в диалоговом окне переходим на вкладку Project. Нажимаем на кнопку New Resource... и выбираем вариант New Color Value.... Появится ещё одно диалоговое окно. Заполняем пустые поля нужными значениями. Обратите внимание, что ресурс будет сохранён в новом файле colors.xml. Это общепринятый стандарт для хранения цветов, хотя вы можете сохранить ресурс и в файле strings.xml и styles.xml, которые можно выбрать из выпадающего списка.
Нажимаем OK и смотрим на изменения. Теперь цвет задан следующим образом:
android:background="@color/background_color"
Далее поменяем картинку для графической кнопки. Находим подходящее изображение и копируем его, например, в папку res/drawable-hdpi. Можно в Проводнике скопировать нужную картинку и, переключившись на студию, вставить её в нужную папку студии.
Картинку можете взять у меня.
Когда вы поместите графический файл в указанную папку, то студия автоматически создаёт ресурс типа Drawable с именем файла без расширения, к которому можно обращаться программно. Выделяем элемент ImageButton на форме и в панели свойств выбираем свойство src. Снова щёлкаем на кнопке с тремя кнопками и выбираем ресурс в категории Drawable - вы там должны увидеть ресурс pinkhellokitty (имя добавленного ранее файла).
Запомните, что имена ресурсов должны начинаться с буквы и могут содержать буквы и цифры, а также знак нижнего подчеркивания. Другие символы типа тире, решётки и т.д. использовать нельзя.
Там же в окне свойств находим свойство onClick и вручную прописываем onClick - это будет именем метода для обработки нажатия на кнопку. Вы можете придумать и другое имя, например, onButtonPressed, но я привык к такому подходу.
Мы закончили работу с графическим интерфейсом приложения. Напоследок, выделите элемент TextView с надписью Hello, World и в окне свойств посмотрите на его идентификатор (ID). Если там пусто, то удалите его, он не оправдал наших надежд. В категории Widgets найдите компонент Large Text и перетащите его на форму приложения. Постарайтесь разместить его под графической кнопкой с котёнком.
У этого компонента точно будет что-то написано в свойстве id. Скорее всего, это будет @+id/textView. Запомните его. Впрочем, мы могли не удалять первый компонент, а прописать идентификатор вручную. Но мне пришлось бы объяснять лишние детали, а так сразу получили результат. Вот я не удалял его и у меня экран выглядит так. А у вас будет текст Large Text. Ничего страшного.
У меня получилось следующее:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background_color"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="ru.alexanderklimov.hellokitty.MainActivity">
<ImageButton
android:id="@+id/imageButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:onClick="onClick"
android:src="@drawable/pinkhellokitty" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/imageButton"
android:layout_alignStart="@+id/imageButton"
android:layout_below="@+id/imageButton"
android:layout_marginTop="42dp"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>
Установите курсор мыши внутри текста "onClick" у кнопки и нажмите комбинацию Alt+Enter
В всплывающем окне выберите вариант Create 'onClick(View)' in 'MainActivity'.
В коде класса MainActivity появится заготовка для обработки щелчка кнопки.
Раз уж у нас теперь открыт файл MainActivity.java, то продолжим теперь работу в нём. Так как мы собираемся менять текст в текстовой метке, необходимо прописать данный элемент в коде. До метода onCreate() наберите строчку:
private TextView mHelloTextView;
Мы объявили переменную типа TextView под именем mHelloTextView.
Если вы набирали вручную и при подсказках использовали клавишу Enter, то класс TextView автоматически импортируется и запись появится в секции import. Если вы просто копируете текст с сайта, то студия подчеркнёт название класса TextView и предложит импортировать его вручную.
Далее внутри метода onCreate() после вызова метода setContentView() добавьте строку:
mHelloTextView = (TextView)findViewById(R.id.textView); // помните, я просил запомнить идентификатор?
Избегайте соблазна скопировать строку с сайта и вставить в код, пишите самостоятельно и активно используйте автозавершение (Ctrl+Пробел) при наборе слов. Студия часто сама активно помогает подсказками. Теперь система знает о существовании элемента TextView и мы можем к нему обращаться для изменения различных свойств, например, поменять текст.
Переходим к заготовке для щелчка кнопки.
public void onClick(View view) {
}
В следующих занятиях мы подробнее разберём работу с данным методом, пока просто пишем код между фигурными скобками:
mHelloTextView.setText("Hello Kitty!");
Мы обращаемся к элементу mHelloTextView и через метод setText() программно меняем текст на нужные слова.
Запускаем программу и нажимаем на кнопку с изображением котёнка. Если всё сделали правильно, то отобразится замечательная фраза. С этого момента можете считать себя настоящим программистом - вы научились создавать цветовые и графические ресурсы, менять фон у приложения через XML-разметку, обрабатывать нажатия кнопки и выводить текстовые сообщения.
В папке app\build\outputs\apk проекта можно найти готовый APK-файл, который вы можете выложить у себя на сайте и дать скачать знакомым девушкам (в телефоне должно быть разрешение на установку неподписанных приложений), вы станете невероятно круты в их глазах.
Исходный код для ленивых
Ткните лапкой, чтобы развернуть текст
// Если этот код работает, его написал Александр Климов,
// а если нет, то не знаю, кто его писал.
package ru.alexanderklimov.hellokitty;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView mHelloTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mHelloTextView = (TextView) findViewById(R.id.textView);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void onClick(View view) {
mHelloTextView.setText("Hello Kitty!");
}
}
Поздороваемся с котом по человечески. Найдите в разделе Text Fields компонент Plain Text и перетащите его на экран активности, разместив где-то над картинкой. Оставляем все свойства без изменений, разве только в свойстве hint можно добавить строчку-подсказку, которая будет исчезать при вводе текста.
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_above="@+id/imageButton"
android:layout_centerHorizontal="true"
android:layout_marginBottom="66dp"
android:hint="Введите имя кота" />
Переходим в класс MainActivity и добавляем новую переменную рядом с переменной mHelloTextView:
private EditText mNameEditText;
Свяжем созданную переменную с компонентом в методе onCreate():
mNameEditText = (EditText) findViewById(R.id.editText);
Поменяем код для щелчка кнопки.
public void onClick(View view) {
if (mNameEditText.getText().length() == 0) {
mHelloTextView.setText("Hello Kitty!");
} else {
mHelloTextView.setText("Привет, " + mNameEditText.getText());
}
}
Мы внесли небольшую проверку. Если в текстовом поле пустой текст, то длина текста составляет ноль символов и мы по-прежнему выводим надпись "Hello Kitty!". Если пользователь введёт имя своего кота, то приложение поздоровается с ним. Какая умная и вежливая программа у нас получилась.
Итак, для начала теор. минимума достаточно, давайте наконец то создадим наш Hellow World! Чтобы привнести в стандартный вид приложения свою новизну, индивидуальность и оригинальность, давайте в режиме визуального редактирования с помощью мышки перетащим находящийся там элемент TextViewс текстом "Hellow World!" (выделяем надпись "Hellow World!" кликом и тащим куда надо) в центр экрана, потом зайдем в режим редактирования кода Textи в коде, описывающем наш текстовый элемент, допишем строчку с командой изменения размера текста (нижняя строчка в коде, отделенная пробелом):
<TextView
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="183dp"
android:textSize="25pt"/>
Уже в окошке Previewв можете видеть изменение размера текста.
Наше приложение готово! Осталось его протестировать и создать APK файл, чтобы показать наше творение всем, кому только можно. Настраиваем запуск либо эмулятора, либо реального устройства (как это сделать, смотрим тут) и нажимаем зеленую кнопку Run, либо на панели вверху Run --- Run "app", либо жмем Shift + F10. Дожидаемся загрузки эмулятора/установки приложения на телефон и смотрим на результат. Поздравляю, ваше первое Android приложение создано!
1.4.надпись, намерения и вобщем случае - другая информация. (его) ом Помимо корневого элемента обязательным манифеста является его дочерний. В манифесте может быть только один такой элемент. Он может содержать в себе множество других дочерних элементов (<activity>, <service>, <receiver>, <provider> и другие), которые определяют структуру и работу приложения. Порядок расположения этих элементов, находящихся на одном уровне, произвольный. Все значения устанавливаются через атрибуты элементов. Кроме обязательных элементов, упомянутых выше, в манифесте по мере необходимости используются другие элементы. Перечислим значения некоторых из них в Android:
,
Аndтвкщшвуказание - erfpfybtшсщтallowBackup
ю и восстановить инфраструктуру. Если этот атрибут установлен в ложь ...
<activity
android:name="com.example.geodating.GS_selection"
android:label="@string/app_name"
android:theme="@android:style/Theme.Dialog"
android:configChanges="keyboardHidden|orientation" >
</activity>
<permission> объявляет разрешение, которое используется для ограничения доступа к определенным компонентам или функциональности данного приложения. В этой секции описываются права, которые должны запросить другие приложения для получения доступа к приложению. Приложение может также защитить свои собственные компоненты (Activities, Services, Broadcast receivers и Content providers) разрешениями. Оно может использовать любое из системных разрешений, определенных Android или объявленных другими приложениями, а также может определить свои собственные разрешения.
<uses-permission> запрашивает разрешения, которые приложению должны быть предоставлены системой для его нормального функционирования. Разрешения предоставляются во время установки приложения, а не во время его работы.
Наиболее распространённые разрешения:
INTERNET – доступ к интернету
READ_CONTACTS – чтение (но не запись) данных из адресной книги пользователя
WRITE_CONTACTS – запись (но не чтение) данных в адресную книгу пользователя
RECEIVE_SMS – обработка входящих SMS
ACCESS_FINE_LOCATION – точное определение местонахождения при помощи GPS
<uses-sdk> позволяет объявлять совместимость приложения с указанной версией (или более новыми версиями API) платформы Android. Уровень API, объявленный приложением, сравнивается с уровнем API системы мобильного устройства, на который инсталлируется данное приложение.
Атрибуты:
android:minSdkVersion определяет минимальный уровень API, требуемый для работы приложения. Система Android будет препятствовать тому, чтобы пользователь установил приложение, если уровень API системы будет ниже, чем значение, определенное в этом атрибуте.
android:maxSDKVersion позволяет определить самую позднюю версию, которую готова поддерживать программа.
targetSDKVersion позволяет указать платформу, для которой разрабатывалось и тестировалось приложение.
<uses-configuration> указывает требуемую для приложения аппаратную и программную конфигурацию мобильного устройства. Спецификация используется, чтобы избежать инсталляции приложения на устройствах, которые не поддерживают требуемую конфигурацию. Если приложение может работать с различными конфигурациями устройства, необходимо включить в манифест отдельные элементы <uses-configuration> для каждой конфигурации.
<uses-feature> объявляет определенную функциональность, требующуюся для работы приложения. Таким образом, приложение не будет установлено на устройствах, которые не имеют требуемую функциональность. Например, приложение могло бы определить, что оно требует камеры с автофокусом. Если устройство не имеет встроенную камеру с автофокусом, приложение не будет установлено.
Возможные атрибуты:
android.hardware.camera – требуется аппаратная камера.
android.hardware.camera.autofocus – требуется камера с автоматической фокусировкой.
<supports-screens> определяет разрешение экрана, требуемое для функционирования приложения. По умолчанию современное приложение с уровнем API 4 или выше поддерживает все размеры экрана и должно игнорировать этот элемент.
<application> один из основных элементов манифеста, содержащий описание компонентов приложения. Содержит дочерние элементы (<activity>, <service>, <receiver>, <provider> и другие), которые объявляют каждый из компонентов, входящих в состав приложения. В манифесте может быть только один элемент <application>.
Есть еще пара важных
Рассмотрим состав панели Palette. После наименования групп указываются конкретные элементы.
Form Widgets
TextView (Метка)
Button (Кнопка)
ToggleButton (Кнопка-переключатель)
CheckBox (Флажок)
RadioButton (Переключатель)
Spinner (Выпадающий список)
ProgressBar (Large, Normal, Small, Horizontal) - индикаторы прогресса
SeekBar (Ползунок)
QuickContactBadge
RatingBar (Рейтинг)
Switch (Переключатель с текстом)
ListPopupWindow
Text Fields
EditText (Редактируемый текст)
AutoCompleteTextView (????????), MultiAutoCompleteTextView
Layouts
GridLayout
LinearLayout
RelativeLayout
FrameLayout
Include Other Layout
Fragment
TableLayout и TableRow
Space
DrawerLayout
SlidingPanelLayout
SwipeRefreshLayout
BlinkLayout (недокументированный)
CardView (Карточка).