class DarkRaha extends com { // разработка приложений
            String a="Главная" b="Контакты" c="О сайте"
};

Android

Android API

Android GUI

Android Advance GUI

cреда разработки
cтруктура приложения
манифест файл
пример приложения
разрешения
ресурсы
альтернативные ресурсы
виджет приложения
публикация приложения

Разработка приложений под Android

Ресурсы

В Eclipse в директории res проекта сохраняются ресурсы используемые приложением. Для различных типов ресурсов в ней создаются отдельные поддиректории. Имена файлов ресурсов должны состоять из маленьких английских букв и цифр.

типы ресурсов

Ниже приведены основные ресурсы:

ссылка на ресурс в java коде

Для доступа к ресурсам в коде используется класс R, в котором определены целочисленные идентификаторы ресурсов.Как видно из предыдущего списка имя константы идентификатора ресурса в R классе совпадает с именем файла в котором он определен.

В Eclipse класс R генерируется автоматически и сохраняется в папке gen проекта. Чтобы класс автоматически обнавлялся при добавлении ресурса, надо в списке проектов отметить нужный проект (т.е. в окошке Project Explorer или Package Explorer, по умолчанию находятся слева) и поставить галочку в Project->Build automatically. Если произошел сбой и R класс не понимается, иногда помогает очистка проекта Project->Clean.

загрузка ресурсов

В текущем контексте доступен метод getResources(), возвращающий объект для доступа к ресурсам.


Resources res = getResources();
boolean screenIsSmall = res.getBoolean(R.bool.screen_small);

ссылка на ресурс в xml ресурсах

При определении xml ресурса, например формы, можно использовать ссылки на другие ресурсы по формуле @[package:]typeres/filename.


<ImageView
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:src="@drawable/logo"
    android:adjustViewBounds="@bool/adjust_view_bounds" />

ресурсы значения

Ресурсы определяющие простые значения определяются в директории values в xml файле с корневым элементом resource, который не имеет каких-либо атрибутов. Имя файла любое, но обычно строки записывают в strings.xml, целые в integers.xml и т.п.


<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="screen_small">true</bool>

    <!-- #RGB, #ARGB, #RRGGBB, #AARRGGBB -->
    <color name="opaque_red">#f00</color>

    <dimen name="ball_radius">30dp</dimen>

    <integer name="min_speed">5</integer>

    <!-- для строк есть дополнительные возомжности -->
    <string name="hello">Hello!</string>

</resources> 

массивы

В качестве ресурса можно определять массивы данных, они тоже относятся к ресурсам значениям


    <integer-array name="bits">
        <item>4</item>
        <item>8</item>
        <item>16</item>
        <item>32</item>
    </integer-array>

    <string-array name="planets_array">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
    </string-array>

// задаем массив строк по указанному ресурсу
Resources res = getResources();
String[] planets = res.getStringArray(R.array.planets_array);

Для всех прочих типов используется типизированный массив. Элементы массива не обязательно должны быть одного типа. Но если они разные, вы должны учитывать это в java коде при доступе к элементу. В качестве элемента массива можно указывать ссылку на ресурс.


<array name="cat_icons">
   <item>@drawable/cat_0</item>
   <item>@drawable/cat_1</item>
   ...
</array>

<array name="bool_info">
  <item>true</item>
  <item>false</item>
  <item>false</item>
  ...
</array>

TypedArray bool_info = res.obtainTypedArray(R.array.bool_info);

for (int i = 0; i < names.length; ++i) {
   pi = new PersonInfo();
   ...
   pi.gut = gut.getBoolean(i, false);
   items.add(pi);
}

// TypedArray нужно очищать явно после использования
bool_info.recycle();

сырые ресурсы

Сырые ресурсы хранятся в папке res/raw/ и считываются програмно как обычный файл. При этом гарантируется неизменность файлов при сборке. Например, графические файлы в drawable могут быть изменены для оптимизации. Но тот же графический файл в папке raw останется неизменным.


// просто считываем число из файла
InputStream is = getResources().openRawResource(R.raw.screencount);
byte buffer[] = new byte[1024];
try {
     int tmp = is.read(buffer);
     screenMax = Integer.parseInt(new String(buffer, 0, tmp));
     is.close();
 } catch (Exception e) {
     e.printStackTrace();
}

Также файлы можно кинуть в папку assets в корне проекта. В этом случае идентификатор ресурса не используется. А доступ осуществляется через объект класса AssetManager.


// отрывок из офф. док.
InputStream is = getAssets().open("read_asset.txt");

// гарантировано возвратит размер файла, 
// размер файла не должен быть больше 2Гб
int size = is.available();

// считываем весь файл в буфер
byte[] buffer = new byte[size];
is.read(buffer);
is.close();

// преобразуем буфер в строку 
String text = new String(buffer);

// покажем строку в виджете
TextView tv = (TextView)findViewById(R.id.text);

По большому счету нет разницы куда класть файл в res/raw или в assets, если файл используется только вами. В других случаях по ситуации. Например, ниже приведен отрывок из адаптера программы Йога-сутры, где используется ассет файл для установки нестандартного шрифта (в стандартном не все символы оказались).


// пусть есть файлы assets/fonts/mangal.ttf и assets/fonts/arial.ttf
tf = Typeface.createFromAsset(mContext.getAssets(), "fonts/mangal.ttf");
tfTranscript = Typeface.createFromAsset(mContext.getAssets(),
                "fonts/arial.ttf");
...

@Override
public View getView(int position, View convertView, ViewGroup parent) {
...
if (visibleSanscrit) {
  // устанавливаем нестандартный шрифт c символами деванагари
  holder.tvSanscrit.setText(src.get(position));
  holder.tvSanscrit.setTypeface(tf);
} 

}

подробности

Более подробно о различных типах ресурсов смотрите соответствующие разделы:


Рейтинг@Mail.ru