Lecaw

Учимся создавать Web-сайты

OffTopic: Разработка приложений для Android

August 2, 2013
CSS
201hits

В данной статье мы поговорим о разработке приложений для Android. Сегодня мы узнаем: Как работать с многостраничными приложениями, как работать с меню, как использовать ресурсы строк, и - как использовать переменные на разных страницах. Мы также столкнемся с элементом управления RatingBar и я покажу, как добавить обработчики событий непосредственно в самом коде.

 

Шаг 1. Создайте новый проект

Прежде всего, убедитесь, что у Вас установлена среда разработки, если нет то установите программу Eclipse. Теперь нам нужно подготовить новый проект: File -> New -> Android Application Project. Вы можете использовать для названия приложения и название проекта любое имя, мы назвали "Lessons2", на следующем шаге мы должны выбрать иконку для нашего проекта и, наконец, создаем новый Blank Activity. Назовем главное окно - MainWindow.

Шаг 2. Страницы (Activities)

Сейчас наше приложение состоит из одной страницы. А как добавить еще несколько страниц? Теперь, вы должны понять, что страницы (или окна), являются активными (для Android). Чтобы добавить страницу, мы должны добавить новую категорию. Это можно сделать несколькими способами:

Используйте меню: File -> New -> Other

Щелкните правой кнопкой мыши и выберите "Package Explorer"

Нажмите CTRL + N

В качестве дополнительной страницы, создадим страницу "About".

Теперь я хочу показать Вам, как использовать предопределенные строковые ресурсы. По умолчанию они находятся в файле "res/values/strings.xml", откройте этот файл. Заметим, что Вы можете открыть этот файл в двух режимах: с графическим интерфейсом и в виде текстового файла. Мы будем использовать первый режим, чтобы добавить несколько текстовых кнопок. На рисунке ниже видно, как добавлять ключи для "About".

Впоследствии Вы легко сможете использовать весь этот код при редактировании свойств в GUI. Например, я использовал ключ в качестве значения элемента текста на нашей странице "About".

Для закрытия этой страницы, давайте добавим новую кнопку "Close" (чтобы закрыть эту страницу и вернуться к главному окну). Для того, чтобы добавить обработчик событий OnClick для данной кнопки, можно указать в настройках обработчика, или, мы можем добавить этот обработчик событий непосредственно в код. Ниже представлен код всей страницы "About":

package com.example.lesson2;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class About extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_about);
		// Обработчик нажатия кнопок
		Button obClose = (Button)findViewById(R.id.buttonClose);
		obClose.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// Закрываем страницу "About" 
				finish();
			}
		});
	}
}

Шаг 3. Меню

Работать с меню в Eclipse довольно легко. Откройте "res/menu/main_window.xml" в проводнике и аналогичным образом (как мы добавили новые строки) добавьте элементы меню:

Не забудьте установить идентификаторы элементов, действия и названия. Если вы запустите приложения, Вы заметите, что не все элементы работают. Мы должны добавить функцию для обработки элементов меню. Откройте файл "src/com.example.lesson2/MainWindow.java" в проводнике. Он содержит все функции главного окна. Теперь, в меню выберите "Source -> Override / Implement Methods". Здесь мы должны найти метод "onOptionsItemSelected" (он находится в середине списка), отметьте его и нажмите кнопку ОК.

Это добавит простую функцию overrided:

@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO автоматически сгенерированный метод stub
		return super.onOptionsItemSelected(item);
	}

Для отображения некоторых результатов на нашей странице я создал несколько элементов на плане нашего главного окна: несколько элементов textView и один editText. Теперь мы можем изменять "onOptionsItemSelected":

