Главная страница

моб разраб. Лабораторные работы с 1 по 21. Лабораторная работа Использование значений строк и цветов


Скачать 5.49 Mb.
НазваниеЛабораторная работа Использование значений строк и цветов
Анкормоб разраб
Дата05.03.2022
Размер5.49 Mb.
Формат файлаdocx
Имя файлаЛабораторные работы с 1 по 21.docx
ТипЛабораторная работа
#383909
страница11 из 20
1   ...   7   8   9   10   11   12   13   14   ...   20

ClassesActivity.

  1. В каждой из созданных Активностей переопределите метод onCreate следующим образом (внеся соответствующие изменения в имя ресурса tabX_content):

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
Resources res = getResources();

String contentText = res.getString(R.string.tab2_content);
TextView textView = new TextView(this); textView.setText(contentText);

setContentView(textView);

}
Обратите внимание на то, что в каждой Активности используются собственные строковые ресурсы.

  1. Замените базовый класс для TabWidgetSampleActivity с Activity на TabActivity и переопределите метод onCreate следующим образом:

@Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
Resources res = getResources();

String tab1Indicator = res.getString(R.string.tab1_indicator); String tab2Indicator = res.getString(R.string.tab2_indicator); String tab3Indicator = res.getString(R.string.tab3_indicator);
TabHost tabHost = getTabHost(); TabHost.TabSpec spec;

Intent intent;

intent = new Intent().setClass(this, StudentsActivity.class); spec = tabHost.newTabSpec("students").setIndicator(tab1Indicator)

.setContent(intent); tabHost.addTab(spec);

intent = new Intent().setClass(this, TeachersActivity.class);

spec = tabHost.newTabSpec("teachers").setIndicator(tab2Indicator)

.setContent(intent); tabHost.addTab(spec);
intent = new Intent().setClass(this, ClassesActivity.class); spec = tabHost.newTabSpec("class").setIndicator(tab3Indicator)

.setContent(intent); tabHost.addTab(spec);
tabHost.setCurrentTab(1);

}
В этом методе мы используем для запуска нужных Активностей так называемые явные

Намерения (Intent). Намерения и их использование будут рассмотрены позже.


  1. При попытке запуска проекта на выполнение произойдет аварийное завершение работы приложения, так как Активности, созданные для отображения контента вкладок неизвестны системе, потому что не описаны в Манифесте приложения. Требуется отредактировать файл AndroidManifest.xml так, чтобы все используемые Активности были в нем описаны. Кроме того, для улучшения внешнего вида интерфейса имеет смысл изменить используемую тему оформления на такую, где нет строки заголовка : Узел должен выглядеть следующим образом:


android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar">


android:name=".TabWidgetSampleActivity" android:label="@string/app_name">



<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>





<activity android:name=".StudentsActivity"/>

<activity android:name=".TeachersActivity"/>

<activity android:name=".ClassesActivity"/>




  1. Запустите приложение и поэкспериментируйте с вкладками:




  1. Локализуйте приложение с помощью индивидуальных для разных языков строковых ресурсов.

Лабораторная работа «Использование WebView»

В данной лабораторной работе рассматривается использование виджета web-браузера и применяется итеративный подход к созданию приложения.

  1. Создайте новый проект с именем WebViewSample.

  2. Отредактируйте файл res/layout/main.xml:

"1.0" encoding="utf-8"?>

<WebView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/webview"

android:layout_width="fill_parent" android:layout_height="fill_parent" />


  1. Добавьте в конец метода onCreate Активности WebViewSampleActivity

следующие строки:

WebView webView = (WebView) findViewById(R.id.webview); webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl("http://www.ya.ru");


  1. Запустите приложение:



  1. Очевидно, что в супе чего-то не хватает у приложения отсутствуют полномочия на доступ к сети. Добавим нужные полномочия в Манифест приложения, добавив элемент <uses-permission> внутри корневого узла <mainfest>:

<uses-permission android:name="android.permission.INTERNET"/>

  1. Запустим проект (нижняя часть картинки отрезана):




  1. Продолжим улучшать приложение. Для увеличения полезной площади экрана запретим показ заголовка, для этого укажем соответствующую тему в файле Манифеста:


