načítání...
menu
nákupní košík
Košík

je prázdný
a
b

Kniha: Android 4 -- Průvodce programováním mobilních aplikací - Grant Allen

Android 4 -- Průvodce programováním mobilních aplikací
-15%
sleva

Kniha: Android 4
Autor: Grant Allen
Podtitul: Průvodce programováním mobilních aplikací

Průvodce mobilním operačním systémem Android pro tvorbu aplikací pro mobilní telefony i tablety. ... (celý popis)
Titul doručujeme za 4 pracovní dny
Vaše cena s DPH:  790 Kč 672
+
-
rozbalKdy zboží dostanu
22,4
bo za nákup
rozbalVýhodné poštovné: 29Kč
rozbalOsobní odběr zdarma

hodnoceni - 0%hodnoceni - 0%hodnoceni - 0%hodnoceni - 0%hodnoceni - 0%   celkové hodnocení
0 hodnocení + 0 recenzí

Specifikace
Nakladatelství: » Computer press
Médium / forma: Tištěná kniha
Rok vydání: 2013
Počet stran: 656
Rozměr: 167 x 225 mm
Úprava: ilustrace, mapy
Vydání: 1. vyd.
Název originálu: Beginning Android 4
Spolupracovali: překlad Jakub Mužík
Vazba: brožovaná lepená
Novinka týdne: 2013-23
Datum vydání: 29. 5. 2013
Nakladatelské údaje: Brno, Computer Press, 2013
ISBN: 9788025137826
EAN: 9788025137826
Ukázka: » zobrazit ukázku
Popis / resumé

Průvodce mobilním operačním systémem Android pro tvorbu aplikací pro mobilní telefony i tablety.

Popis nakladatele

Baví vás programování a máte telefon nebo tablet s Androidem? Nejste spokojeni s nabídkou aplikací a stále hledáte takovou, která by odpovídala vašim představám? Přestaňte hledat a vytvořte si ji sami, není to ani zdaleka tak těžké, jak by se na první pohled mohlo zdát. Ve 49 krátkých kapitolách se postupně seznámíte se základními stavebními prvky, jež vám systém nabízí a které můžete využít při tvorbě aplikace. Použití jednotlivých komponent si vyzkoušíte na jednoduchých, snadno pochopitelných příkladech, abyste poté mohli maximálně využít jejich potenciál při tvorbě vlastního projektu. Probírané postupy jsou univerzální, lze je využít při vývoji aplikace pro telefony i pro tablety. Publikace vás mimo jiné naučí, jak: * Pracovat s dostupnými komponentami * Začlenit tlačítka a nabídky do layoutu aplikace * Využívat různá úložiště souborů * Komunikovat s aplikací přes Internet * Obsluhovat různá rozlišení obrazovky * Zpracovat obsluhu telefonních hovorů * Využívat alternativní vývojová prostředí O autorovi: Grant Allen se pohybuje v oblasti IT již více než dvacet let. Aktuálně pracuje pro Google, specializuje se na návrh nadnárodních systémů, často přednáší na konferencích a je také autorem řady úspěšných publikací o databázích. (průvodce programováním mobilních aplikací)

Další popis

Vytvořte si pro svůj telefon vlastní aplikaci, která bude přesně odpovídat vašim požadavkům. Ve 49 krátkých, přehledných kapitolách se postupně seznámíte s vývojem pro platformu Android. Autor vás naučí používat základní prvky uživatelského rozhraní, vytvářet aplikační logiku a také jak vše propojit ve funkční celek. Probírané postupy jsou univerzální, lze je využít při tvorbě aplikací pro mobilní telefony i tablety.


Vytvořte si pro svůj telefon vlastní aplikaci, která bude přesně odpovídat vašim požadavkům. V 49 krátkých, přehledných kapitolách se postupně seznámíte s vývojem pro platformu Android. Autor vás naučí používat základní prvky uživatelského rozhraní, vytvářet aplikační logiku a také to, jak vše propojit ve funkční celek. Probírané postupy jsou univerzální, lze je využít při tvorbě aplikací pro mobilní telefony i tablety.


Předmětná hesla
Kniha je zařazena v kategoriích
Ke knize "Android 4 -- Průvodce programováním mobilních aplikací" doporučujeme také:
jQuery Mobile jQuery Mobile
 
