Показать сообщение отдельно
Старый 28.01.2011, 18:37   #1
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
FAQ: Создание нового проекта на примере Hello world

Итак, приступаем к созданию первой программы. Прежде всего нам нужно запустить Eclipse IDE. Далее заходим в меню File - New - Project... Появится окошко показанное на рисунке 1. В нем выбираем тип проекта - Android Project. Далее появится окно в котором нужно будет заполнить довольно много полей (см. рисунок 2).

В поле Project name пишем название нашего проекта: Hello world
В поле Build target выбираем версию ОС под которую будет рассчитано наше приложение: выбираем версию 1.5. Если список версий не отображается, значит вы не указали или неправильно указали в настройках расположение Android SDK. Подробнее читайте в FAQ по настройке и установке Eclipse IDE.
В поле Aplication name вводим название приложения (под каким именем приложение будет отображаться в телефоне): Hello world
В поле Packege name указываем пространство имен, которое будет использоваться в программе. Все пространства имен пишутся без пробелов, используя точку. Указываем пространство имен: com.example.hello
В поле Create Activity обязательно ставим галочку и пишем название метода, который будет вызываться при запуске нашей программы: MainActivity
В поле Min SDK Version указываем минимальную версию SDK, в которой нормально должна работать наша программа. Тут нумерация несколько необычная. Дело в том, что в Android OS версии идут начиная с 1.5 то есть 1.5, 1.6 и т.д. до версии 2.3. Так вот по версия 1.5 считается 3 версией по данной нумерации. Версия 1.6 будет уже 4 версией и т.д. Вот такая особенность. В данном поле мы указываем значение 3.

Всё, заполнив все поля нажимаем кнопку "Finish". Проект создан.

В окне среды программирования можно найти наш проект используя вкладки Navigator или Packege Explorer (см. рисунок 3). Несколько слов о структуре папок в приложении, знать их очень важно для любого разработчика. В папке SRC лежат исходные коды нашего приложения написанные на языке Java. Пока там лежит только файл MainActivity.java с исходным текстом нашей программы. В папке RES находтся все ресурсы нашей программы, папка RES имеет 3 подпапки: drawable, layout, values. В папке drawable лежит вся графика, используемая в приложении. Пока там лежит только иконка нашей программки icon.png, но если в вашей программе есть и другие картинки, то все их нужно копировать именно сюда. В подпапке layout лежат XML файлы с разметками форм нашего приложения. Пока не буду объяснять что это и зачем, опишу позже. В папке values также содержится XML файл(ы) с описанием некоторых переменных. Чаще всего тут хранят различные строки с текстом. В папке GEN лежат различные Java классы генерируемые при компиляции, сюда лучше не лезть. В папке BIN будет лежать уже скомпилированный APK файл нашего приложения, который можно будет закачать в реальный телефон и проверить работоспособность программы там.

Итак, краткий обзор папок приложения я провел. А как же его запустить в эмуляторе? Для этого жмем клавиши Ctrl+F11 или через меню Run - Run в итоге у нас появится окошко с вопросом как запускать это приложение (см. рисунок 4). В данном окне нужно выбрать строчку "Android Aplication". Ура! Начался запуск эмулятора телефона. Эмулятор запустился и сразу порадовал нас заблокированным экраном (см. рисунок 5). Не очень дружелюбно с его стороны. Сначала нам нужно снять телефон с блокировки. Для этого нужно мышью нажать на картинку замочка и переместить замочек вправо. Появится рабочий стол мобильного телефона (см. рисунок 6). Снова нашей программы не видать. Где же она? Нажимаем мышью на кучу квадратиков в нижнем углу экрана. Появится главное меню мобильника (см. рисунок 7). Ну наконец-то, можно увидеть иконку нашего приложения Hello World. Теперь для запуска приложения кликаем по его иконке и лицезреем на экране работу нашего первого приложения под Android (см. рисунок 8).

Что происходит при запуске приложения?
При запуске приложения запускается указанный нами при создании приложения класс MainActivity.java Класс крайне прост, его исходный код по сути состоит всего из 2 строк:
package com.examles.hello;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}
Если вы уже кодили под Java ME, то знаете, что каждая программа (она же мидлет) имеет как минимум 3 точки входа: startApp(), pauseApp() и destroyApp():

startApp - вызывается при запуске программы
pauseApp - вызывается при сворачивании программы или при входящем звонке во время работы программы
destroyApp - вызывается при закрытии программы

Аналогичную ситуацию мы видим и в Android программе, но тут методов больше и они немного другие:

onCreate - вызывается при открытии программы, но перпед запуском
onStart - запуск программы
onPause - пауза в программе
onResume - продолжение работы программы после паузы
onStop - остановка программы, но ещё не закрытие
onDestroy - закрытие программы
onRestart - перезапуск программы

