Dieses Kapitel widmet sich den Android Assets und Ressourcen. Es zeigt wie Dateien aus den res und assets Verzeichnissen des Android Projektes geladen werden und wie eine App in mehrere Sprachen übersetzt wird.

Zur Ablage von Dateien innerhalb einer Android App stehen die beiden Ordner res und assets zur Verfügung:

  • res
    Die im res Ordner abgelegten Ressourcen werden über eine ID angesprochen.
    Die Ordnerstruktur innerhalb des res Ordners ist von Android vorgegeben. Siehe Kapitel Providing Resources des Android Developer Guide unter: https://developer.android.com/guide/index.html
  • assets
    Im assets Ordner können Dateien beliebig abgelegt werden.
    Dateien aus dem Assets Verzeichnis werden direkt, also nicht über eine ID, angesprochen.

Beispiel: Bilder aus den Verzeichnissen res und assets laden

Für dieses Kapitel erstellen wir eine Beispiel-App, die die Unterschiede beim Laden von Bildern aus den Verzeichnissen res und assets demonstriert. Die fertige App wird den folgenden beiden Screenshots recht ähnlich sein:

Aus dem Android Assets Verzeichnis geladenes. Aus dem Android Ressourcen Verzeichnis geladenes Bild
  1. Wir starten mit dem Erstellen eines neuen Android Application Project in Eclipse. Bitte vergeben Sie den Namen ResAssets und wählen Sie ein Activity vom Typ Empty Activity.
  2. Laden Sie bitte die beiden Dateien asset_cathedral.jpg und res_cathedral.jpg herunter und kopieren Sie die Datei asset_cathedral.jpg in den assets Ordner und die Datei res_cathedral.jpg in den Ordner res/drawable-hdpi des gerade erstellten Android Projectes.
    Nach dem Kopieren müssen in Eclipse die beiden Verzeichnisse res und assets durch Markieren und Drücken der Taste F5 aktualisiert werden.
  3. Der Benutzerschnittstelle eine ImageView sowie zwei Schaltflächen mit den Beschriftungen Res und Assets hinzufügen. Die ids der beiden Schaltflächen auf buttonRes und buttonAssets ändern. Das XML Layout kann beliebig angepasst werden. Hier ein Beispiel:
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="${relativePackage}.${activityClass}" >
     
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
     
            <Button
                android:id="@+id/buttonRes"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Res" >
            </Button>
     
            <Button
                android:id="@+id/buttonAssets"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Assets" >
            </Button>
        </LinearLayout>
     
        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:src="@drawable/ic_launcher" >
        </ImageView>
     
    </LinearLayout>
    
  4. In der Datei MainActivity.java die OnClickListener() der beiden Buttons wie im folgendem Beispiel implementieren:
    package com.individuapp.resassets;
    import java.io.IOException;
    import java.io.InputStream;
    
    import android.app.Activity;
    import android.graphics.drawable.Drawable;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ImageView;
    
    public class MainActivity extends Activity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		Button buttonRes = (Button) findViewById(R.id.buttonRes);
    		buttonRes.setOnClickListener(new OnClickListener() {
    			
    			@Override
    			public void onClick(View v) {
    				ImageView image = (ImageView) findViewById(R.id.imageView1);
    				image.setImageResource(R.drawable.res_cathedral);
    			}
    		});
    		
    		
    		Button buttonAssets = (Button) findViewById(R.id.buttonAssets);
    		buttonAssets.setOnClickListener(new OnClickListener() {
    			
    			@Override
    			public void onClick(View v) {
    				ImageView image = (ImageView) findViewById(R.id.imageView1);
    				
    				try {
    					InputStream ims = getAssets().open("asset_cathedral.jpg");
    					Drawable drawable = Drawable.createFromStream(ims, null);
    					image.setImageDrawable(drawable);
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    		});
    	}
    }
    

Eine Android App in zusätzliche Sprachen übersetzen:

Im nächsten Schritt erweitern wir die gerade erstellte Android App um eine deutsche Übersetzung. Zum Übersetzen einer App in zusätzliche Sprachen sind lediglich die folgenden vier Schritte notwendig:

  1. Im res Ordner des Android Projektes einen Unterordner für die neue Sprache im Format values-XX anlegen, wobei XX mit dem ISO Ländercode ersetzt wird. Für eine deutsche Übersetzung lautet der Name infolgedessen values-de, für französich values-fr. Wenn für die vom Benutzer verwendete Sprache keine Übersetzung vorhanden ist, werden die Werte aus dem Verzeichnis res/values verwendet.
  2. Die Datei strings.xml aus res/values nach res/values-de kopieren.
  3. Den Inhalt der Datei res/values-de/strings.xml übersetzen.
  4. Die App neu erstellen und starten.