Блог им. CTAPbIu_MABP →  Фтвкщшв - пинок под зад

кто видел кто нет, а я на выходных наваял вот такую штуку
mabp.kiev.ua/2009/09/05/pbank/

подробностей конкретно этой программы не будет а в общих чертах расскажу.
создаем новый проект и получаем дерево папок и пару файлов


\
+ AndroidManifest.xml
\gen\ua\kiev\mabp
+ R.java
\res\layout
+ main.xml
\res\drawable
+ icon.png
\res\values
+ strings.xml
\src\ua\kiev\mabp
+ MyActivity.java


поехали по порядку
AndroidManifest.xml — дескриптор развертывания, тоже самое что web.xml для J2 Enterprise Edition, для тех кто не в курсе андроид использует J2 Micro Edition

структура фала

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="ua.kiev.mabp">
    <application android:icon="@drawable/icon" android:label="tests">
        <activity android:name="MyActivity" android:label="PBank">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>


package=«ua.kiev.mabp» — пакет приложения
android:label=«tests» — название приложения
android:name=«MyActivity» — запускаймая активность (может быть несколько)
android:label=«PBank» — заголовок активности
android:name=«android.intent.action.MAIN» — главная активность приложения
android:name=«android.intent.category.LAUNCHER» — может запускатся из менюшки
android:name=«android.permission.INTERNET» — приложение может выходить в интернет (есть разные разрешения например на получение SMS или доступ к SD)

R.java
Генерируемый файл, руками его править бесполезно потому что он перезаписывается при каждой компиляции
Файл содержит класс R(esources) в котором хранятся ссылки на все ресурсы, более подробно чуть ниже

Папке res содержит ресурсы нескольких типов, все они при компиляции сохраняются в класс R
папка разделена на ресурсы разного типа
drawable — картинки
layout — слои
values — переменные
есть еще смотрите доки

Думаю про картинки объяснять не надо. единственно что доступ к ним происходит вот так
R.drawable.image_name_without_extention

main.xml
Слои хранят в себе дефолтовую разметку экранов
пример разметки

<?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">

    <ListView
 	android:id="@id/android:list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
 	android:drawSelectorOnTop="false"/>

</LinearLayout>


все начинается с определения LinearLayout
android:orientation=«vertical» — вертикальное положение (как альбомная страница)
android:layout_width=«fill_parent» — заполняет весь экран в ширину
android:layout_height=«fill_parent» — заполняет весь экран в высоту

основной экран содержит список ListView
android:id="@id/android:list" — список доступен в ресурсах через ID R.id.list
android:layout_width=«fill_parent» — заполняет родительский объект по ширене
android:layout_height=«wrap_content» — имеет высоту содержимого
android:drawSelectorOnTop=«false» — первый элемент списка не подсвечен

еще пример

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/vw1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">    

    <ImageView android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView android:id="@+id/text"
            android:textSize="12sp"
            android:textStyle="bold"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"/>

    </LinearLayout>

</LinearLayout>


это ряд с списке

strings.xml
Хранит в себе локализацию.
если создать папку values-ru то из нее будет браться русская локаль

пример файла

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="first">Первая строка</string>
    <string name="second">Вторая строка</string>
</resources>


строки доступны через объект ресурсов R.string.first или через слои android:text="@string/first"
чтобы преобразовать ресурс в локализированную строку делаем так context.getString(R.string.first)

переходим к приложению
MyActivity.java

пример класса

public class ResourceExplorer extends ListActivity{ 

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // список который сождержит информацию
        List<Map<String, Object>> resourceNames = new ArrayList<Map<String, Object>>();

        // Объект рядя
        Map<String, Object> data;

        // захардкодженые номеря взятые отсюда
        // http://code.google.com/android/reference/android/R.drawable.html
        for ( int idx = 17301504; idx <= 17301655; idx++ ){
            data = new HashMap<String, Object>();

            try {
                String stg = Resources.getSystem().getResourceName(idx);
                data.put("text", stg );
                data.put("img", idx );
                resourceNames.add(data);
            }

            catch (Resources.NotFoundException e) {
                // игнорируем
            }
        }

        SimpleAdapter notes = new SimpleAdapter(
            this,
            resourceNames,
            R.layout.row,
            new String[] { "text", "img" },
            new int[] { R.id.text, R.id.img } );

        setListAdapter(notes);
    }
}


в результате получаем приложение которое отображает все картинки которые по умолчанию есть в эмуляторе

this is android, have a fun :)