abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
včera 09:18 | Zajímavý článek

Zack Bloom ve dvojici článků [1] [2] popisuje historický vývoj URL a jeho jednotlivých součástí, resp. adresování na webu vůbec. Namátkou ukazuje, odkud se vzaly dílčí volby znaků nebo jak to (ne)dopadlo se sémantickým webem a URN.

Fluttershy, yay! | Komentářů: 1
22.7. 18:00 | Komunita

Organizace Software Freedom Conservancy ve spolupráci s Nadací pro svobodný software (FSF) publikovala v loňském roce principy, na kterých stojí úspěšné vymáhání dodržování GPL licencí. Nejdůležitější je, aby z vymáhání profitovala celá komunita. Cílem komunity je dodržování licencí. Jejím cílem není vysoudit peníze. Soudní spor je navíc poslední možností. Tento týden se Software Freedom Conservancy v příspěvku na blogu k principům

… více »
Ladislav Hagara | Komentářů: 5
22.7. 14:51 | Bezpečnostní upozornění

V NetBSD byla nalezena a opravena vážná bezpečnostní chyba NetBSD-SA2016-006 (CVE-2016-6253). Jedná se o race condition (souběh) v mail.local(8). Lokální uživatel se může stát rootem. V OpenBSD byla chyba opravena již před 20 lety. Více na blogu akat1.pl. Jako hudební kulisu ke čtení autor doporučuje něco z 90. let, např. Captain Jack :-).

Ladislav Hagara | Komentářů: 0
22.7. 13:31 | Zajímavý článek

Nadace Raspberry Pi na svém blogu oznámila vydání knihy Hacking and Making with Minecraft věnované programování ve hře Minecraft pro Raspberry Pi pomocí v knize popsaného API. Ukázky programů jsou jak v Pythonu, tak v Node-RED a JavaScriptu. Osmadevadesátistránkové pdf je k dispozici zdarma pod licencí Creative Commons (BY-SA-NC 3.0).

Ladislav Hagara | Komentářů: 0
22.7. 08:05 | Komunita

Matthew Green a Andrew "bunnie" Huang s podporou Electronic Frontier Foundation (EFF) podali žalobu (pdf) na USA kvůli paragrafu 1201 amerického zákona DMCA (Digital Millennium Copyright Act) kriminalizujícího obcházení DRM (Digital Rights Management). Dle žaloby je tento paragraf v rozporu s 1. dodatkem Ústavy Spojených států amerických a měl by být proto zrušen [reddit].

Ladislav Hagara | Komentářů: 6
22.7. 00:05 | Bezpečnostní upozornění

Byly vydány verze 5.5.38, 5.6.24, 7.0.9 a 7.1.0 beta 1 skriptovacího jazyka PHP. Řešeno je několik bezpečnostních problémů, například bezpečnostní problém httpoxy s proměnnou prostředí HTTP_PROXY. Verze 5.5.38 je poslední verzí větve 5.5, viz upstreamem podporované verze. Vývojáři pracují na nové větvi 7.1. Dle plánu by finální verze PHP 7.1.0 měla vyjít v listopadu 2016.

Ladislav Hagara | Komentářů: 1
21.7. 16:30 | Nová verze

Google Chrome 52 byl prohlášen za stabilní. Nejnovější stabilní verze 52.0.2743.82 tohoto webového prohlížeče přináší řadu oprav a vylepšení (YouTube). Opraveno bylo také 48 bezpečnostních chyb. Pinkie Pie získal za nalezení nejvážnější z nich 15 000 dolarů.

Ladislav Hagara | Komentářů: 4
21.7. 06:00 | Komunita

Evropská komise provede v rámci pilotního projektu EU-FOSSA (EU-Free and Open Source Software Auditing) řízeného Generálním ředitelstvím pro informatiku (DIGIT) bezpečnostní audit dvou open source softwarových produktů: webového serveru Apache a správce hesel Keepass. Apache a KeePass byly vybrány na základě výsledku průzkumu, do kterého bylo přijato 3 282 odpovědí. Projekt EU-FOSSA byl naplánován již v prosinci 2014 a vyčleněno na

… více »
Ladislav Hagara | Komentářů: 14
21.7. 06:00 | Zajímavý článek

