Image
16.6.2016 0 Comments

Vývoj pre Android – Moja prvá androidová aplikácia / 3. časť

Späť na úvod >> Späť na seriál

V tejto časti nadväzujeme na predchádzajúci príklad, pričom tvoríme Android aplikáciu svýpočtom koeficientu BMI. Vytvorili sme kostru programu, teraz pokračujeme používateľským rozhraním.

Návrh používateľského rozhrania

Vhlavnej aktivite bude niekoľko views, teda ovládacích prvkov. Na zobrazenie popisov polí na zadanie textu sú vpríklade použité prvky typu TextView. Okrem typu hodnoty naznačíme používateľovi aj to, vakých jednotkách aplikácia príslušnú hodnotu očakáva. Používateľ bude interagovať s dvoma prvkami typu EditText na zadanie výšky ahmotnosti azadanie potvrdí tlačidlom, teda prvkom typu Button.

Na rozmiestnenie prvkov vsúbore activity_main využijeme vizuálny kontajner LinearLayout svertikálnym rozmiestnením prvkov. Keďže bude používateľ zadávať len čísla, nakonfigurujeme prvok EditText tak, aby bolo prostredníctvom neho možné zadať len textový reťazec pozostávajúci zčíslic.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="${packageName}.${activityClass}" >

<TextView
android:text="@string/et_labelVyska"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<EditText
android:id="@+id/etVyska"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number" />

<TextView
android:text="@string/et_labelVaha"android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<EditText
android:id="@+id/etVaha"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:inputType="number" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="buttonClicked"
android:text="@string/button_title" />

</LinearLayout>

 

Textové reťazce nevkladáme priamo do prvkov typu TextView, ale do resourceov, teda do súboru /res/values/strings.xml.

<resources>
<string name="app_name">VypocetBMI</string>
<string name="button_title">Výpočet BMI</string>
<string name="et_labelVyska">Výška [cm]:</string>
<string name="et_labelVaha">Váha [kg]:</string>
<string name="nespravne_cislo">Musíš zadať číselnú hodnotu</string>
<string name="zobraz_bmi">Tvoje BMI je %1$.2f.</string>
</resources>

Obsluha udalosti zatlačenia tlačidla sa odohráva vmetóde buttonClicked. Vkóde metódy treba najskôr zistiť askontrolovať zadané údaje. Vnašom prípade je táto kontrola na prvý pohľad duplicitná, pretože používateľ môže zadávať len číselné hodnoty. No používateľ je nevyspytateľný a môže napríklad zadať záporné číslo alebo inú problematickú hodnotu (nulovú výšku), ktorá následne spôsobí problém. Preto aplikácia za platný údaj považuje výšku nad 50 cm.

public void buttonClicked(View button)
{
int vyska = dajCislo(R.id.etVyska);
int vaha = dajCislo(R.id.etVaha);
if(vyska < 50)oznamNespravneCislo(R.id.etVyska);
else if(vaha < 0)oznamNespravneCislo(R.id.etVaha);
else vypocetBMI(vyska, vaha);
}

Ak je zadávaný údaj neplatný, vynuluje sa aaplikácia naň prenesie fókus, čiže používateľ môže začať zadávať údaj nanovo.

protected void oznamNespravneCislo(int nID)
{
Toast.makeText(this, R.string.nespravne_cislo,
Toast.LENGTH_SHORT).show();
EditText etVstup = ((EditText)findViewById(nID));
etVstup.setText("");
etVstup.requestFocus();
}

Používateľ de facto zadáva textový reťazec, ktorý treba prekonvertovať na číslo. To je úloha metódy dajCislo. Na zistenie inštancie prvkov EditView je použitá metóda findViewById(int id). Parameter je identifikátor požadovaného prvku. Text následne prekonvertujeme na celé číslo.

protected int dajCislo(int nID)
{
EditText etVstup = ((EditText)findViewById(nID));
String strVstup = etVstup.getText().toString();
int nCislo = -1;
try
{
nCislo = Integer.parseInt(strVstup);
}
catch(NumberFormatException e){}
return nCislo;
}

Na komunikáciu medzi entitami aplikácií sa využíva Intent. Intent (v preklade zámer) je trieda, ktorá obsahuje runtime väzby medzi jednotlivými zložkami, napríklad aktivitami, aargumenty na odovzdanie parametrov. Intent sa odovzdá operačnému systému aten sa snaží zariadiť, aby bol zámer splnený. Ak je kdispozícii viac aktivít schopných splniť príslušný zámer, systém umožní voľbu aktivity používateľovi. Metóda putExtra preberá dva argumenty – textový reťazec s unikátnym identifikátorom objektu na odovzdanie parametra asamotný objekt, ktorý môže tvoriť elementárna hodnota alebo vhodný serializovateľný objekt. Vnašom prípade budeme odovzdávať hodnotu BMI prostredníctvom premennej typu float, pretože BMI je desatinné číslo.