Recenze a komentáře k titulu
Zatím žádné recenze.


Ukázka / obsah
Přepis ukázky

147

KAPITOLA 12

Widgety nabídek V  kapitole 11 jste se naučili, jak lze u  textových polí používat omezení specifi kující formát dat, která do nich lze vložit – například pouze čísla nebo pouze telefonní čísla. Tento druh omezení pomáhá uživateli vložit do pole data ve správném formátu, a to zejména v mobilních zařízeních s maličkou klávesnicí. Výběr však lze samozřejmě omezit také na určitou množinu položek, například skupinu přepínačů. Klasické sady nástrojů na tvorbu uživatelského rozhraní za tímto účelem nabízejí seznamy, rozevírací seznamy, rozevírací nabídky a podobné ovládací prvky. Systém Android podporuje mnoho stejných typů widgetů a navíc ještě některé zvláštní typy, které se hodí zejména k použití v mobilním zařízení (například třídu Gallery k prohlížení uložených fotografi í). Kromě toho systém Android nabízí také fl exibilní architekturu k určení položek, z nichž lze prostřednictvím těchto widgetů vybírat. Konkrétně se jedná o architekturu datových adaptérů, které zajišťují společné rozhraní pro seznamy možností a umí seznamům dodat data z nejrůznějších zdrojů, od statických polí až po databáze. Výběrová zobrazení – widgety pro prezentaci seznamů možností – tedy mají své adaptéry, které jim dodávají obsah. Přizpůsobení se okolnostem Z  teoretického hlediska adaptéry zajišťují společné rozhraní pro více různých nesourodých rozhraní API. V  případě systému Android se pak konkrétněji jedná o  zajištění společného rozhraní pro datový model, který stojí za widgety nabídek, jako je například seznam. Tento způsob využití rozhraní jazyka Java je velmi častý (viz například adaptéry knihoven Swing jazyka Java pro třídu JTable) a Java není jediným prostředím, které tento druh abstrakce nabízí (architektura datových vazeb založená na formátu XML v jazyce Flex například pracuje s vloženým kódem XML nebo kódem XML staženým z Internetu).

V této kapitole:

 Přizpůsobení se okolnostem

 Seznamy nabídek

 Režimy výběru

 Rozevírací nabídky

 Mřížky

 O 35 % méně psaní

na klávesnici při práci

s textovými poli

 Galerie


148

ČÁST II Aktivity

Adaptéry systému Android však widgetům nedodávají pouze data, ale také konvertují jednotlivé položky na konkrétní zobrazení v nabídkách. Tato druhá funkce architektury adaptérů vám možná připadá poněkud zvláštní, ale ve skutečnosti se příliš neliší od způsobů, kterými nahrazují výchozí zobrazovací chování i jiné sady nástrojů na tvorbu uživatelského rozhraní. Pokud například chcete při práci s knihovnami Swing jazyka Java konvertovat seznam založený na třídě JList na seznam se zaškrtávacími políčky, skončíte nevyhnutelně u volání metody set CellRenderer(), abyste mohli dodat vaši vlastní instanci třídy ListCellRenderer, která pak konvertuje řetězce seznamu na složené widgety tvořené instancemi tříd JCheckBox a JLabel. Nejjednodušší je práce s adaptérem ArrayAdapter. Jednoduše obalíte jeho instancí pole jazyka Java nebo instanci typu java.util.List, a máte plně funkční adaptér: String[] items={„tohle“, „je“, „opravdu“, „hodně“, „uhozený“, „seznam“}; new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items); Jeden z konstruktorů adaptéru ArrayAdapter přijímá tři parametry:

 kontext (instanci třídy Context), který se má použít (to bude obvykle instance vaší

aktivity),

 ID prostředku zobrazení, který se má použít (například ID vestavěného systémového

prostředku jako v předchozím příkladu),

 samotné pole nebo seznam položek, které se mají zobrazit. Ve  výchozím nastavení zavolá adaptér ArrayAdapter metodu toString()objektů v  seznamu a  obalí každý z  řetězců zobrazením dodaným jako prostředek. Defi nice rozložení android.R.layout.simple_list_item_1 pak jednoduše konvertuje tyto řetězce na objekty typu TextView. Tyto widgety typu TextView se následně zobrazí v seznamu, v rozevírací nabídce nebo v jakémkoliv jiném widgetu, který tento adaptér ArrayAdapter používá. Pokud si chcete defi nici rozložení android.R.layout.simple_list_item_1 prohlédnout, vyhledejte ji ve své instalaci sady SDK. V kapitole 13 se naučíte, jak vytvořit podtřídu třídy Adapter a přepsat operaci vytvoření řádku tak, abyste měli větší kontrolu nad jeho výslednou podobou. Seznamy nabídek Klasický widget seznamu nabídek je v systému Android třídy ListView. Vložte instanci této třídy do své defi nice rozložení, zavolejte metodu setAdapter(), abyste jí dodali data a zobrazení, která budou jejími potomky, přidělte jí prostřednictvím metody setOnItemSelected Listener() naslouchací objekt, abyste byli upozorněni na  provedenou volbu, a  máte plně funkční seznam nabídek.