Benjamin Smedberg se v příspěvku na blogu Mozilly věnuje postupnému omezování používání zásuvného modulu Flash ve Firefoxu. Od srpna bude blokován obsah ve Flashi, který není pro uživatele nezbytně nutný. Blokovat se bude například obsah, který je pro uživatele neviditelný. Aktuální seznam je k dispozici na GitHubu. V plánu je rozšíření seznamu o Flashe měřící viditelnost konkrétního obsahu, obvykle internetové reklamy. Bude to ale až

… více »
Ladislav Hagara | Komentářů: 3
20.7. 15:00 | Zajímavý projekt

Společnost Onion spustila na Kickstarteru kampaň na podporu svého počítače a hardwarové vývojové platformy pro internet věcí Omega2. Cílova částka 15 tisíc dolarů byla již dvojnásobně překonána. Dle plánu by měl být počítač Omega2 k dispozici již v listopadu. Cena samotného počítače je 5 dolarů. Za 9 dolarů lze získat Omega2 Plus s dvojnásobnou pamětí a slotem na MicroSD karty. Rozšířující deska potřebná pro napájení Omega2 je za 15 dolarů.

Ladislav Hagara | Komentářů: 41
Který shell primárně používáte v (emulátoru) terminálu?
 (75%)
 (0%)
 (16%)
 (3%)
 (1%)
 (4%)
 (0%)
 (0%)
Celkem 69 hlasů
 Komentářů: 3, poslední včera 09:57
Rozcestník
Reklama

Vyvíjíme pro Android – tvoříme aktivity

6. 4. 2011 | Tomáš Kypta | Programování | 23046×

V minulém díle jsme si pověděli něco o OS Android, vývojových nástrojích a o obecných principech, na jejichž základě je platforma postavena. V tomto díle si ukážeme konkrétní kusy kódu na jednoduché aplikaci.

Obsah

Založení nového projektu

link

Po nainstalování pluginu ADT do Eclipse se v menu objeví volba vytvoření nového projektu pro Android. Vybráním této možnosti se zobrazí dialog, kde lze snadno specifikovat základní nastavení nového projektu.

Vyvíjíme pro Android

V zobrazeném dialogu je nezbytné vyplnit 3 položky: název projektu, build target a package name. Build target specifikuje verzi OS, pro kterou se bude aplikace překládat. Platí zde pravidlo použít minimální možnou verzi, která obsahuje API, jež v aplikaci potřebujeme. Volitelně je možné nastavit minimální verzi SDK, na které aplikace poběží. Tato hodnota, stejně jako jiné konfigurační věci, se zapisuje do manifestu.

Projektová struktura

link

Nově vytvořený projekt obsahuje několik základních adresářů a souborů. Jejich význam je následující:

  • adresář src – obsahuje zdrojové soubory
  • adresář gen – adresář s vygenerovanou třídou R.java obsahující identifikátory prostředků (resources) - tato třída by se neměla ručně měnit
  • přilinkovaná jar knihovna build targetu - v našem případě Android 2.1-update1
  • adresář assets - slouží k umístění různých datových souborů, které bude aplikace využívat
  • adresář res - obsahuje prostředky aplikace
  • AndroidManifest.xml - popisuje aplikaci a její komponenty
  • default.properties - slouží pro úpravu properties používaných programem ant při sestavování aplikace
  • proguard.cfg - tento soubor se objevil nově s Androidem 2.3, lze jím definovat, jakým způsobem proběhne optimalizace a zamíchání výsledného kódu

Vyvíjíme pro Android

Aplikační prostředky

link

Prostředky (resources) Android aplikací se skládají z obrázků, lokalizačních řetězců, různých XML souborů a mnoha jiných souborů. Jsou oddělené od samotného kódu - patří do adresáře res. Podle svého typu se dále umísťují do různých podadresářů adresáře res.

V ukázkovém vygenerovaném projektu se nacházejí tři pravděpodobně nejdůležitější typy prostředků - obrázky, layouty (rozvržení) a lokalizační řetězce. Layouty jsou obsaženy v adresáři layout a lokalizační řetězce v souboru strings.xml v adresáři values. Obrázky se nacházejí ve třech adresářích: drawable-hdpi, drawable-ldpi, drawable-mdpi. Koncovky hdpi, mdpi a ldpi specifikují, pro jaké rozlišení displeje se daná složka obrázků použije. Jejich význam je:

  • hdpi - vysoké rozlišení
  • mdpi - střední rozlišení
  • ldpi - nízké rozlišení