android:name=".WebViewSampleActivity" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar">


  1. Запустим проект и убедимся том, что (первая) цель достигнута.

  2. В настоящий момент ссылки, ведущие за пределы сайта www.ya.ru обслуживаются стандартным web-браузером, а не нашим WebView, так как оно не в состоянии обработать эти запросы и виджет webView автоматически посылает системе соответствующее Намерение (Intent), обрабатываемое стандартным браузером. У этой проблемы есть два решения:

    • Добавить в Манифест нужный Фильтр Намерений (IntentFilter)

    • Переопределить внутри нашей Активности класс WebViewClient, чтобы приложение могло обрабатывать свои собственныезапросына отображение web-ресурсов с помощью имеющегося виджета WebView.

Второй вариант является более приемлемым еще и потому, что в этом случае не будет рассматриваться системой как альтернативный web-браузер, что произошло бы в случае добавления Фильтра Намерений в Манифест.

  1. Вынесем объект webView из метода onCreate и сделаем его членом класса, после чего добавим внутри Активности новый класс WebViewSampleClient, расширяющий класс WebViewClient , после чего установим свой обработчик запросов на отображение web-ресурсов:

public class WebViewSampleActivity extends Activity {
WebView webView;
@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);
webView = (WebView) findViewById(R.id.webview); webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl("http://www.ya.ru");
webView.setWebViewClient(new WebViewSampleClient());

}
private class WebViewSampleClient extends WebViewClient { @Override

public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url);

return true;

}

}

}

  1. Запустим приложение и убедимся, что

  2. Оставшийся серьезный недостаток – «неправильная» обработка нажатия кнопки

«назад» устройства, приложение при этом заканчивает свою работу. Решение этой проблемы простое и прямолинейное: сделаем свой обработчик событий нажатия на кнопки, в котором будет реализовано только одно действие: если была нажата кнопка «назад», виджет WebView получит команду вернуться на предыдущую страницу (если у него есть такая возможность). Переопределим метод onKeyDown в Активности:

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { webView.goBack();

return true;

}

return super.onKeyDown(keyCode, event);

}


  1. Запустим приложение и убедимся, что цель достигнута.


Адаптеры в Android

Адаптеры в Android являются связующими классами между данными приложения и Представлениями. Адаптер отвечает за создание дочерних Представлений, отображающими каждый элемент внутри родительского виджета, а также обеспечивает доступ к исходным данным, используемым приложением. Представления, использующие привязку к Адаптеру, должны быть потомками абстрактного класса AdapterView.

Android содержит набор стандартных Адаптеров, которые доставляют данные в стандартные виджеты пользовательского интерфейса. Двумя наиболее полезными и часто используемыми Адаптерами являются ArrayAdapter и SimpleCursorAdapter.

ArrayAdapter использует механизм обобщенных типов (generics) языка Java для привязки родительского класса AdapterView к массиву объектов указанного типа. По умолчанию ArrayAdapter использует метод toString() для каждого элемента в массиве, чтобы создать и заполнить текстовыми данными виджеты TextView.

SimpleCursorAdapter привязывает указанное в разметке Представление к столбцам Курсора, ставшего результатом запроса к СУБД или Контент-Провайдеру. Для его использования требуется описать разметку в формате XML, а затем привязать каждый столбец к Представлениям из этой разметки. Адаптер создаст Представления для каждой записи из Курсора и наполнит их данными из соответствующих столбцов.

SimpleAdapter позволяет привязать ListView к списку ArrayList, содержащему объекты типа Map (ассоциативные массивы, содержащие пары «ключ-значение»). Для каждого такого объекта при отображении используется один элемент из ListView. Как и для SimpleCursorAdapter, для отображения применяется XML-разметка, к элементам которой привязываются члены каждого объекта типа Map.
Использование Адаптеров для привязки данных.

Чтобы применить Адаптер, необходимо вызвать из Представления (потомка абстрактного класса AdapterView) метод setAdapter() (или его более конкретизированный вариант).

Пример использования ArrayAdapter:
ArrayList myStringArray = new ArrayList(); ArrayAdapter myAdapterInstance;
int layoutID = android.R.layout.simple_list_item_1; myAdapterInstance = new ArrayAdapter(this, layoutID,

myStringArray); myListView.setAdapter(myAdapterInstance);
Пример использования SimpleCursorAdapter:
String uriString = "content://contacts/people/";

Cursor myCursor = managedQuery(Uri.parse(uriString), null, null, null, null);
String[] fromColumns = new String[] {People.NUMBER, People.NAME};

int[] toLayoutIDs = new int[] { R.id.nameTextView, R.id.numberTextView}; SimpleCursorAdapter myAdapter;