@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		TextView otResult = (TextView) findViewById(R.id.editTextMenuResult);
		switch (item.getItemId()) {
			case R.id.about:
				// Отображение страницы 'About' (действие)
				Intent opAbout = new Intent(this, About.class);
				startActivity(opAbout);
				break;
			case R.id.action_settings:
				// Отображение страницы 'Settings' (действие) и ожидание результатов
				Intent opSettings = new Intent(this, Settings.class);
				startActivityForResult(opSettings, SETTINGS_RESULT);
				break;
			case R.id.item1:
				otResult.setText("You have selected: Item 1");
				break;
			case R.id.item2:
				otResult.setText("You have selected: Item 2");
				break;
			case R.id.item3:
				otResult.setText("You have selected: Item 3");
				break;
			default:
				return super.onOptionsItemSelected(item);
		}
		return true;
	}

Как видите, мы можем легко использовать наши идентификаторы (мы их использовали, когда создали наши элементы меню). Мы использовали функции ‘TextView:: setText’, чтобы установить пользовательский текст для нашего элемента textView. Кроме того, мы использовали функцию ‘startActivity’, чтобы вывести на экран окно 'About' (Действие) и функцию ‘startActivityForResult’ для вывода окна 'Settings' (потому что мы переходим на нее, ожидая ответа перед этим окном).

Шаг 4. Взаимодействие между действиями

Давайте подготовим еще одно действие для страницы, чтобы продемонстрировать, как передавать переменные между действиями. Назовем новую страницу "Settings", и новый элемент ratingBar. После нажатия на звезды, эта информация будет отправлена в главное окно. Как обычно, мы должны добавить необходимый обработчик события (файл "src/com.example.lesson2/Settings.java"), посмотрите на код ниже:

package com.example.lesson2;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.RatingBar;
import android.widget.RatingBar.OnRatingBarChangeListener;
public class Settings extends Activity {
	public final static String SETTINGS_RESULT = "SETTINGS_RESULT";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_settings);
		RatingBar orRating = (RatingBar)findViewById(R.id.ratingBar1);
		orRating.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
			@Override
			public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
				Intent opMain = new Intent();
				opMain.putExtra(SETTINGS_RESULT, rating);
				setResult(RESULT_OK, opMain);
				finish();
			}
		});
	}
}

Существует одна функция: onRatingChanged. Эта функция вызывается, когда мы нажимаем на звезды элемента ratingBar. В этот момент мы должны сделать несколько вещей, чтобы получить главное окно: перейдите на просмотр значения в этом же окне с помощью функции "putExtra" и установите основной результат этого окна на (RESULT_OK) и закройте окно (на странице настроек). Важно установить результат - "RESULT_OK", чтобы убедиться, что это окно закрывается должным образом в противном случае, Вам будет отправлено - "RESULT_CANCELED". Для завершения, мы должны вернуться на главную страницу (файл 'src/com.example.lesson2/MainWindow.java') и добавить еще одну функцию:

private final static int SETTINGS_RESULT = 0;
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO автоматически сгенерированный метод stub
		super.onActivityResult(requestCode, resultCode, data);
		// Задаем настройки страницы Settings
		if (requestCode == SETTINGS_RESULT && resultCode == RESULT_OK) {
			// Получаем настройки рейтинга и отображаем его на 
главной странице
			float fRes = data.getFloatExtra(Settings.SETTINGS_RESULT, 0);
			TextView otSettingsResult = (TextView) findViewById(R.id.textViewSettingsResult);
			otSettingsResult.setText(fRes + " stars");
		}
	}

В этом коде видно, что мы можем распознать выбранную страницу и код результата, который был отправлен этой страницей. 

Ниже вы можете скачать Демо.

СКАЧАТЬ

 

Дополнительная информация

Роман Воеводин

Воеводин Роман - дизайнер, модератор, соучредитель и член команды Lecaw.

Эл. почта
RATTING:
(2 голосов)

1 Комментарий

  • Комментировать
    Deprime Воскресенье, 04 Август 2013 16:03

    Всё бы ничего, но нубы замешкаются на первых шагах - где инфа про то, что Android SDK нужно поставить, Java JDK, ну и плагин для Eclipse.
    Сам маловато толкался с андройдом, поэтому интересно почитать статейки про него на вашем ресурсе (хоть и переводы по видимому).
    Было бы здорово еще увидеть статью про синхронизацию клиентского андройд приложения и серверной части

    Пожаловаться

Оставить комментарий