Vezérelv:
Az alkalmazás megjelenéséért felelős kódot elválasztja a viselkedésért felelőstől.
Az UI leírás kívül van az alkalmazás kódján, azaz módosítható, átdolgozható a forráskód módosítása és újrafordítása nélkül.
Programozott esemény kezelés:
A View osztály beépített interfészeket tartalmaz
On<figeyelo>Listner
névvel, ezek mindegyikhez egy
On<figeyelo>()
visszahívható függvény tartozik.
Pl.:
View.OnTouchListener -> érintőképernyő eseményeinek kezelése,
View.OnKeyListener -> fizikai gombok kezelése,
View.OnClcikListener -> kattintások kezelésére.
A szöveges elemek/címkék helye a /res/values/strings.xml
A values könyvtárhoz nyelvi minősítőket tudunk képezni a többnyelvűség támogatására pl. létrehozhatunk values-hu, values-it stb.
XML megjelenítés jellemzők:
Minden nézetcsoport tartalmaz szélességet és magasságot
layout_width
layout_height
és kötelezően definiálnia kell azokat.
Ez történhet konstansok használatával is:
wrap_content tartalomnak megfelelő méretűre méretezi,
fill_parent amekorára a szülő nézetcsoportja engedi,
match_parent /API level 8-tól kezdődően/ amekorára a szülő nézetcsoportja engedi.
Stílusok használata
Fő elv:
DRY : Don’t Repeat Yourself : Ne ismételd magadat!
XML elemeknél utolsó hivatkozásnak megadva:
style=”@style/mie_pirosnagybetu”
(Android névtér nem kell!)
—
A meghivatkozott tartalom : res/values/styles.xml
<?xml version=”1.0″ encoding=”utf-8″?>
<resources>
<style name=”mie_pirosnagybetu” parent=”android:Theme.Holo”>
<item name=”android:textSize”>24sp</item>
<item name=”android:textColor”>#FFFF0000</item>
</style>
</resources>
Stílus (Style):
egyszerű widgetekre/elemekre ható property halmaz elnevezése
használata : /res/values/styles.xml : –> ... style=”@style/mie_stilus_neve” />
Téma (Theme): /res/values/mie_theme.xml –> AndroidManifest.xml <activity … android:theme=”@android:style/mie_theme”
az egész Activityre vagy alkalmazásra ható property halmaz (sablon) elnevezése
<application android:theme=”@android:style/Theme.NoTitleBar.Fullscreen” />
<application android:theme=”@android:style/Theme.Black.NoTitleBar” />
— /res/values/colors.xml :
<resources>
…
<color name=”mie_color”>#ff1a557c</color>
…
</resources>
— /res/values/mie_theme.xml :
<resources>
…
<style name=”mieTheme1″ …>
<item name=”android:windowBackground”>@color/mie_color</item>
<item name=”android:colorBackgroundCacheHint”>@color/mie_color</item>
</style>
…
</resources>
— /res/drawable/my_gradient.xml :
<shape xmlns:android=”http://schemas.android.com/apk/res/android” android:shape=”rectangle”>
<gradient
android:angle=”270″
android:startColor=”#1a557c”
android:endColor=”#62c4e9″
/></shape>
/res/drawable/my_custom_selector.xml :
<selector xmlns:android=”http://schemas.android.com/apk/res/android”>
<item android:drawable=”@color/mie_color” android:state_pressed=”true”/>
<item android:drawable=”@drawable/example”/>
</selector>
<?xml version=”1.0″ encoding=”utf-8″?>
<selector xmlns:android=”http://schemas.android.com/apk/res/android”>
<item android:drawable=”@drawable/boutonnpousse” android:state_pressed=”true”/>
<item android:drawable=”@drawable/boutonn”/>
</selector>
— AndroidManifest.xml :
<activity android:name=”hu.meredekel.android.minta1″
android:configChanges=”orientation|screenSize”
android:theme=”@style/mie_Theme”
android:windowSoftInputMode=”adjustResize|stateHidden”
/>