KAPITOLA 12 Widgety nabídek

149

Avšak tvoří-li vaši aktivitu jediný seznam nabídek, můžete také zvážit její vytvoření jako podtřídy třídy ListActivity místo podtřídy obvyklé základní třídy Activity. Pokud je vaše hlavní zobrazení pouhý seznam, nemusíte dokonce ani dodat defi nici jeho rozložení; třída ListActivity pro vás zkonstruuje seznam přes celou obrazovku. Chcete-li jeho podobu upravit, můžete to udělat, pokud svou instanci třídy ListView označíte identifi kátorem @android:id/list, aby třída ListActivity věděla, který widget je hlavním seznamem aktivity. Zde je jednoduchý příklad seznamu a jednoho popisku zobrazujícího aktuální volbu, který najdete ve složce vzorového projektu Selection/List: <?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/selection“ android:layout_width=“fill_parent“ android:layout_height=“wrap_content“/> <ListView android:id=“@android:id/list“ android:layout_width=“fill_parent“ android:layout_height=“fill_parent“ android:drawSelectorOnTop=“false“ /> </LinearLayout> Kód jazyka Java, který slouží ke konfi guraci seznamu a jeho propojení s popiskem, vypadá takto: public class ListViewDemo extends ListActivity { private TextView selection; private static final String[] items={„lorem“, „ipsum“, „dolor“, „sit“, „amet“, „consectetuer“, „adipiscing“, „elit“, „morbi“, „vel“, „ligula“, „vitae“, „arcu“, „aliquet“, „mollis“, „etiam“, „vel“, „erat“, „placerat“, „ante“, „porttitor“, „sodales“, „pellentesque“, „augue“, „purus“}; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle);

setContentView(R.layout.main);

setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items));


150

ČÁST II Aktivity

selection=(TextView)findViewById(R.id.selection);

}

public void onListItemClick(ListView parent, View v, int position,

long id) {

selection.setText(items[position]);

}

}

Odvodíte-li třídu své aktivity od třídy ListActivity, můžete nastavit adaptér seznamu po

mocí metody setListAdapter(), které v tomto případě předáte instanci třídy ArrayAdapter

obalující pole řetězců. Abyste měli možnost zjistit, zda se změnil výběr v seznamu, nahradíte

metodu onListItemClick() a provedete příslušné kroky na základě dodaného podřazeného

zobrazení a pozice v seznamu – v tomto případě se jedná o aktualizaci textu popisku textem

této pozice. Výsledná aplikace je na obrázku 12.1.

Obrázek 12.1 Vzorová aplikace ListViewDemo

Druhý parametr adaptéru ArrayAdapter specifi kuje vzhled řádků. Hodnota android.R.

layout.simple_list_item_1 tohoto parametru použitá v předchozím příkladu specifi ku

je standardní řádek seznamu nabídek systému Android: velký font, hodně výplně a bílý text.


KAPITOLA 12 Widgety nabídek

151

Režimy výběru

Widget ListView je ve výchozím nastavení nastaven tak, aby jednoduše vracel klepnutí na po

ložky seznamu. Pomocí widgetu ListView však lze také vytvořit seznam, který provedený vý

běr, nebo dokonce více výběrů za sebou uchovává, ale je třeba jej mírně upravit.

