X

Anmelden

Zur Bestätigung jetzt anmelden

Passwort vergessen?

... oder mit Facebook anmelden:

Du hast noch keinen Zugang zu AndroidPIT? Registrieren

Transparenz in einer App

Inhaltsverzeichnis

[Verstecken]

Transparenz in einer App (Entwicklung)

Wer kennt sie nicht diese kleinen Helferleins, mal kurz Wifi enablen/disablen usw. Das sind so richtige Mini-Applikationen, die eigentlich gar kein UI benötigen. Sie geben vielleicht maximal einen sogenannten Toast aus, der den jeweiligen Anwender über die ausgeführte Aktion in Kenntniss setzt.

Bei vielen dieser Applikationen fällt jedoch auf, dass beim Start ganz kurz ein komplett schwarzer Screen auf dem Display erscheint, der jedoch gleich wieder verschwindet. Über diesem Screen ist dann ein schmaler grauer Balken, in dem der Name der Applikation steht.

Was also müssen wir tun, um diesen Effekt zu vermeiden, bzw. was steckt hinter diesem Effekt?

Was steckt hinter einer View

Der StartScreen selber wird gebildet durch die Tatsache, dass in der im Pfad /res/layout/ befindlichen "main.xml" der grundsätzliche Aufbau des Startscreens definiert ist. Im allgemeinen besteht dieser aus einem bestimmten Layout und mindestens einer View (eben dem Startscreen).

Eine minimale Standard main.xml schaut folgendermaßen aus:

<?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"
   >
<TextView  
   android:layout_width="fill_parent" 
   android:layout_height="wrap_content" 
   android:text="@string/hello"
   />
</LinearLayout>

In der im Pfad / (Root) zu findenden "AndroidManifest.xml" wird nun neben vielen anderen Dingen im Zweig <application> definiert wie die zu startende Activity heißt. Dies passiert im Zweig <activity> des XML- Files mit dem Key/Value paar android.name:".ZuStartendeActivity". Danach wird im Zweig <intent-filter> noch mit weiteren Angaben festgelegt das diese Activity zu starten ist.

Insgesamt schaut das beispielhaft zunächst so aus:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.voss.wifiswitch"
     android:versionCode="1"
     android:versionName="1.0">
   <application android:icon="@drawable/icon" android:label="@string/app_name">
       <activity android:name=".wifiswitch"
                 android:label="@string/app_name">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
   <uses-sdk android:minSdkVersion="3" />
</manifest> 

Im Sourcecode unserer kleinen Applikation wird nun die Klasse "wifiswitch" automatisch von Eclipse [1] angelegt. Innerhalb dieser Klasse, die als "Extension" der Klasse Activity angelegt wird, finden wir nun den Aufruf "setContentView(R.layout.main);" der letzlich dafür verantwortlich ist, dass unsere View angezeigt wird, die wir eigentlich nicht benötigen.

Der komplette Sourcecode schaut beispielhaft zunächst so aus:

package com.voss.wifiswitch;
import android.app.Activity;
import android.os.Bundle;
public class wifiswitch extends Activity {
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
   }
}

Wie erziehlt man nun die gewünschte Transparenz

  • 1) Grundsätzlich, in dem man der Applikation in der "AndroidManifest.xml" einen Tag hinzufügt. Dieser Tag heißt 'android:theme="@android:style/Theme.Translucent.NoTitleBar"' und wird im Zweig <activity> mit eingebaut.
  • 2) Man entfernt in der "main.xml" im Pfad /res/layout/ den Tag android:text="@string/hello" aus der <TextView>

Unsere fertige "/AndroidManifest.xml" sieht nun also so aus:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.voss.wifiswitch"
     android:versionCode="1"
     android:versionName="1.0">
   <application android:icon="@drawable/icon" android:label="@string/app_name">
       <activity android:name=".wifiswitch"
                 android:label="@string/app_name"
                 android:theme="@android:style/Theme.Translucent.NoTitleBar">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
   <uses-sdk android:minSdkVersion="3" />
</manifest>

Die fertige "/res/layout/main.xml" sieht wie folgt aus:

<?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"
   >
<TextView  
   android:layout_width="fill_parent" 
   android:layout_height="wrap_content" 
   />
</LinearLayout>

Um nun überhaupt irgendetwas sehen zu können bauen wir im WifiSwitcher Sourcecode noch eine kleine Zeile ein, die einen sogenannten Toast auf dem Screen ausgibt.

 package com.voss.wifiswitch;
 import android.app.Activity;
 import android.os.Bundle;
 public class wifiswitch extends Activity {
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       Toast.makeText(getBaseContext(), "Der Bildschirm wird nicht schwarz!", Tast.LENGTH_LONG).show(); finish();
   }
}

Jetzt können wir alles speichern und die Applikation erstmals im Emulator starten.

Wir sehen nichts weiter als die kurze Meldung: Der Bildschirm wird nicht schwarz!

Weblinks

  • Erklärung der Android.Manifest.xml [2]
  • Erklärung der Layout-Erstellung [3]
  • Erklärung der verschiedenen Themes [4]
Anzeige

Bookmark / E-Mail

Klicke auf ein Icon, um diese Wiki-Seite zu bookmarken.
» Diesen Artikel per E-Mail versenden