V názvech podadresářů adresáře res lze dále použít množství dalších koncovek, které se vztahují k jiným parametrům konfigurace telefonu. Z těch nejdůležitějších to jsou:

  • land, port - rozlišují, zda je displej v landscape/portrait orientaci
  • cs, en, fr, ... - rozlišují nastavený jazyk v telefonu
  • small, normal, large - rozlišují rozměry displeje

Koncovky různých typů lze navzájem kombinovat, toho využijete například pokud máte obrázky obsahující text a potřebujete je ve více jazykových verzích. Výběr správných prostředků obstarává operační systém za běhu. Prostředky jsou vybrány podle hardwarové specifikace telefonu a podle jeho aktuální konfigurace. Zde je třeba zdůraznit, že výchozím chováním aktivit při změně konfigurace (tedy třeba i při rotaci telefonu) je resetovaní aktivity - původní instance aktivity je ukončena a nová je vytvořena. Na toto je třeba si dát pozor a chování aktivit si případně přizpůsobit.

S prostředky aplikace souvisí i vygenerovaná třída R.java, kde jsou seskupeny identifikátory resourců. S její pomocí lze k resourcům přistupovat z kódu nebo se na ně odkazovat v layoutech. Ukázky ihned uvidíme v následujícím příkladu.

Hello world

link

Nyní bychom si měli konečně ukázat nějaký kód. Nejprve začneme s tím, co nám vygeneroval Eclipse plugin při založení nového projektu. Vygenerovaná aktivita obsahuje tento kus kódu:

public class Hello extends Activity {
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
   }
}

Třída Hello tedy obsahuje jedinou funkci onCreate(), která je jednou z nejdůležitějších funkcí aktivity, patří k životnímu cyklu aktivity, který zmíním dále. Ve funkci onCreate() aktivita pouze nastavuje layout pro svůj vzhed příkazem setContentView(R.layout.main). Zde je také dobře vidět, jakým způsobem se používá třída R. Daný layout je určený identifikátorem R.layout.main, který odkazuje na soubor res/layout/main.xml, jenž obsahuje:

<?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:layout_width="fill_parent" 
   android:layout_height="wrap_content" 
   android:text="@string/hello"
   />
</LinearLayout>

V souboru je definovaný LinearLayout obsahující jeden TextView - základní view sloužící pro zobrazení textu. LinearLayout rovná views postupně za sebou, a to v tom pořadí, v jakém jsou zapsány v xml dokumentu. Parametry LinearLayoutu říkají, že orientace je vertikální - jinými slovy každý další view se rovná pod ten předchozí. V případě horizontální orientace by se views rovnaly zleva doprava. Parametry layout_width a layout_height určují šířku a výšku daného view. Význam hodnot je:

  • fill_parent - roztáhne view na maximální hodnotu, jakou mu dovolí jeho parent view
  • wrap_content - view zabere minimální hodnotu, jakou potřebuje k zobrazení svého obsahu

Hodnota fill_parent je od API Levelu 8 přejmenovaná na match_parent.

Zvláštní hodnotou parametru android:text začínající znakem ‘@’ je odkaz na řetězec hello, který je umístěn v souboru res/values/strings.xml. Znak zavináče se používá v parametrech views k odkazování se na jiné prostředky. Obsah souboru strings.xml je:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="hello">Hello World, Hello!</string>
   <string name="app_name">Hello World</string>
</resources>

Vyvíjíme pro Android

Na obrázku je vidět, jak vypadá běžící aktivita. Pod systémovým notifikačním panelem se nachází titulek aktivity a pod ním už layout obsahující jediný textový řetězec „Hello World, Hello!“.

Nyní bychom se ještě měli blíže podívat, jaký bude obsah manifestu pro tuto jednoduchou aplikaci:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="cz.abclinuxu.android.helloworld"
     android:versionCode="1"
     android:versionName="1.0">
   <application android:icon="@drawable/icon" android:label="@string/app_name">
       <activity android:name=".Hello" android:label="@string/app_name">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
   <uses-sdk android:minSdkVersion="7" />