Итак, возвращаемся к нашему исходному коду. В нем мы видим, что в нем есть определение метода onCreate. Причем вся программа занимает всего 2 строки.

super.onCreate(savedInstanceState); - тут мы передаем обратно данные которые приняли при запуске приложения, так как мы их никак не используем, то передаем их дальше по очереди другим приложениям
setContentView(R.layout.main); - тут мы выводим на экран форму под названием main

Итак, наша программа просто выводит на экран некую форму под названием main. Надо сказать, что программы под Android очень похожи по своей структуре на обычные приложения для Windows. И там и тут приложение состоит из непосредственно кода и одной или нескольких форм, которые выводятся на экран. Тут ситуация та же. Код программы всего лишь выводит на дисплей некую форму под названием main. Может посмотрим на состав кода в данной форме? Код этот можно посмотреть в папке res/layouts/main.xml вот этот код:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
    
<TextView  
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="@string/hello"
/>
    
</LinearLayout>
Проще говоря что мы можем видеть в данном файле разметки? У нас есть некий блок с линейной вертикальной разметкой элементов (LinearLayout) в котором содержится всего один элемент - некий TextView с текстом @string/hello. Эти странные собачки в тексте элемента говорят о том, что на самом деле выводимый на экран текст нужно искать не тут, а в файле с переменными res/values/strings.xml вот текст данного файла:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, MainActivity!</string>
    <string name="app_name">Hello World</string>
</resources>
Итак, программа выводит на экран форму, а форма выводит на экран строку которая хранится в файле strings.xml в поле hello. Вот собственно и всё что нам следовало знать.

Как поменять выводимый на экран текст на свой?
Решений данной проблемы три:
1. Открыть файл strings.xml и изменить значение переменной hello на свой текст непосредственно там. При этом откроется симпатичный редактор показанный на рисунке 9. Попробуйте поменять так текст переменной на строку "Тут был Вася Пупкин", к примеру. Среда отлично понимает русский шрифт.
2. Немного подправить сам файл с формой (main.xml)
Исправлять нужно немного:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView
	android:id="@+id/text"  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Тут был Вася"
    />
</LinearLayout>
3. Изменить выводимую в форме строку программно. Тогда нужно будет немного изменить исходный текст нашей Java программы MainActivity.java (текст разметки формы main.xml тоже нужно править как показано в пункте 2)

package com.examles.hello;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView tw = (TextView)findViewById(R.id.text);
        tw.setText("odd was here");
    }
}
Скорее всего вы так ничего и не пойметее из данного урока, но не слишком расстраивайтесь. Это нормально. Со временем вы будете понимать всё больше и больше. Главное читайте FAQ и книги по программированию под Android почаще. Удачи в разработках и не забывайте заглядывать в наши FAQи!
Миниатюры
Нажмите на изображение для увеличения
Название: hello1.png
Просмотров: 1381
Размер:	21.5 Кб
ID:	12532  Нажмите на изображение для увеличения
Название: hello2.png
Просмотров: 1344
Размер:	35.1 Кб
ID:	12533  Нажмите на изображение для увеличения
Название: hello3.png
Просмотров: 1320
Размер:	7.5 Кб
ID:	12534  Нажмите на изображение для увеличения
Название: hello4.png
Просмотров: 1286
Размер:	11.4 Кб
ID:	12535  Нажмите на изображение для увеличения
Название: hello5.png
Просмотров: 1422
Размер:	127.6 Кб
ID:	12536  

Нажмите на изображение для увеличения
Название: hello6.png
Просмотров: 1345
Размер:	140.1 Кб
ID:	12537  Нажмите на изображение для увеличения
Название: hello7.png
Просмотров: 1343
Размер:	92.3 Кб
ID:	12538  Нажмите на изображение для увеличения
Название: hello8.png
Просмотров: 1344
Размер:	55.6 Кб
ID:	12539  Нажмите на изображение для увеличения
Название: hello9.png
Просмотров: 1280
Размер:	47.6 Кб
ID:	12540  
(Offline)
 
Ответить с цитированием
Эти 14 пользователя(ей) сказали Спасибо odd за это полезное сообщение:
BlackDragon (20.05.2011), DeeJex (14.03.2011), Hurrit (28.01.2011), Igor (28.01.2011), Mhyhr (28.01.2011), midlet_pascal (29.01.2012), moka (29.01.2011), Nex (14.05.2011), pax (28.01.2011), Phantom (28.01.2011), psih1 (29.01.2011), Randomize (28.01.2011), Sanya (27.02.2011), Tadeus (23.02.2011)