Values és xml, az átirányítások hálójában...
Most, hogy idáig eljutottunk, hozzuk létre az erőforrás mappáink! Ehhez előbb hozzunk létre egy res mappát, majd menjünk bele és rögtön még kettőt: egy values és egy xml nevűt is. Most pedig nézzük meg újra az Androidmanifest.xml fájlunk!
Az írtam korábban, hogy rámutatnak az @-el kezdődő részek az erőforrásaikra. Nos, mivel nekünk még egy darab sincs, így meg kéne őket előbb alkotni.
A res/values/ mappában egészen biztos keres egy strings.xml nevű fájlt. hozzuk hát létre!
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">My First Theme</string>
<string name="theme_name">MyTheme</string>
<string name="style_appearance_name">MyTheme</string>
<string name="author">Kepperv85</string>
<string name="copyright">Next Generation Team</string>
</resources>
Természetesen saját adatokkal dolgozzatok! Amire érdemes figyelni: a téma neve ne legyen kevert, mert nem fog lefordulni. Mindenhol ugyan azt az értéket várja el a fordító!
Hozzunk létre még ebben a mappában egy themes.xml fájlt, a következő tartalommal:
<resources>
<style name="MyTheme" parent="@android:style/Theme" />
</resources>
Ez egy kényszerítés, amit arra vezettek be, hogy az alap témát is cserélje le a rendszer, ezzel cserélhető a systemui és a framework bizonyos erőforrásainak egy jelentős része.
Menjünk át az xml mappánkba most, ott is szükség lesz legalább 3 fájlra!
Elsőre itt a redirections.xml-t készítsük el! A tartalma valami ilyesmi lesz:
<theme-redirections
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:pluto="http://www.w3.org/2001/pluto.html">
<package-redirections android:name="android"
android:minSdkVersion="7"
android:resource="@xml/android" />
.....
</theme-redirections>
Az alkulcsban láthatjuk, hogy vissza hivatkozik erre a mappára, és egy android nevű erőforrást keres. XML-ből származtatott erőforrás, tehát az android.xml fájlt fogja keresni. A redirections.xml feladata az, hogy az olyan csomagok átirányítását megvalósítsa, amiknél kötött a minimális SDK verzió. Ezeket a témázni kívánt csomagok forráskódjából ki lehet lesni. Az "android" ez esetben a systemui és a framework fájl tartalmát takarja majd.
A kulcsok a következő dolgokat adják meg:
android:name: a témázott csomag belső neve.
android:minSdkVersion="x": a minimális SDK verzió, amit a csomag használ
android:resource: az az erőforrás, amit itt fogunk majd felhasználni.
Nézzünk egy példát!
A csomagunk mondjuk legyen az email.apk. Ennek a belső neve com.android.email és a 15-ös SDK-t kéri:
<package-redirections android:name="com.android.email"
android:minSdkVersion="7"
android:resource="@xml/com_android_email" />
Az új erőforrásunk még nincs meg (com_android_email.xml) és nincs még kész az nadroid.xml sem, szóval ezekre szükségünk lesz!
Nézzük példaként most csak a com_android_email.xml-t, az android is így épül fel, csak a saját erőforrásival.
<?xml version="1.0" encoding="utf-8"?>
<resource-redirections>
<item name="drawable/icon">@drawable/com_android_email_ic_launcher_email</item>
...
</resource-redirections>
Az új "link" egyszerűbb, mint azt hinnénk:
<item name="amitcserélnifogunk">@amirecserélnifogjuk</item>
A mappák az Android alatt "kiterjesztéssel" is el vannak látva: -hdpi, -mdpi és így tovább. Van még egy csomó másik. Ám itt ezt NEM kell megadnunk. A témamotor ezt kezeli helyettünk.
Ha ezzel is megvagyunk, akkor már csak egy com_android_email_ic_launcher_email nevű képet kell ikonnak betennünk a telefonunk felbontásához illő mappába, amit létre is hozhatunk rögtön, pl. a drawable-hdpi-be. A kép lehet ikon (ico), png vagy jpg is. Illetve lehet .9.png is (draw patch). Az utóbbiról később írok még!
Már csak egy dolgunk maradt, mielőtt a témánk alapja kész lenne. Az előnézeti kép elhelyezése a "kiterjesztés" nélküli, tehát a sima drawable mappában (Hozzuk létre!). NE tegyük másikba, mert nem találja meg a motor!
Ha ezzel megvagyunk, akkor már csak le kell fordítanunk a témánk és ha minden jól ment, a telepítése és kiválasztás után az email ikon már ki is lett cserélve.
A cikk még nem ért véget, kérlek, lapozz!