</manifest>

V manifestu je definovaná jediná aktivita. Tag intent-filter říká systému, na jaký intent je aktivita schopna reagovat. Kombinace podtagů action a category říká, že aktivita je vstupním bodem do aplikace. Také to znamená, že bude viditelná v seznamu aplikací v systému. A vrátím-li se k pojmu task z minulého dílu, znamená to, že aplikace může začít nový task.

Životní cyklus aktivit

link

Aktivita se v průběhu svého života může nacházet ve třech základích stavech - může být na popředí a mít uživatelský vstup, může být pouze viditelná (třeba jen částečně) nebo může být pozastavená na pozadí. Při přechodu aktivity mezi stavy jsou volány systémová zpětná volání (callbacky). Tyto callbacky vymezují jednotlivé stavy aktivity a definují její životní cyklus. Tento cyklus je zobrazen na následujícím obrázku. Systémové callbacky životního cycklu aktivity jsou:

Vyvíjíme pro Android

Životní cycklus aktivity je vymezen voláními několika základních funkcí:

  • onCreate() - Volána v momentě vytvoření aktivity. Zde se standardně provádí inicializace aktivity a nastavuje obsah UI.
  • onStart() - Zavolána, když se aktivita stane viditelnou pro uživatele. Nemusí být plně viditelná - její část může být zakryta nebo může být vidět pod poloprůhledným pozadím jiné aktivity.
  • onResume() - Volána, když aktivita začne dostávat uživatelský vstup. V tento moment je tedy na vrcholu zásobníku a není nijak překryta jinou aktivitou.
  • onPause() - Volána těsně před ztrátou uživatelského vstupu.
  • onStop() - Zavolána, když aktivita přestává být viditelná pro uživatele.
  • onDestroy() - Volána před zrušením instance aktivity.
  • onRestart() - Tato funkce je volána těsně předtím než aktivita, která byla zastavena (byla na ní zavolána funkce onStop()), je znovu nastartována - ve funkci onStart().

Celý život aktivity tedy probíhá mezi voláními funkcí onCreate() a onDestroy(). Aktivita je viditelná mezi voláními funkcí onStart() a onStop(). A uživatelský vstup aktivita dostává mezi voláními funkcí onResume() a onPause().

Životní cyklus aktivity nemusí být vždy kompletní. Pokud aktivita prošla funkcí onPause(), systém ji může při nedostatku prostředků ukončit. Funkce onStop() a onDestroy() tudíž nemusí být vždy zavolány. Ve funkci onPause() se často provádí uložení aktuálního stavu aktivity. Ale je třeba se zde vyhnout provádění zdlouhavých operací, neboť je to blokující funkce - pokud je spouštěna nová aktivita, její vytvoření proběhne až po návratu z této funkce.

Přidáváme další aktivitu

link

Nyní rozšíříme aplikaci tak, že do aktivity přidáme tlačítko, po jehož stisknutí se spustí nová aktivita. V ní půjde zadat text a kliknutím na tlačítko ho vrátit první aktivitě. Vrácený text se zobrazí v TextView místo řetězce „Hello world, Hello!“. Pro docílení žádané funkcionality přidáme novou aktivitu ReturnText, která bude obsahovat dva prvky - EditText a Button. EditText je view pro jednoduchý textový vstup. Layout pro tuto aktivitu bude vypadat takto:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:orientation="vertical">
	<EditText
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:id="@+id/text_field" />
	<Button
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:text="Vrať text"
		android:id="@+id/btn_return" />
</LinearLayout>

Znak “@” v hodnotách atributů jsem už zmínil, má význam odkazu na resource. U atributů android:id se navíc vyskytuje znak “+”, jenž značí, že jde o nové id resourcu. Toto nové id je automaticky přidáno do R.java. Pokud má view přiřazené id, lze k němu z kódu snadno přistupovat (viz kód aktivity ReturnText).

Novou aktivitu spustíme pomocí intentu z aktivity Hello. Pro tento účel potřebujeme do funkce onCreate() přidat následující kód:

Button b = (Button)findViewById(R.id.btn_open_returntext);
b.setOnClickListener(new View.OnClickListener() {                        
        public void onClick(View v) {
                Intent intent = new Intent(Hello.this, ReturnText.class);
                startActivityForResult(intent, ACTIVITY_INTENT_RETURNTEXT);
        }
});