Zaprvé je třeba ve zdrojovém kódu jazyka Java zavolat metodu setChoiceMode() objektu List

View a defi novat pomocí ní režim výběru – předáním parametru CHOICE_MODE_SINGLE nebo

CHOICE_MODE_MULTIPLE. Widget ListView lze získat od objektu ListActivity pomocí me

tody getListView(). Režim výběru lze také deklarovat nastavením atributu android:choice

Mode v defi nici rozložení XML na příslušnou hodnotu.

Poté je nutné použít místo defi nice rozložení řádků seznamu android.R.layout.simple_

list_item_1 defi nici android.R.layout.simple_list_item_single_choice nebo

android.R.layout.simple_list_item_multiple_choice, která určuje seznam umožňující

provedení jedné nebo více voleb (v uvedeném pořadí).

Zde je například rozložení aktivity ze vzorového projektu Selection/Checklist:

<?xml version=“1.0“ encoding=“utf-8“?>

<ListView

xmlns:android=“http://schemas.android.com/apk/res/android“

android:id=“@android:id/list“

android:layout_width=“fill_parent“

android:layout_height=“fill_parent“

android:drawSelectorOnTop=“false“

android:choiceMode=“multipleChoice“

/>

Jedná se o widget ListView přes celou obrazovku s atributem android:choiceMode nastave

ným na hodnotu multipleChoice, který značí, že vyžadujeme podporu více voleb.

Aktivita používá pro seznam vzorových slov standardní adaptér ArrayAdapter, ale tentokrát

používá defi nici rozložení řádku android.R.layout.simple_list_item_multiple_choice:

package com.commonsware.android.checklist;

import android.os.Bundle;

import android.app.ListActivity;

import android.widget.ArrayAdapter;

import android.widget.ListView;

public class ChecklistDemo extends ListActivity {

private static final String[] items={„lorem“, „ipsum“, „dolor“,

„sit“, „amet“,

„consectetuer“, „adipiscing“, „elit“, „morbi“, „vel“,

„ligula“, „vitae“, „arcu“, „aliquet“, „mollis“,


152

ČÁST II Aktivity

„etiam“, „vel“, „erat“, „placerat“, „ante“, „porttitor“, „sodales“, „pellentesque“, „augue“, „purus“}; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle);

setContentView(R.layout.main);

setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, items)); } } Uživateli se zobrazí seznam slov se zaškrtávacími políčky u  levého okraje, který si můžete prohlédnout na obrázku 12.2. Obrázek 12.2. Režim výběru více položek Kdybychom chtěli, mohli bychom také pomocí metody getCheckedItemPositions() widgetu ListView zjistit, které položky uživatel v seznamu zaškrtnul, nebo pomocí metody setItem Checked() zaškrtnout (nebo odškrtnout) některé položky sami.


KAPITOLA 12 Widgety nabídek

153

Rozevírací nabídky

Widget Spinner je v systému Android ekvivalentem rozevírací nabídky, kterou najdete i v ji

ných sadách nástrojů na tvorbu uživatelského rozhraní (například třída ComboBox v knihovnách

Swing jazyka Java). Stisknete-li prostřední tlačítko na směrovém ovladači telefonu, nabídka se

rozbalí a uživatel z ní může vybrat nějakou položku. Rozevírací nabídka tak v zásadě nabízí

možnost výběru z výčtu možností, aniž byste zabrali celou obrazovku instancí třídy ListView,

avšak za cenu dalšího stisknutí tlačítka nebo klepnutí na obrazovku.

Stejně jako v  případě widgetu ListView i  widgetům Spinner dodáváte adaptér pro jejich

data a  podřazená zobrazení prostřednictvím metody setAdapter a  prostřednictvím meto

dy setOnItemSelectedListener() přiřazujete naslouchací objekt, který bude upozorněn

na provedenou změnu.

Chcete-li si ušít defi nici rozložení používanou při zobrazování rozbalené nabídky na  míru,

musíte nastavit adaptér, a ne widget Spinner. K dodání ID prostředku zobrazení, který se má

použít, použijte metodu setDropDownViewResource().

Zde je jednoduchý příklad defi nice rozložení s widgetem spinner, který najdete ve složce vzo