protected void vypocetBMI(int vyska, int vaha)
{
float bmi;
float vyskam = (float)vyska/100;
bmi = vaha/(vyskam * vyskam);
Intent intent = new Intent(this, VypisBmiActivity.class);
intent.putExtra(VypisBmiActivity.BMI, bmi);
startActivity(intent);
}

Vytvorenie novej aktivity

Potom treba vytvoriť novú aktivitu na výpis vypočítaného BMI. Na vytvorenie aktivity, ktorá obsahuje aj definičný súbor XML používateľského rozhrania, môžete svýhodou použiť sprievodcu vytvorením aktivity. Spustíte ho cez tlačidlo New, ktoré nájdete na nástrojovej lište vývojového prostredia Eclipse úplne vľavo. Následne vzložke Android vyberte položku Android Activity.

Sprievodca na vytvorenie novej aktivity

Zdrojový kód triedy novej aktivity VypocetBmiActivity.java nájdete vzložke src vo vnorenej zložke com.example.nazovprojketu.

Súbor na návrh používateľského rozhrania activity_vypis_bmi.xml vytvorený sprievodcom vtejto aplikácii nevyužijeme. Metóda Activity.startActivity odovzdá systému príslušný Intent a oznámi mu, že má spustiť nejakú Activity. Tým sa dejstvo vhlavnej aktivite končí ana popredie vystúpi aktivita VypisBmiActivity.

Začnime teda tvoriť kód triedy novej aktivity. Vhlavnej aktivite sme odkazovali na textový reťazec s unikátnym identifikátorom objektu na odovzdanie parametra BMI. Preto musíme tento konštantný reťazec vytvoriť:
public static final String BMI = "bmi";

V metóde onCreate preberie aktivita Intent vytvorený hlavnou aktivitou. Pomocou metódy getFloatExtra získame hodnotu BMI. Druhý parameter obsahuje implicitnú hodnotu pre prípad, že by sa vlastnosť s daným kľúčom vintente nenachádzala.
Intent i = getIntent();
float bmi = i.getFloatExtra(BMI, -1);

V metóde zobrazBMI zobrazí aktivita hodnotu BMI ako súčasť textového reťazca. Všimnite si vsúbore /res/values/strings.xml reťazec obsahujúci formátovaciu sekvenciu %1$.2f, ktorá predpisuje, že prvý parameter sa zobrazí ako desatinné číslo (f - float) spresnosťou na dve desatinné miesta (.2).
<string name="zobraz_bmi">Tvoje BMI je %1$.2f.</string>

Kompletný zdrojový kód triedy novej aktivity je

public class VypisBmiActivity extends Activity
{

public static final String BMI = "bmi";

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
setContentView(tv);
Intent i = getIntent();
float bmi = i.getFloatExtra(BMI, -1);
zobrazBMI(bmi, tv);
}

protected void zobrazBMI(float bmi, TextView tv)
{
Resources res = getResources();
String text = res.getString(R.string.zobraz_bmi, bmi);
tv.setText(text);
}

 

}

Ak ste aktivitu vytvárali priamo ako triedu, musíte ju pridať do zoznamu aktivít vAndroid Manifeste vsúbore AndroidManifest.xml. Ak ste využili sprievodcu, pridanie aktivity do Android Manifestu zariadil sprievodca.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.bmivypocet"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.bmivypocet.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.bmivypocet.VypisBmiActivity"
android:label="@string/title_activity_vypis_bmi" >
</activity>
</application>

</manifest>

 

Teraz môžete aplikáciu vyskúšať.

bmi4.png

Test aplikácie. Vľavo je hlavná aktivita zobrazená po spustení aplikácie, určená na zadanie parametrov na výpočet BMI. Vpravo je aktivita, ktorá vypíše vypočítané BMI.

 

Zobrazit Galériu

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

Ako na to

Ako zbaviť fotky hmly

08.12.2016 11:59

Hmla alebo dym sú často veľmi kreatívne nástroje. No všetkého veľa škodí. Fotka potom stráca kontrast a v podstate na nej nič nevidieť. Hmlu môžete neraz následnými úpravami odstrániť alebo zredukovať ...

Ako na to

Užitočné SW nástroje

08.12.2016 11:53

AllDup v4.0.3 Určenie: program na vyhľadávanie a odstraňovanie duplicitných súborov Vlastnosti: duplicitné súbory sa vyhľadávajú len na zvolených diskových jednotkách alebo len v rámci vybraných ...

Ako na to

Fotografovanie s bleskom

08.12.2016 11:47

Ak máte moderný fotoaparát so vstavaným alebo externým bleskom, zdá sa vám téma článku triviálna. Jednoducho nastavíte vhodný režim, vyberiete najlepšiu kompozíciu záberu, exponujete a o zvyšok sa už ...

Žiadne komentáre

Vyhľadávanie

Kyocera - prve-zariadenia-formatu-a4-s-vykonom-a3

Najnovšie videá