Это перевод первой статьи из цикла “Android Full Application Tutorial”. В цикле мы создадим android приложение, позволяющее искать фильмы или актеров в сети Интернет.
В данной статье мы рассмотрим следующие вопросы:
— создание проекта в среде eclipse
— разработка пользовательского интерфейса
— тестирование в приложения в эмуляторе
Для начала, создадим проект в Eclipse. Проект назовем AndroidMovieSearchAppProject, приложение – MovieSearchApp. Данная статья носит ознакомительный характер, поэтому в ней будет использоваться Android 1.5 (API level 3).
Пользовательский интерфейс сделаем абсолютно простым. Создадим форму со следующими элементами:
— поле ввода, куда пользователь будет вводить запрос
— две радиокнопки(фильм/актер), по которым будем определять, что ищет пользователь
— label, в котором будем показывать тип поиска
— кнопка, при нажатии на которую будем показывать пользователю результаты поиска
Результаты поиска будут отображаться в другой activity, о ней будет подробнее написано в следующих статьях серии.
Экранные формы в андроид-приложениях описываются с помощью xml файлов (для того, чтобы отделить отображение от логики). Файлы экранных форм должны лежать в папке res/layout проекта. Создадим там файл main.xml со следующим содержимым:
Заметьте, что строковые константы (@string/people например), не харкодятся, вместо них используются ключи из файла strings.xml, который расположен в папке res/values. В этом файле описываются строковые константы, необходимые для интернационализации приложения. Содержимое файла strings.xml
Hello World, MovieSearchAppActivity! MovieSearchApp Search Movies People
Вот как созданная нами экранная форма будет выглядеть в Android эмуляторе
Следующим шагом будет обращение к элементам интерфейса и обработка событий, приходящих от них. В коде получить элемент формы можно с помощью метода findById, которому передается идентификатор элемента формы.
Android предоставляет возможность обрабатывать события (клики на кнопку, смена фокуса, и тд), возникающие по действию пользователя. Для обработки нажатий на кнопку мы используем интерфейсOnClickListener, который определяет метод onClick, вызывающийся при нажатии пользователем на кнопку.
Другой полезный интерфейс — OnFocusChangeListener. Он определяет метод onFocusChange, который вызывает при смене фокуса.
Давайте посмотрим, как это можно использовать в нашей основной Activity
package com.javacodegeeks.android.apps.moviesearchapp; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnFocusChangeListener; import android.widget.Button; import android.widget.EditText; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.TextView; import android.widget.Toast; public class MovieSearchAppActivity extends Activity { private static final String EMPTY_STRING = ""; private EditText searchEditText; private RadioButton moviesSearchRadioButton; private RadioButton peopleSearchRadioButton; private RadioGroup searchRadioGroup; private TextView searchTypeTextView; private Button searchButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.findAllViewsById(); moviesSearchRadioButton.setOnClickListener(radioButtonListener); peopleSearchRadioButton.setOnClickListener(radioButtonListener); searchButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String query = searchEditText.getText().toString(); if (moviesSearchRadioButton.isChecked()) { longToast(moviesSearchRadioButton.getText() + " " + query); } else if (peopleSearchRadioButton.isChecked()) { longToast(peopleSearchRadioButton.getText() + " " + query); } } }); searchEditText.setOnFocusChangeListener(new DftTextOnFocusListener(getString(R.string.search))); int id = searchRadioGroup.getCheckedRadioButtonId(); RadioButton radioButton = (RadioButton) findViewById(id); searchTypeTextView.setText(radioButton.getText()); } private void findAllViewsById() { searchEditText = (EditText) findViewById(R.id.search_edit_text); moviesSearchRadioButton = (RadioButton) findViewById(R.id.movie_search_radio_button); peopleSearchRadioButton = (RadioButton) findViewById(R.id.people_search_radio_button); searchRadioGroup = (RadioGroup) findViewById(R.id.search_radio_group); searchTypeTextView = (TextView) findViewById(R.id.search_type_text_view); searchButton = (Button) findViewById(R.id.search_button); } public void longToast(CharSequence message) { Toast.makeText(this, message, Toast.LENGTH_LONG).show(); } private OnClickListener radioButtonListener = new OnClickListener() { public void onClick(View v) { RadioButton radioButton = (RadioButton) v; searchTypeTextView.setText(radioButton.getText()); } }; private class DftTextOnFocusListener implements OnFocusChangeListener { private String defaultText; public DftTextOnFocusListener(String defaultText) { this.defaultText = defaultText; } public void onFocusChange(View v, boolean hasFocus) { if (v instanceof EditText) { EditText focusedEditText = (EditText) v; // handle obtaining focus if (hasFocus) { if (focusedEditText.getText().toString().equals(defaultText)) { focusedEditText.setText(EMPTY_STRING); } } // handle losing focus else { if (focusedEditText.getText().toString().equals(EMPTY_STRING)) { focusedEditText.setText(defaultText); } } } } } }
Метод setContentView устанавливает, какая экранная форма будет показана пользователю в данной activity. R.layout.main – это как раз та форма, которую мы создали на предыдущем этапе. Затем мы получаем ссылки на элементы интерфейса, чтобы потом использовать их в коде. Мы создаем дваOnClickListener, один для обрабоки нажатий на радиокнопки, дугой – для кнопки поиска. Обработчики привязываются к элементам пользовательского интерфейса с помощью метода setOnClickListener.
Радиокнопки помещаются внутрь компонента RadioGroup. В коде мы можем использовать методgetCheckedRadioButtonId для получения идентификатора выбранного RadioButton.
В конце мы создадим OnFocusChangeListener, который привяжем к текстовому полю с помощью методаsetOnFocusChangeListener. С помощью данного обработчика мы сможем достичь похожей функциональности:
При потере фокуса, если поле ввода пустое, в него будет подставляться текст.
Приложение готово, теперь его надо протестировать. Тестировать приложение будем с помощью Android эмулятора. Запустим AVD (Android Virtual Device) Manager из Eclipse, и создадим новый девайс. Назовем его Android-1.5-SD и выберите платформу Android 1.5.
Далее, создадим новую Run Configuration, выберем Android Project и MovieSearchAppActivity для запуска.
На вкладке Target выберем созданный девайс и нажмем Apply и Run.
Запустится Android эмулятор, а через некоторое время наша программа.
Исходный код приложения доступен здесь
'via Blog this'
Комментариев нет:
Отправить комментарий