rového projektu Selection/Spinner:

<?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/selection“

android:layout_width=“fill_parent“

android:layout_height=“wrap_content“

/>

<Spinner android:id=“@+id/spinner“

android:layout_width=“fill_parent“

android:layout_height=“wrap_content“

android:drawSelectorOnTop=“true“

/>

</LinearLayout>

Jedná se o  stejné zobrazení, které jsme použili v  předchozí podkapitole, ale tentokrát mís

to widgetu ListView obsahuje widget Spinner. Atribut widgetu Spinner android:draw

SelectorOnTop určuje, zda rozbalovací tlačítko se šipkou překryje položku seznamu.


154

ČÁST II Aktivity

K naplnění nabídky položkami a k jejímu použití je třeba kód jazyka Java:

public class SpinnerDemo extends Activity

implements AdapterView.OnItemSelectedListener {

private TextView selection;

private static final String[] items={„lorem“, „ipsum“, „dolor“,

„sit“, „amet“,

„consectetuer“, „adipiscing“, „elit“, „morbi“, „vel“,

„ligula“, „vitae“, „arcu“, „aliquet“, „mollis“,

„etiam“, „vel“, „erat“, „placerat“, „ante“,

„porttitor“, „sodales“, „pellentesque“, „augue“, „purus“};

@Override

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setContentView(R.layout.main);

selection=(TextView)findViewById(R.id.selection);

Spinner spin=(Spinner)findViewById(R.id.spinner);

spin.setOnItemSelectedListener(this);

ArrayAdapter<String> aa=new ArrayAdapter(this,

android.R.layout.simple_spinner_item,

items);

aa.setDropDownViewResource(

android.R.layout.simple_spinner_dropdown_item);

spin.setAdapter(aa);

}

public void onItemSelected(AdapterView<?> parent,

View v, int position, long id) {

selection.setText(items[position]);

}

public void onNothingSelected(AdapterView<?> parent) {

selection.setText(„“);

}

}

Zde přiřazujeme jako naslouchací objekt výběru samotnou aktivitu (spin.setOnItemSelected-

Listener(this)). Tímto způsobem můžeme postupovat, protože aktivita implementuje

rozhraní OnItemSelectedListener. Kromě seznamu vzorových slov pak defi nujeme také

konkrétní prostředek, který se použije pro rozevírací nabídku (pomocí volání aa.setDrop

DownViewResource()). Všimněte si také použití defi nice rozložení android.R.layout.


KAPITOLA 12 Widgety nabídek

155

simple_spinner_item jako vestavěného widgetu View pro zobrazování položek v samotném

rozevíracím seznamu.

Nakonec implementujeme zpětně volané metody, které vyžaduje rozhraní OnItemSelected

Listener k úpravám popisku výběru na základě výběru provedeného uživatelem. Výsledek

si můžete prohlédnout na obrázcích 12.3 a 12.4.

Obrázek 12.3 Vzorová aplikace SpinnerDemo po spuštění


156

ČÁST II Aktivity

Obrázek 12.4 Stejná aplikace se zobrazenou rozevírací nabídkou Mřížky Jak již napovídá jeho název, widget GridView poskytuje dvojdimenzionální mřížku položek, ze kterých si může uživatel vybrat. Zároveň máte možnost určité kontroly nad počtem a rozměry jejích sloupců, počet řádků se určuje dynamicky na základě počtu položek, které dodaný adaptér specifi kuje jako zobrazitelné. Počet sloupců a jejich rozměry specifi kuje kombinace několika atributů:

 android:numColumns: Specifi kuje počet sloupců. Atribut také můžete nastavit na hod

notu auto_fi t, která značí, že se má počet sloupců vypočítat na základě volného místa

na obrazovce a hodnot následujících atributů.

 android:verticalSpacing a android:horizontalSpacing: Tyto atributy specifi kují

mezery mezi jednotlivými položkami v mřížce.

 android:columnWidth: Specifi kuje šířku sloupců v pixelech.

 android:stretchMode: Specifikuje pro mřížky s  hodnotou atributu android:

numColumns auto_fi t, jak se má naložit s volným místem, které není zabrané sloupci ne

bo mezerami. Tento atribut může mít hodnotu columnWidth, která specifi kuje, že mají