Tyto řádky zajišťují reakci na kliknutí na tlačítko. Je třeba přidat OnClickListener s funkcí onClick(). V ní se vytvoří intent udávající, jaká aktivita se spustí. Poté se zavolá funkce startActivityForResult(intent, ACTIVITY_INTENT_RETURNTEXT), která intent zpracuje a tím spustí volanou aktivitu. Funkce kromě intentu obsahuje i návratový identifikátor ACTIVITY_INTENT_RETURNTEXT. Ten si definujeme v třídě Hello jako nějakou celočíselnou konstantu:

private static final int ACTIVITY_INTENT_RETURNTEXT = 1;

Nyní se blíže podíváme na nově vytvořenou aktivitu ReturnText. Reakcí na stisk tlačítka bude získání vloženého textu a jeho předání zpátky aktivitě Hello. To se provede následovně:

public class ReturnText extends Activity {
        public static String INTENT_BUNDLE_TEXT = "text";
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);                
                setContentView(R.layout.return_text);                
                final EditText et = (EditText)findViewById(R.id.text_field);
                Button b = (Button)findViewById(R.id.btn_return);                
                b.setOnClickListener(new View.OnClickListener() {                        
                        public void onClick(View v) {
                                Intent appResultIntent = new Intent();
                                appResultIntent.putExtra(INTENT_BUNDLE_TEXT, et.getText().toString());
                                setResult(RESULT_OK, appResultIntent);
                                finish();
                        }
                });                                          
        }        
}

Aktivita vytvoří intent, kterému se přidají extra data - v tomto případě textový řetězec. Tento intent je voláním funkce setResult() předán zpět aktivitě Hello. Funkce finish() ukončí aktivitu ReturnText. Řetězcová konstanta INTENT_BUNDLE_TEXT slouží jako identifikátor vracených dat (mohu toho vracet víc).

Nyní už je třeba jen zpracovat vrácenou hodnotu v aktivitě Hello. Výsledek se zpracovává ve funkci onActivityResult(). Právě v této funkci se pak použije návratový identifikátor ACTIVITY_INTENT_RETURNTEXT. Kód této funkce bude:

protected void onActivityResult(int requestCode, int resultCode, Intent data){
        switch(requestCode) {
        case ACTIVITY_INTENT_RETURNTEXT:
                if(resultCode == RESULT_OK) {                                                    
                        Bundle extras = data.getExtras();
                        String text = extras.getString(ReturnText.INTENT_BUNDLE_TEXT);
                        TextView tv = (TextView)findViewById(R.id.text);
                        tv.setText(text);
                   }
                break;
        }                
}

Zde je v případě úspěchu (RESULT_OK) vrácená hodnota zobrazena v TextView, jenž má id text. Třída Bundle slouží k uložení předávaných informací - zde textového řetězce. Předávaná data získáme z bundle pomocí jejich identifikátorů - zde ReturnText.INTENT_BUNDLE_TEXT.

Nyní už tedy máme upravenou aktivitu Hello, která umí spustit aktivitu ReturnText a zobrazit výsledek, který je jí vrácen. Nejsme ovšem ještě úplně hotovi. Pokud teď aplikaci spustíme, zjistíme, že při kliknutí na tlačítko v aktivitě Hello nám aplikace spadne. Kde je tedy problém? Chyba je v manifestu - systém neví o tom, že nějaká aktivita ReturnText vůbec existuje. Aktivitu v manifestu dodefinujeme přidáním následujícího kódu dovnitř tagu application:

<activity
        android:name=".ReturnText"
        android:label="@string/app_name">
</activity>

Závěr

link

V tomto díle jsme si popsali význam jednotlivých zdrojových souborů a jejich umístění. Popsali jsme si životní cyklus aktivity. Dále jsme si ukázali jednoduchou aplikaci Hello world. Aplikaci jsme rozvinuli přidáním další aktivity a ukázali jsme si spouštění aktivit pomocí intentů. Příště si ukážeme více o aktivitách a předvedeme si další důležité konstrukty.

Inmite