myAdapter = new SimpleCursorAdapter(this, R.layout.simplecursorlayout, myCursor, fromColumns, toLayoutIDs);
myListView.setAdapter(myAdapter);
Лабораторнаяработа «Использование ListView»


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

  2. В каталоге res/values создайте файл arrays.xml со следующим содержимым:

"1.0" encoding="utf-8"?>


"stations">

Авиамоторная

Автозаводская

Академическая

Александровский сад

Алексеевская

Алтуфьево

Аннино

Арбатская (Арбатско-Покровская линия)

Арбатская (Филевская линия

Аэропорт

Бабушкинская

Багратионовская

Баррикадная

Бауманская

Беговая

Белорусская

Беляево

Бибирево

Библиотека имени Ленина

Битцевский парк

Борисовская

Боровицкая

Ботанический сад

Братиславская

Бульвар адмирала Ушакова

Бульвар Дмитрия Донского

Бунинская аллея

Варшавская

ВДНХ

Владыкино

Водный стадион

Войковская

Волгоградский проспект

Волжская

Волоколамская

Воробьевы горы

Выставочная

Выхино

Деловой центр

Динамо

Дмитровская

Добрынинская

Домодедовская

Достоевская

Дубровка

Жулебино

Зябликово

Измайловская

Калужская

Кантемировская

Каховская

Каширская

Киевская

Китай-город

Кожуховская

Коломенская

Комсомольская

Коньково

Красногвардейская

Краснопресненская

Красносельская

Красные ворота

Крестьянская застава

Кропоткинская

Крылатское

Кузнецкий мост

Кузьминки

Кунцевская

Курская

Кутузовская

Ленинский проспект

Лубянка

Люблино

Марксистская

Марьина роща

Марьино

Маяковская

Медведково

Международная

Менделеевская

Митино

Молодежная

Мякинино

Нагатинская

Нагорная

Нахимовский проспект

Новогиреево

Новокузнецкая

Новослободская

Новоясеневская

Новые Черемушки

Октябрьская

Октябрьское поле

Орехово

Отрадное

Охотныйряд

Павелецкая

Парк культуры

Парк Победы

Партизанская

Первомайская

Перово

Петровско-Разумовская

Печатники

Пионерская

Планерная

Площадь Ильича

Площадь Революции

Полежаевская

Полянка

Пражская

Преображенская площадь

Пролетарская

Проспект Вернадского

Проспект Мира

Профсоюзная

Пушкинская

Речной вокзал

Рижская

Римская

Рязанский проспект

Савеловская

Свиблово

Севастопольская

Семеновская

Серпуховская

Славянский бульвар

Смоленская (Арбатско-Покровская линия)

Смоленская (Филевская линия)

Сокол

Сокольники

Спортивная

Сретенский бульвар

Строгино

Студенческая

Сухаревская

Сходненская

Таганская

Тверская

Театральная

Текстильщики

Теплый Стан

Тимирязевская

Третьяковская

Трубная

Тульская

Тургеневская

Тушинская

Улица 1905года

Улица Академика Янгеля

Улица Горчакова

Улица Подбельского

Улица Скобелевская

Улица Старокачаловская

Университет

Филевский парк

Фили

Фрунзенская

Царицыно

Цветной бульвар

Черкизовская

Чертановская





  1. В каталоге res/layout создайте файл list_item.xml со следующим содержимым:

"1.0" encoding="utf-8"?>

"http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"

android:padding="10dp" android:textSize="16sp" >


  1. Модифицируйте метод onCreate вашей Активности:

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
Resources r = getResources();

String[] stationsArray = r.getStringArray(R.array.stations);
ArrayAdapterring> aa = new ArrayAdaptertring>(this, R.layout.list_item, stationsArray);
setListAdapter(aa); ListView lv = getListView();

}



  1. Измените базовый класс Активности с Activity на ListActivity.

  2. Запустите приложение.

  3. Для реакции на клики по элементам списка требуется добавить обработчик такого события, с помощью метода setOnItemClickListener. В качестве обработчика будет использоваться анонимный объект класса OnItemClickListener. Добавьте следующий код в нужноеместо:

lv.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView> parent, View v,

int position, long id) {
CharSequence text = ((TextView) v).getText();

int duration = Toast.LENGTH_LONG;

Context context = getApplicationContext(); Toast.makeText(context, text, duration).show();

}

});


  1. Запустите приложение и «покликайте» по станциям метро.


1   ...   7   8   9   10   11   12   13   14   ...   20


написать администратору сайта