KAPITOLA 12 Widgety nabídek

157

volné místo zabrat sloupce, nebo spacingWidth, která specifi kuje, že mají volné místo

zabrat mezery mezi sloupci. Jinak funguje widget GridView v podstatě stejně jako jakýkoliv jiný widget nabídky: používá metodu setAdapter() k dodání dat a podřazených zobrazení, metodu setOnItemSelected Listener() k registraci naslouchacích objektů výběru atd. Zde je jednoduchý příklad defi nice rozložení ve formátu XML, který najdete ve složce vzorového projektu Selection/Grid, demonstrující konfi guraci widgetu typu GridView: <?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/selection“ android:layout_width=“fill_parent“ android:layout_height=“wrap_content“ /> <GridView android:id=“@+id/grid“ android:layout_width=“fill_parent“ android:layout_height=“fill_parent“ android:verticalSpacing=“40dip“ android:horizontalSpacing=“5dip“ android:numColumns=“auto_fit“ android:columnWidth=“100dip“ android:stretchMode=“columnWidth“ android:gravity=“center“ /> </LinearLayout> Tato mřížka zabírá celou obrazovku kromě místa potřebného pro popisek výběru. Počet sloupců mřížky určuje systém (android:numColumns = „auto_fi t“) na  základě rozteče sloupců (android:horizontalSpacing = „5dip“) a šířky sloupců (android:columnWidth = „100dip“) a sloupce „absorbují“ jakékoliv zbytky volného místa (android:stretchMode = „columnWidth“). Zdrojový kód jazyka Java konfi gurující widget GridView vypadá takto: package com.commonsware.android.grid; import android.app.Activity; import android.content.Context;


158

ČÁST II Aktivity

import android.os.Bundle;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.GridView;

import android.widget.TextView;

public class GridDemo extends Activity

implements AdapterView.OnItemSelectedListener {

private TextView selection;

private static final String[] items={„lorem“, „ipsum“, „dolor“,

„sit“, „amet“,

„consectetuer“, „adipiscing“, „elit“, „morbi“, „vel“,

„ligula“, „vitae“, „arcu“, „aliquet“, „mollis“,

„etiam“, „vel“, „erat“, „placerat“, „ante“,

„porttitor“, „sodales“, „pellentesque“, „augue“, „purus“};

@Override

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setContentView(R.layout.main);

selection=(TextView)findViewById(R.id.selection);

GridView g=(GridView) findViewById(R.id.grid);

g.setAdapter(new ArrayAdapter<String>(this,

R.layout.cell,

items));

g.setOnItemSelectedListener(this);

}

public void onItemSelected(AdapterView<?> parent, View v,

int position, long id) {

selection.setText(items[position]);

}

public void onNothingSelected(AdapterView<?> parent) {

selection.setText(„“);

}

}

Zobrazení buněk mřížky jsou defi nována samostatným souborem defi nice rozložení res/

layout/cell.xml, na který se v adaptéru ArrayAdapter odkazujeme jako na R.layout.cell:


KAPITOLA 12 Widgety nabídek

159

<?xml version=“1.0“ encoding=“utf-8“?>

<TextView

xmlns:android=“http://schemas.android.com/apk/res/android“

android:layout_width=“wrap_content“

android:layout_height=“wrap_content“

android:textSize=“14dip“

/>

Díky defi nici rozteče řádků v defi nici rozložení XML (android:verticalSpacing = „40dip“)

mřížka přesahuje přes hranice obrazovky – viz obrázky 12.5 a 12.6.

Obrázek 12.5 Vzorová aplikace GridDemo po spuštění


160

ČÁST II Aktivity

Obrázek 12.6 Stejná aplikace zobrazující poslední řádek mřížky

O 35 % méně psaní na klávesnici při práci

s textovými poli

Widget AutoCompleteTextView je jakýmsi hybridem mezi widgetem EditText (textové pole)

a Spinner (rozevírací nabídka). Díky nástroji na automatické dokončování zadávaného tex

tu se se zadávaným textem nakládá jako s fi ltrem předpon a text se porovnává se seznamem

možných kandidátů. Nalezení kandidáti (řetězce znaků), kteří začínají písmeny shodujícími

se se zadávaným řetězcem, se rozbalují v nabídce směrem dolů z textového pole, stejně jako