Chceš se naplno pustit do vývoje skvělých aplikací pro Android? Pošli nám CV na chci.job@inmite.eu – v Inmite právě hledáme posily do našeho androidího týmu! Pokud nás chceš napřed poznat a nezávazně pokecat, určite se ukaž na Android Devcampu, na jehož organizaci se podílíme. Inmite je už od samého začátku českou jedničkou ve vývoji pro Android a s tvou pomocí bychom si pozici rádi upevnili :)

       

Hodnocení: 100 %

        špatnédobré        

Nástroje: Tisk bez diskuse

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Vložit další komentář

Bedňa avatar 7.4.2011 22:58 Bedňa | skóre: 32 | blog: Žumpa | Horňany
Rozbalit Rozbalit vše Re: Vyvíjíme pro Android – tvoříme aktivity
Pekne vysvetlené, keď bude čas, tak sa do toho pustím.
Pokecajte si s umelou stupiditou na http://www.kernelultras.org/
22.4.2011 20:56 @svarcik
Rozbalit Rozbalit vše Re: Vyvíjíme pro Android – tvoříme aktivity
Pěkně vysvětleno - díky! ...jen tak dále ;-)
23.4.2011 00:26 Paráda
Rozbalit Rozbalit vše Re: Vyvíjíme pro Android – tvoříme aktivity
Dobrá práce. Těším se na další díl.
26.4.2011 20:53 Petr
Rozbalit Rozbalit vše Re: Vyvíjíme pro Android – tvoříme aktivity
Nainstaloval jsem si do Eclipse ten ADT plugin a když dám nový projekt a zvolím android tak v nabídce specifikací Build target nemám žádný seznam s verzemi OS jaká data musím prosím ještě dostáhnout a kam je vložit?
30.7.2011 21:34 adkodobro
Rozbalit Rozbalit vše Re: Vyvíjíme pro Android – tvoříme aktivity
Skusam si ten to priklad, a kedze len zacinam, trvalo mi dlhsie zistit, preco aplikacia pada. Dovodom je to ze aktivita Hello neotvara hned aktivitu ReturnText. do Layoutu Hello treba najprv pridat tlacitko

android:id="@+id/btn_open_returntext"

Dalsim problemom je to ze po zavolani aktivity, vlozeni nejakeho textu do pola a odoslanie sa len spetne zavola aktivita Hello, text hello sa nezmeni.
23.8.2011 13:06 josef
Rozbalit Rozbalit vše Re: Vyvíjíme pro Android – tvoříme aktivity
souhlasím, pro naprostého lajka nedostačující příklad. když už jsou zde přidány zdrojové kódy, je dobré vkládat všechny. nebo napsat, co se kde změnilo, přidalo, ubralo. s tímto vysvětlením lajk nepochopí proč "mu to nejde." také by bylo vhodné na konci článku nabídnout ke stažení celý projekt, aby se lidi mohli kouknout co mají kde špatně. jinak jsem rád, že s tímto seriálem někdo začal. jen škoda těch "chyb."
30.9.2011 14:46 rajecc
Rozbalit Rozbalit vše Re: Vyvíjíme pro Android – tvoříme aktivity
Souhlasím, jsem úplný začátečník a pokud to dělám dle tohoto článku, nefunguje jak má. Buď mi něco chybí, nebo přebývá, ale protože opravdu začínám, neznám syntaxi a od článku Hello World jsem to očekával,že se to naučím, nebo přiučím.
2.10.2011 13:03 shobull
Rozbalit Rozbalit vše Re: Vyvíjíme pro Android – tvoříme aktivity
Taky jsem s tím bojoval...uploadnul jsem fungujici aplikaci (eclipse project): http://www.uloz.to/10468954/helloworld-zip
17.3.2012 18:09 Filip
Rozbalit Rozbalit vše Re: Vyvíjíme pro Android – tvoříme aktivity
nejsem si jistý, ale do hlavního layoutu by se měl přidat ten TextView s tím id "text", protože takhle se to nemá kam zobrazit.
18.5.2013 12:05 Tomáš
Rozbalit Rozbalit vše Re: Vyvíjíme pro Android – tvoříme aktivity
Skvělé, doufám že přibudou další díly, protože na internetu toho moc není hlavně ne v čestině.

Založit nové vláknoNahoru

ISSN 1214-1267  
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.