v případě rozevírací nabídky. Uživatel pak buď může dokončit zadávání vstupu na klávesni

ci (například řetězce, který není na seznamu), nebo vybrat odpovídající položku z rozbalené

nabídky a zadat ji tak jako hodnotu textového pole.

Třída AutoCompleteTextView je podtřídou třídy EditText, takže můžete nastavit všechny

standardní vizuální a ovládací vlastnosti widgetu, například jeho font a barvu. Kromě těchto

atributů má widget AutoCompleteTextView ještě atribut android:completionThreshold,

jehož hodnota určuje minimální počet znaků, které musí uživatel zadat, než se zahájí fi ltro

vání nabídky kandidátů.


KAPITOLA 12 Widgety nabídek

161

Widgetu AutoCompleteTextView můžete prostřednictvím metody setAdapter() přidě

lit adaptér obsahující seznam kandidátů. Avšak protože uživatel může zadat hodnotu, která

na seznamu kandidátů není, nepodporuje třída AutoCompleteTextView naslouchací objekt

provedeného výběru. Místo toho můžete stejně jako v  případě jakéhokoliv jiného widgetu

EditText zaregistrovat rozhraní TextWatcher, které vás upozorní na změnu obsahu textové

ho pole. Tato událost je pak buď výsledkem ručního zadání vstupu, nebo výběru z rozevírací

nabídky kandidátů.

Následující známá defi nice rozložení ve  formátu XML tentokrát obsahuje defi nici widgetu

AutoCompleteTextView (najdete jej ve složce vzorové aplikace Selection/AutoComplete):

<?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/selection“

android:layout_width=“fill_parent“

android:layout_height=“wrap_content“

/>

<AutoCompleteTextView android:id=“@+id/edit“

android:layout_width=“fill_parent“

android:layout_height=“wrap_content“

android:completionThreshold=“3“/>

</LinearLayout>

Příslušný zdrojový kód jazyka Java pak vypadá takto:

package com.commonsware.android.auto;

import android.app.Activity;

import android.os.Bundle;

import android.text.Editable;

import android.text.TextWatcher;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.AutoCompleteTextView;

import android.widget.TextView;

public class AutoCompleteDemo extends Activity

implements TextWatcher {

private TextView selection;

private AutoCompleteTextView edit;


162

ČÁST II Aktivity

private static final String[] items={„lorem“, „ipsum“, „dolor“,

„sit“, „amet“,

„consectetuer“, „adipiscing“, „elit“, „morbi“, „vel“,

„ligula“, „vitae“, „arcu“, „aliquet“, „mollis“,

„etiam“, „vel“, „erat“, „placerat“, „ante“,

„porttitor“, „sodales“, „pellentesque“, „augue“, „purus“};

@Override

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setContentView(R.layout.main);

selection=(TextView)findViewById(R.id.selection);

edit=(AutoCompleteTextView)findViewById(R.id.edit);

edit.addTextChangedListener(this);

edit.setAdapter(new ArrayAdapter<String>(this,

android.R.layout.simple_dropdown_item_1line,

items));

}

public void onTextChanged(CharSequence s, int start, int before,

int count) {

selection.setText(edit.getText());

}

public void beforeTextChanged(CharSequence s, int start,

int count, int after) {

// Potřeba kvůli rozhraní, ale nepoužívá se.

}

public void afterTextChanged(Editable s) {

// Potřeba kvůli rozhraní, ale nepoužívá se.

}

}

Aktivita tentokrát implementuje rozhraní TextWatcher, takže používáme zpětně volané me

tody onTextChanged(), beforeTextChanged() a afterTextChanged(). V  tomto případě

však používáme pouze metodu onTextChanged() a aktualizujeme popisek výběru tak, aby

odpovídal aktuálnímu obsahu widgetu AutoCompleteTextView. Výsledek si můžete prohléd

nout na obrázcích 12.7, 12.8 a 12.9.




       
Knihkupectví Knihy.ABZ.cz - online prodej | ABZ Knihy, a.s.
ABZ knihy, a.s.
 
 
 

Knihy.ABZ.cz - knihkupectví online -  © 2004-2019 - ABZ ABZ knihy, a.s. TOPlist