<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.byte-welt.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tomate+Salat</id>
	<title>Byte-Welt Wiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.byte-welt.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tomate+Salat"/>
	<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php/Spezial:Beitr%C3%A4ge/Tomate_Salat"/>
	<updated>2026-07-07T21:53:43Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Emulatoren&amp;diff=6607</id>
		<title>Emulatoren</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Emulatoren&amp;diff=6607"/>
		<updated>2014-10-29T15:35:33Z</updated>

		<summary type="html">&lt;p&gt;Tomate Salat: /* Manymo */ Rechtschreibung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine Liste von verfügbaren Emulatoren für das Android-OS.&lt;br /&gt;
&lt;br /&gt;
=Standard Emulator=&lt;br /&gt;
Der Standard Emulator wird mit dem SDK ausgeliefert. Der Emulator ist für Anfänger ausreichend, kommt aber aufgrund seiner Trägheit schnell an seine Grenzen. &lt;br /&gt;
&lt;br /&gt;
=YouWave= &lt;br /&gt;
[http://youwave.com/ YouWave] ist eher für Endanwender gedacht und unterstützt keine Tabletansicht. Zudem ist es nicht möglich seine Apps zu debuggen (dies könnte sich in neueren/aktuellen Version geändert haben). Wer kein Android-Gerät besitzt kann diesen Emulator gut dazu verwenden um seine App in einer Umgebung zu testen, die Leistungstechnisch vergleichsweise besser an gängige Smartphones ran kommt als der Standardemulator.&lt;br /&gt;
&lt;br /&gt;
=Manymo=&lt;br /&gt;
[https://www.manymo.com/ Manymo] ist ein kostenpflichtiger cloudbasierter Service - die App muss also auf den Server des Dienstleisters hochgeladen werden. Einmal hochgeladen kann man seine App gegen verschiedene Android-Versionen und Displayauflösungen testen.&lt;br /&gt;
&lt;br /&gt;
=BlueStacks=&lt;br /&gt;
[http://www.bluestacks.com/ BlueStacks] ist ein performanter Emulator für Tablets der auch bei der Entwicklung überzeugen kann. BlueStacks kann auch eine SD-Karte simulieren, das hochladen von eigenen Dateien darauf ist nur etwas versteckt. Einziges aufgefallenes Manko: es ist anscheinend nicht möglich die Google Play Services darauf zu installieren (dies könnte sich in neueren/aktuellen Version geändert haben).&lt;br /&gt;
&lt;br /&gt;
==Anleitung für die SD-Karte==&lt;br /&gt;
Um Dateien auf der SD-Karte von BlueStacks ablegen zu können, müsst ihr die Daten unter folgendem Pfad ablegen:&lt;br /&gt;
&lt;br /&gt;
C:\ProgramData\BlueStacks\UserData\SharedFolder&lt;br /&gt;
&lt;br /&gt;
=Virtual Box=&lt;br /&gt;
Eine sehr perfomante Möglichkeit Android zu emulieren ist das nutzen von Virtual Box. Eine ausführliche Beschreibung dazu finden Ihr hier: http://blog.geniali.ch/2012/12/15/android-dev-schneller-android-emulator/&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Android]]&lt;/div&gt;</summary>
		<author><name>Tomate Salat</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Emulatoren&amp;diff=6606</id>
		<title>Emulatoren</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Emulatoren&amp;diff=6606"/>
		<updated>2014-10-29T15:35:04Z</updated>

		<summary type="html">&lt;p&gt;Tomate Salat: /* YouWave */ Rechtschreibung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine Liste von verfügbaren Emulatoren für das Android-OS.&lt;br /&gt;
&lt;br /&gt;
=Standard Emulator=&lt;br /&gt;
Der Standard Emulator wird mit dem SDK ausgeliefert. Der Emulator ist für Anfänger ausreichend, kommt aber aufgrund seiner Trägheit schnell an seine Grenzen. &lt;br /&gt;
&lt;br /&gt;
=YouWave= &lt;br /&gt;
[http://youwave.com/ YouWave] ist eher für Endanwender gedacht und unterstützt keine Tabletansicht. Zudem ist es nicht möglich seine Apps zu debuggen (dies könnte sich in neueren/aktuellen Version geändert haben). Wer kein Android-Gerät besitzt kann diesen Emulator gut dazu verwenden um seine App in einer Umgebung zu testen, die Leistungstechnisch vergleichsweise besser an gängige Smartphones ran kommt als der Standardemulator.&lt;br /&gt;
&lt;br /&gt;
=Manymo=&lt;br /&gt;
[https://www.manymo.com/ Manymo] ist ein kostenpflichtiger Cloudbasierter Service - die App muss also auf den Server des Dienstleisters hochgeladen werden. Einmal hochgeladen kann man seine App gegen verschiedene Android-Versionen und Displayauflösungen testen. &lt;br /&gt;
&lt;br /&gt;
=BlueStacks=&lt;br /&gt;
[http://www.bluestacks.com/ BlueStacks] ist ein performanter Emulator für Tablets der auch bei der Entwicklung überzeugen kann. BlueStacks kann auch eine SD-Karte simulieren, das hochladen von eigenen Dateien darauf ist nur etwas versteckt. Einziges aufgefallenes Manko: es ist anscheinend nicht möglich die Google Play Services darauf zu installieren (dies könnte sich in neueren/aktuellen Version geändert haben).&lt;br /&gt;
&lt;br /&gt;
==Anleitung für die SD-Karte==&lt;br /&gt;
Um Dateien auf der SD-Karte von BlueStacks ablegen zu können, müsst ihr die Daten unter folgendem Pfad ablegen:&lt;br /&gt;
&lt;br /&gt;
C:\ProgramData\BlueStacks\UserData\SharedFolder&lt;br /&gt;
&lt;br /&gt;
=Virtual Box=&lt;br /&gt;
Eine sehr perfomante Möglichkeit Android zu emulieren ist das nutzen von Virtual Box. Eine ausführliche Beschreibung dazu finden Ihr hier: http://blog.geniali.ch/2012/12/15/android-dev-schneller-android-emulator/&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Android]]&lt;/div&gt;</summary>
		<author><name>Tomate Salat</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Emulatoren&amp;diff=6605</id>
		<title>Emulatoren</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Emulatoren&amp;diff=6605"/>
		<updated>2014-10-29T15:28:08Z</updated>

		<summary type="html">&lt;p&gt;Tomate Salat: /* Virtual Box */ link zeigt wieder mehr an als nur [1]&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine Liste von verfügbaren Emulatoren für das Android-OS.&lt;br /&gt;
&lt;br /&gt;
=Standard Emulator=&lt;br /&gt;
Der Standard Emulator wird mit dem SDK ausgeliefert. Der Emulator ist für Anfänger ausreichend, kommt aber aufgrund seiner Trägheit schnell an seine Grenzen. &lt;br /&gt;
&lt;br /&gt;
=YouWave= &lt;br /&gt;
[http://youwave.com/ YouWave] ist eher für Endanwender gedacht und unterstützt keine Tabletansicht. Zudem ist es nicht Möglich seine Apps zu debuggen (dies könnte sich in neueren/aktuellen Version geändert haben). Wer kein Android-Gerät besitzt kann diesen Emulator gut dazu verwenden um seine App in einer Umgebung zu testen, die Leistungstechnisch vergleichsweise besser an gängige Smartphones ran kommt als der Standardemulator.&lt;br /&gt;
&lt;br /&gt;
=Manymo=&lt;br /&gt;
[https://www.manymo.com/ Manymo] ist ein kostenpflichtiger Cloudbasierter Service - die App muss also auf den Server des Dienstleisters hochgeladen werden. Einmal hochgeladen kann man seine App gegen verschiedene Android-Versionen und Displayauflösungen testen. &lt;br /&gt;
&lt;br /&gt;
=BlueStacks=&lt;br /&gt;
[http://www.bluestacks.com/ BlueStacks] ist ein performanter Emulator für Tablets der auch bei der Entwicklung überzeugen kann. BlueStacks kann auch eine SD-Karte simulieren, das hochladen von eigenen Dateien darauf ist nur etwas versteckt. Einziges aufgefallenes Manko: es ist anscheinend nicht möglich die Google Play Services darauf zu installieren (dies könnte sich in neueren/aktuellen Version geändert haben).&lt;br /&gt;
&lt;br /&gt;
==Anleitung für die SD-Karte==&lt;br /&gt;
Um Dateien auf der SD-Karte von BlueStacks ablegen zu können, müsst ihr die Daten unter folgendem Pfad ablegen:&lt;br /&gt;
&lt;br /&gt;
C:\ProgramData\BlueStacks\UserData\SharedFolder&lt;br /&gt;
&lt;br /&gt;
=Virtual Box=&lt;br /&gt;
Eine sehr perfomante Möglichkeit Android zu emulieren ist das nutzen von Virtual Box. Eine ausführliche Beschreibung dazu finden Ihr hier: http://blog.geniali.ch/2012/12/15/android-dev-schneller-android-emulator/&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Android]]&lt;/div&gt;</summary>
		<author><name>Tomate Salat</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Emulatoren&amp;diff=6604</id>
		<title>Emulatoren</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Emulatoren&amp;diff=6604"/>
		<updated>2014-10-29T15:27:17Z</updated>

		<summary type="html">&lt;p&gt;Tomate Salat: toten link ausgewechselt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine Liste von verfügbaren Emulatoren für das Android-OS.&lt;br /&gt;
&lt;br /&gt;
=Standard Emulator=&lt;br /&gt;
Der Standard Emulator wird mit dem SDK ausgeliefert. Der Emulator ist für Anfänger ausreichend, kommt aber aufgrund seiner Trägheit schnell an seine Grenzen. &lt;br /&gt;
&lt;br /&gt;
=YouWave= &lt;br /&gt;
[http://youwave.com/ YouWave] ist eher für Endanwender gedacht und unterstützt keine Tabletansicht. Zudem ist es nicht Möglich seine Apps zu debuggen (dies könnte sich in neueren/aktuellen Version geändert haben). Wer kein Android-Gerät besitzt kann diesen Emulator gut dazu verwenden um seine App in einer Umgebung zu testen, die Leistungstechnisch vergleichsweise besser an gängige Smartphones ran kommt als der Standardemulator.&lt;br /&gt;
&lt;br /&gt;
=Manymo=&lt;br /&gt;
[https://www.manymo.com/ Manymo] ist ein kostenpflichtiger Cloudbasierter Service - die App muss also auf den Server des Dienstleisters hochgeladen werden. Einmal hochgeladen kann man seine App gegen verschiedene Android-Versionen und Displayauflösungen testen. &lt;br /&gt;
&lt;br /&gt;
=BlueStacks=&lt;br /&gt;
[http://www.bluestacks.com/ BlueStacks] ist ein performanter Emulator für Tablets der auch bei der Entwicklung überzeugen kann. BlueStacks kann auch eine SD-Karte simulieren, das hochladen von eigenen Dateien darauf ist nur etwas versteckt. Einziges aufgefallenes Manko: es ist anscheinend nicht möglich die Google Play Services darauf zu installieren (dies könnte sich in neueren/aktuellen Version geändert haben).&lt;br /&gt;
&lt;br /&gt;
==Anleitung für die SD-Karte==&lt;br /&gt;
Um Dateien auf der SD-Karte von BlueStacks ablegen zu können, müsst ihr die Daten unter folgendem Pfad ablegen:&lt;br /&gt;
&lt;br /&gt;
C:\ProgramData\BlueStacks\UserData\SharedFolder&lt;br /&gt;
&lt;br /&gt;
=Virtual Box=&lt;br /&gt;
Eine sehr perfomante Möglichkeit Android zu emulieren ist das nutzen von Virtual Box. Eine ausführliche Beschreibung dazu finden Ihr hier: [http://blog.geniali.ch/2012/12/15/android-dev-schneller-android-emulator/]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Android]]&lt;/div&gt;</summary>
		<author><name>Tomate Salat</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Emulatoren&amp;diff=5703</id>
		<title>Emulatoren</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Emulatoren&amp;diff=5703"/>
		<updated>2013-09-16T12:04:55Z</updated>

		<summary type="html">&lt;p&gt;Tomate Salat: /* YouWave */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine Liste von verfügbaren Emulatoren für das Android-OS.&lt;br /&gt;
&lt;br /&gt;
=Standard Emulator=&lt;br /&gt;
Der Standard Emulator wird mit dem SDK ausgeliefert. Der Emulator ist für Anfänger ausreichend, kommt aber aufgrund seiner Trägheit schnell an seine Grenzen. &lt;br /&gt;
&lt;br /&gt;
=YouWave= &lt;br /&gt;
[http://youwave.com/ YouWave] ist eher für Endanwender gedacht und unterstützt keine Tabletansicht. Zudem ist es nicht Möglich seine Apps zu debuggen (dies könnte sich in neueren/aktuellen Version geändert haben). Wer kein Android-Gerät besitzt kann diesen Emulator gut dazu verwenden um seine App in einer Umgebung zu testen, die Leistungstechnisch vergleichsweise besser an gängige Smartphones ran kommt als der Standardemulator.&lt;br /&gt;
&lt;br /&gt;
=Manymo=&lt;br /&gt;
[https://www.manymo.com/ Manymo] ist ein kostenpflichtiger Cloudbasierter Service - die App muss also auf den Server des Dienstleisters hochgeladen werden. Einmal hochgeladen kann man seine App gegen verschiedene Android-Versionen und Displayauflösungen testen. &lt;br /&gt;
&lt;br /&gt;
=BlueStacks=&lt;br /&gt;
[http://www.bluestacks.com/ BlueStacks] ist ein performanter Emulator für Tablets der auch bei der Entwicklung überzeugen kann. BlueStacks kann auch eine SD-Karte simulieren, das hochladen von eigenen Dateien darauf ist nur etwas versteckt. Einziges aufgefallenes Manko: es ist anscheinend nicht möglich die Google Play Services darauf zu installieren (dies könnte sich in neueren/aktuellen Version geändert haben).&lt;br /&gt;
&lt;br /&gt;
==Anleitung für die SD-Karte==&lt;br /&gt;
Um Dateien auf der SD-Karte von BlueStacks ablegen zu können, müsst ihr die Daten unter folgendem Pfad ablegen:&lt;br /&gt;
&lt;br /&gt;
C:\ProgramData\BlueStacks\UserData\SharedFolder&lt;br /&gt;
&lt;br /&gt;
=Virtual Box=&lt;br /&gt;
Eine sehr perfomante Möglichkeit Android zu emulieren ist das nutzen von Virtual Box. Eine ausführliche Beschreibung dazu finden Ihr hier: [http://blog.geniali.ch/post/2012/12/15/Android-Dev-%E2%80%93-Schneller-Android-Emulator.aspx http://blog.geniali.ch/post/2012/12/15/Android-Dev-%E2%80%93-Schneller-Android-Emulator.aspx]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Android]]&lt;/div&gt;</summary>
		<author><name>Tomate Salat</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Samsung_SDK_(Android)&amp;diff=5660</id>
		<title>Samsung SDK (Android)</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Samsung_SDK_(Android)&amp;diff=5660"/>
		<updated>2013-09-06T20:15:00Z</updated>

		<summary type="html">&lt;p&gt;Tomate Salat: Die Seite wurde neu angelegt: „Hier wird beschrieben, wie man Features aus dem Samsung SDK für Android verwenden kann. Alles nachfolgende setzt also voraus, dass ihr ein Gerät (Smartphone/Tab…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier wird beschrieben, wie man Features aus dem Samsung SDK für Android verwenden kann. Alles nachfolgende setzt also voraus, dass ihr ein Gerät (Smartphone/Tablet) von Samsung besitzt und dieses auch die beschriebene Funktionalität unterstützt. Eine Zusammenfassung davon kann hier gefunden werden: http://developer.samsung.com/samsung-mobile-sdk/sdk&lt;br /&gt;
 &lt;br /&gt;
=Multi-Window=&lt;br /&gt;
Samsung bietet an, 2 Activitys zur gleichen Zeit offen haben zu können. Zusätzlich existiert noch Leiste in der Apps gelistet werden können, die entsprechende Funktionalität unterstützen. Hier wird sowohl beschrieben wie ihr in eurer App entsprechende Unterstützung schafft.&lt;br /&gt;
&lt;br /&gt;
==Multi-Window Voraussetzung==&lt;br /&gt;
Android 4.1 (16) oder höher&lt;br /&gt;
&lt;br /&gt;
==Multi-Window-Leiste==&lt;br /&gt;
Diese Leiste ist vergleichbar mit dem Android-Launcher, einziger Unterschied: Ihr könnt nur eine Activity aus eurer App in der Leiste anzeigen lassen. Die Multi-Window-Leiste findet eure Activity über den Intent-Filter (welcher in der AndroidManifest.xml gesetzt wird). Dieser Filter enthält alle Elemente, die auch für den Launcher wichtig sind + eine weitere Kategory:&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;activity&lt;br /&gt;
    android:name=&amp;quot;de.jfruit.ssdk.MainActivity&amp;quot;&lt;br /&gt;
    android:label=&amp;quot;@string/app_name&amp;quot; &lt;br /&gt;
    &amp;gt;&lt;br /&gt;
    &amp;lt;intent-filter&amp;gt;&lt;br /&gt;
        &amp;lt;action android:name=&amp;quot;android.intent.action.MAIN&amp;quot; /&amp;gt;        &lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;category android:name=&amp;quot;android.intent.category.LAUNCHER&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;category android:name=&amp;quot;android.intent.category.MULTIWINDOW_LAUNCHER&amp;quot; /&amp;gt;        &lt;br /&gt;
    &amp;lt;/intent-filter&amp;gt;            &lt;br /&gt;
&amp;lt;/activity&amp;gt;   &lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das bedeutet: die Activity die Ihr in der Leiste haben wollt ist zwingend auch im Launcher verfügbar. An dieser Stelle ist eure App allerdings erst zu 50% Multi-Window-Fähig! &lt;br /&gt;
&lt;br /&gt;
==Multi-Window-Ansicht==&lt;br /&gt;
Damit eure App auch wirklich Multi-Window-Fähig ist bedarf es einer weiteren Anpassung eurer Manifest-Datei. Dazu müsst ihr zunächst angeben, dass eine weitere Library verwendet werden soll und einen entsprechenden Meta Eintrag:&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;uses-library android:name=&amp;quot;com.sec.android.app.multiwindow&amp;quot; android:required=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;meta-data android:name=&amp;quot;com.sec.android.support.multiwindow&amp;quot; android:value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese beiden Zeilen müssen innerhalb des application-Tags eingetragen werden. Nach diesen Zeilen habt ihr die Unterstützung vollständig implementiert und der Anwender kann eure App in der Multi-Window-Ansicht verwenden. Hier nochmals ein komplettes Beispiel, wie eure AndroidMainfest.xml aussehen könnte:&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;manifest xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;
    package=&amp;quot;de.jfruit.ssdk&amp;quot;&lt;br /&gt;
    android:versionCode=&amp;quot;1&amp;quot;&lt;br /&gt;
    android:versionName=&amp;quot;1.0&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;uses-sdk&lt;br /&gt;
        android:minSdkVersion=&amp;quot;14&amp;quot;&lt;br /&gt;
        android:targetSdkVersion=&amp;quot;18&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;application&lt;br /&gt;
        android:allowBackup=&amp;quot;true&amp;quot;&lt;br /&gt;
        android:icon=&amp;quot;@drawable/ic_launcher&amp;quot;&lt;br /&gt;
        android:label=&amp;quot;@string/app_name&amp;quot;&lt;br /&gt;
        android:theme=&amp;quot;@style/AppTheme&amp;quot;&amp;gt;               &lt;br /&gt;
                &lt;br /&gt;
		&amp;lt;uses-library android:name=&amp;quot;com.sec.android.app.multiwindow&amp;quot; android:required=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;meta-data android:name=&amp;quot;com.sec.android.support.multiwindow&amp;quot; android:value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
		&amp;lt;activity&lt;br /&gt;
		    android:name=&amp;quot;de.jfruit.ssdk.MainActivity&amp;quot;&lt;br /&gt;
		    android:label=&amp;quot;@string/app_name&amp;quot; &lt;br /&gt;
		    &amp;gt;&lt;br /&gt;
		    &amp;lt;intent-filter&amp;gt;&lt;br /&gt;
		        &amp;lt;action android:name=&amp;quot;android.intent.action.MAIN&amp;quot; /&amp;gt;                &lt;br /&gt;
		&lt;br /&gt;
		        &amp;lt;category android:name=&amp;quot;android.intent.category.MULTIWINDOW_LAUNCHER&amp;quot; /&amp;gt;&lt;br /&gt;
		        &amp;lt;category android:name=&amp;quot;android.intent.category.LAUNCHER&amp;quot; /&amp;gt;&lt;br /&gt;
		        &lt;br /&gt;
		    &amp;lt;/intent-filter&amp;gt;            &lt;br /&gt;
		&amp;lt;/activity&amp;gt;       &lt;br /&gt;
    &amp;lt;/application&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/manifest&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
[[Kategorie:Android]]&lt;/div&gt;</summary>
		<author><name>Tomate Salat</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Styles_und_Themes&amp;diff=5453</id>
		<title>Styles und Themes</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Styles_und_Themes&amp;diff=5453"/>
		<updated>2013-08-21T09:04:39Z</updated>

		<summary type="html">&lt;p&gt;Tomate Salat: /* Eigenschaft von Theme übernehmen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Styles=&lt;br /&gt;
Diese ermöglichen es uns beliebig viele Attribute zusammenzufassen. Wird ein solcher Style einem View zugewiesen, so übernimmt dieser die angegebenen Werte. Um Redundanzen zu vermeiden können Styles aufeinander aufbauen und Werte hinzufügen oder überschreiben.&lt;br /&gt;
&lt;br /&gt;
Somit helfen uns Styles den Code übersichtlich zu halten und nehmen uns Wartungsaufwand ab. Da ein Style mehreren Elementen zugewiesen werden kann, können wir an einer zentralen Stelle direkten Einfluss auf betroffene Elemente ausüben.&lt;br /&gt;
&lt;br /&gt;
==Das Grundgerüst==&lt;br /&gt;
Styles werden in einer XML-Datei angelegt. Der Name der Datei kann dabei beliebig gewählt werden, oft wird diese aber einfach styles.xml genannt. Diese XML-Datei muss sich im Resourcen-Ordner values befinden. &lt;br /&gt;
&lt;br /&gt;
Eine einfache xml könnte dann z.B. so aussehen:&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;resources&amp;gt;&lt;br /&gt;
    &amp;lt;style name=&amp;quot;NameDesStyles&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Hier werden die Attribute angelegt --&amp;gt;&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/resources&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der style-Tag kann beliebg viele item-Tags aufnehmen. Die items besitzen ein Attribut &#039;&#039;&#039;name&#039;&#039;&#039; welches das Zielattribut definiert. Der zugehörige Wert wird dann als Inhalt in den Tag geschrieben. Hier ein Beispiel wie man einen roten Hintergrund definieren kann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;style name=&amp;quot;NameDesStyles&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#FF0000&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zuweisung==&lt;br /&gt;
Ausgehend von dem obigen Beispiel wollen wir diesen Style nun einem TextView zuweisen. Dazu nutzen wir das Attribut &#039;&#039;&#039;style&#039;&#039;&#039; und geben dort folgendes an: &#039;&#039;&#039;@style/NameDesStyles&#039;&#039;&#039;. Nachfolgend ist ein Auszug einer möglichen Layout-Datei zu sehen, die diesen Style verwendet:&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;TextView &lt;br /&gt;
    style=&amp;quot;@style/NameDesStyles&amp;quot;&lt;br /&gt;
    android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
    android:text=&amp;quot;Foo Bar&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
Im Layout selber haben wir dann letztendlich noch die Möglichkeit die Werte des angegebenen Styles zu überschreiben. Wenn wir also folgendes Attribut setzen würden: &#039;&#039;&#039;android:background=&#039;#0000FF&#039;&#039;&#039;&#039;, so wäre der Hintergrund blau und nicht rot.&lt;br /&gt;
&lt;br /&gt;
==Vererbung==&lt;br /&gt;
Dies wollen wir an einem Beispiel verdeutlichen. Angenommen wir haben einen Style welcher das Aussehen eines Eingabefeldes definiert. Zusätzlich brauchen wir ein definiertes Aussehen für das selbe Eingabefeld wenn es gesperrt ist - in diesem Fall soll einfach der Hintergrund Grau sein aber alles andere bleibt gleich. Ohne Vererbung müssten man dies mit zwei Style-Definitionen lösen:&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;style name=&amp;quot;Eingabe&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_width&amp;quot;&amp;gt;match_parent&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_height&amp;quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#00FF00&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style name=&amp;quot;EingabeGesperrt&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_width&amp;quot;&amp;gt;match_parent&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_height&amp;quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#CCCCCC&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
Schon in diesem kurzen Beispiel haben wir einiges an Redundanzen. Zusätzlich wird so ein  erhöhter Pflegeaufwand + eine potentielle Fehlerquelle geschaffen - denn Änderungen die den Style &#039;&#039;Eingabe&#039;&#039; betreffen, müssen auch im Style &#039;&#039;EingabeGesperrt&#039;&#039; nachgezogen werden. &lt;br /&gt;
&lt;br /&gt;
Deswegen gibt es eine elegantere Methode wie wir dieses Problem lösen können. Nämlich mithilfe von Vererbung. Dazu gibt es zwei Techniken wie man die Vererbung bewerkstelligen kann. &lt;br /&gt;
&lt;br /&gt;
===Vererbung: Parent===&lt;br /&gt;
Die erste Möglichkeit wie man Vererbung angehen kann ist über das Attribut &#039;&#039;&#039;parent&#039;&#039;&#039; des style-Tags. Dort gibt man einfach den zu erbenden Style an und die Werte werden entsprechend übernommen. Als Angabe ist sowohl nur der Name des Stils (Eingabe) als auch die &amp;quot;Resourcenschreibweise&amp;quot; (@style/Eingabe) gültig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;style name=&amp;quot;Eingabe&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_width&amp;quot;&amp;gt;match_parent&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_height&amp;quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#00FF00&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style name=&amp;quot;EingabeGesperrt&amp;quot; parent=&amp;quot;Eingabe&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#CCCCCC&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Vererbung: Punktnotation===&lt;br /&gt;
Die zweite Möglichkeit wäre dann die Punktnotation. Dabei wird nicht das parent-Attribut genutzt, sondern eine spezielle Form der Namensgebung. Zuerst wird der Name des zu erbenden Stils angegeben, danach folgt ein Punkt. Als nächstes schreibt man den eigentlichen Namen des Stils direkt dahinter. In unserem Fall also &#039;&#039;Eingabe.Gesperrt&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;style name=&amp;quot;Eingabe&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_width&amp;quot;&amp;gt;match_parent&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_height&amp;quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#00FF00&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style name=&amp;quot;Eingabe.Gesperrt&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#CCCCCC&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch von diesem Stil (Eingabe.Gesperrt) kann dann wieder geerbt werden. Eine weitere Vererbung könnte dann z.B. so aussehen: &#039;&#039;Eingabe.Gesperrt.FooBar&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=Themes=&lt;br /&gt;
Über das Theme kann die App den Bedürfnissen/Vorgaben angepasst werden. Ein Theme ist letztendlich nichts anderes wie ein Style der ganz vielen Eigenschaften vorgibt. Um ein eigenes Theme zu entwickeln bietet es sich an von einem bestehenden zu erben und anzupassen. Dabei sollte aber beachtet werden, dass der Style auch auf jeder Zielplattform verfügbar ist. Um verschiedene Android-Versionen zu unterstützen bietet sich folgende Struktur an:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;values/styles.xml&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;resources&amp;gt;&lt;br /&gt;
    &amp;lt;style name=&amp;quot;AppBaseTheme&amp;quot; parent=&amp;quot;android:Theme.Light&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;!-- Für alle Geräte unter Api-11 --&amp;gt;&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Application theme. --&amp;gt;&lt;br /&gt;
    &amp;lt;style name=&amp;quot;AppTheme&amp;quot; parent=&amp;quot;AppBaseTheme&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;!-- Alle API-Unabhängigen Eigenschaften --&amp;gt;&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/resources&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;values-v11/styles.xml&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;style name=&amp;quot;AppBaseTheme&amp;quot; parent=&amp;quot;android:Theme.Holo.Light&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;!-- API 11 theme anpassungen --&amp;gt;&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die App selber nutzt dann den Style &#039;&#039;&#039;AppTheme&#039;&#039;&#039; als eigentliches Theme und die Plattform entscheidet dann, welche Definition des Styles &#039;&#039;&#039;AppBaseTheme&#039;&#039;&#039; greift.&lt;br /&gt;
&lt;br /&gt;
Alternativ bieten Bibliotheken wie [http://actionbarsherlock.com/ ActionbarSherlock] oder das support-package-v7 Themes an, die Rückwärtskompatibel sind. Dann benötigt man keine Unterscheidung der Versionen.&lt;br /&gt;
&lt;br /&gt;
=Eigenschaft von Theme übernehmen=&lt;br /&gt;
Auch hier zunächst ein Beispiel: wir haben einen View mit transparentem Hintergrund und schwarzer Schrift. Würden man nun ein Theme einstellen welches einen schwarzem Hintergrund definiert, dann könnte man den Text nicht mehr lesen. Aus diesem Grund ist es möglich Werte des Styles an Werte des Themes zu binden. Da ein Theme mit schwarzem Hintergrund keine schwarze Schriftfarbe verwenden würde, sollten wir die Textfarbe des Themes für unseren Style übernehmen. Dazu müssen wir einfach nur das gewünschte Attribut angeben und nutzen dazu folgendes Schema: &#039;&#039;&#039;?android:attr/[Name]&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Nun wenden wir dies auf das obigen Style an und das ganze schaut dann wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;style name=&amp;quot;NameDesStyles&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;?android:background&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Video-Tutorial=&lt;br /&gt;
Zu diesem Thema habe ich auch ein Videotutorial gemacht. Dieses findet Ihr hier:[http://www.youtube.com/watch?v=yp1vb_w6LTs Android - Android XML Style + Theme]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Android]]&lt;/div&gt;</summary>
		<author><name>Tomate Salat</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Styles_und_Themes&amp;diff=5452</id>
		<title>Styles und Themes</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Styles_und_Themes&amp;diff=5452"/>
		<updated>2013-08-21T09:03:06Z</updated>

		<summary type="html">&lt;p&gt;Tomate Salat: /* Themes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Styles=&lt;br /&gt;
Diese ermöglichen es uns beliebig viele Attribute zusammenzufassen. Wird ein solcher Style einem View zugewiesen, so übernimmt dieser die angegebenen Werte. Um Redundanzen zu vermeiden können Styles aufeinander aufbauen und Werte hinzufügen oder überschreiben.&lt;br /&gt;
&lt;br /&gt;
Somit helfen uns Styles den Code übersichtlich zu halten und nehmen uns Wartungsaufwand ab. Da ein Style mehreren Elementen zugewiesen werden kann, können wir an einer zentralen Stelle direkten Einfluss auf betroffene Elemente ausüben.&lt;br /&gt;
&lt;br /&gt;
==Das Grundgerüst==&lt;br /&gt;
Styles werden in einer XML-Datei angelegt. Der Name der Datei kann dabei beliebig gewählt werden, oft wird diese aber einfach styles.xml genannt. Diese XML-Datei muss sich im Resourcen-Ordner values befinden. &lt;br /&gt;
&lt;br /&gt;
Eine einfache xml könnte dann z.B. so aussehen:&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;resources&amp;gt;&lt;br /&gt;
    &amp;lt;style name=&amp;quot;NameDesStyles&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Hier werden die Attribute angelegt --&amp;gt;&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/resources&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der style-Tag kann beliebg viele item-Tags aufnehmen. Die items besitzen ein Attribut &#039;&#039;&#039;name&#039;&#039;&#039; welches das Zielattribut definiert. Der zugehörige Wert wird dann als Inhalt in den Tag geschrieben. Hier ein Beispiel wie man einen roten Hintergrund definieren kann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;style name=&amp;quot;NameDesStyles&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#FF0000&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zuweisung==&lt;br /&gt;
Ausgehend von dem obigen Beispiel wollen wir diesen Style nun einem TextView zuweisen. Dazu nutzen wir das Attribut &#039;&#039;&#039;style&#039;&#039;&#039; und geben dort folgendes an: &#039;&#039;&#039;@style/NameDesStyles&#039;&#039;&#039;. Nachfolgend ist ein Auszug einer möglichen Layout-Datei zu sehen, die diesen Style verwendet:&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;TextView &lt;br /&gt;
    style=&amp;quot;@style/NameDesStyles&amp;quot;&lt;br /&gt;
    android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
    android:text=&amp;quot;Foo Bar&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
Im Layout selber haben wir dann letztendlich noch die Möglichkeit die Werte des angegebenen Styles zu überschreiben. Wenn wir also folgendes Attribut setzen würden: &#039;&#039;&#039;android:background=&#039;#0000FF&#039;&#039;&#039;&#039;, so wäre der Hintergrund blau und nicht rot.&lt;br /&gt;
&lt;br /&gt;
==Vererbung==&lt;br /&gt;
Dies wollen wir an einem Beispiel verdeutlichen. Angenommen wir haben einen Style welcher das Aussehen eines Eingabefeldes definiert. Zusätzlich brauchen wir ein definiertes Aussehen für das selbe Eingabefeld wenn es gesperrt ist - in diesem Fall soll einfach der Hintergrund Grau sein aber alles andere bleibt gleich. Ohne Vererbung müssten man dies mit zwei Style-Definitionen lösen:&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;style name=&amp;quot;Eingabe&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_width&amp;quot;&amp;gt;match_parent&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_height&amp;quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#00FF00&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style name=&amp;quot;EingabeGesperrt&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_width&amp;quot;&amp;gt;match_parent&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_height&amp;quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#CCCCCC&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
Schon in diesem kurzen Beispiel haben wir einiges an Redundanzen. Zusätzlich wird so ein  erhöhter Pflegeaufwand + eine potentielle Fehlerquelle geschaffen - denn Änderungen die den Style &#039;&#039;Eingabe&#039;&#039; betreffen, müssen auch im Style &#039;&#039;EingabeGesperrt&#039;&#039; nachgezogen werden. &lt;br /&gt;
&lt;br /&gt;
Deswegen gibt es eine elegantere Methode wie wir dieses Problem lösen können. Nämlich mithilfe von Vererbung. Dazu gibt es zwei Techniken wie man die Vererbung bewerkstelligen kann. &lt;br /&gt;
&lt;br /&gt;
===Vererbung: Parent===&lt;br /&gt;
Die erste Möglichkeit wie man Vererbung angehen kann ist über das Attribut &#039;&#039;&#039;parent&#039;&#039;&#039; des style-Tags. Dort gibt man einfach den zu erbenden Style an und die Werte werden entsprechend übernommen. Als Angabe ist sowohl nur der Name des Stils (Eingabe) als auch die &amp;quot;Resourcenschreibweise&amp;quot; (@style/Eingabe) gültig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;style name=&amp;quot;Eingabe&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_width&amp;quot;&amp;gt;match_parent&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_height&amp;quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#00FF00&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style name=&amp;quot;EingabeGesperrt&amp;quot; parent=&amp;quot;Eingabe&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#CCCCCC&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Vererbung: Punktnotation===&lt;br /&gt;
Die zweite Möglichkeit wäre dann die Punktnotation. Dabei wird nicht das parent-Attribut genutzt, sondern eine spezielle Form der Namensgebung. Zuerst wird der Name des zu erbenden Stils angegeben, danach folgt ein Punkt. Als nächstes schreibt man den eigentlichen Namen des Stils direkt dahinter. In unserem Fall also &#039;&#039;Eingabe.Gesperrt&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;style name=&amp;quot;Eingabe&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_width&amp;quot;&amp;gt;match_parent&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_height&amp;quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#00FF00&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style name=&amp;quot;Eingabe.Gesperrt&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#CCCCCC&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch von diesem Stil (Eingabe.Gesperrt) kann dann wieder geerbt werden. Eine weitere Vererbung könnte dann z.B. so aussehen: &#039;&#039;Eingabe.Gesperrt.FooBar&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=Themes=&lt;br /&gt;
Über das Theme kann die App den Bedürfnissen/Vorgaben angepasst werden. Ein Theme ist letztendlich nichts anderes wie ein Style der ganz vielen Eigenschaften vorgibt. Um ein eigenes Theme zu entwickeln bietet es sich an von einem bestehenden zu erben und anzupassen. Dabei sollte aber beachtet werden, dass der Style auch auf jeder Zielplattform verfügbar ist. Um verschiedene Android-Versionen zu unterstützen bietet sich folgende Struktur an:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;values/styles.xml&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;resources&amp;gt;&lt;br /&gt;
    &amp;lt;style name=&amp;quot;AppBaseTheme&amp;quot; parent=&amp;quot;android:Theme.Light&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;!-- Für alle Geräte unter Api-11 --&amp;gt;&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Application theme. --&amp;gt;&lt;br /&gt;
    &amp;lt;style name=&amp;quot;AppTheme&amp;quot; parent=&amp;quot;AppBaseTheme&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;!-- Alle API-Unabhängigen Eigenschaften --&amp;gt;&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/resources&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;values-v11/styles.xml&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;style name=&amp;quot;AppBaseTheme&amp;quot; parent=&amp;quot;android:Theme.Holo.Light&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;!-- API 11 theme anpassungen --&amp;gt;&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die App selber nutzt dann den Style &#039;&#039;&#039;AppTheme&#039;&#039;&#039; als eigentliches Theme und die Plattform entscheidet dann, welche Definition des Styles &#039;&#039;&#039;AppBaseTheme&#039;&#039;&#039; greift.&lt;br /&gt;
&lt;br /&gt;
Alternativ bieten Bibliotheken wie [http://actionbarsherlock.com/ ActionbarSherlock] oder das support-package-v7 Themes an, die Rückwärtskompatibel sind. Dann benötigt man keine Unterscheidung der Versionen.&lt;br /&gt;
&lt;br /&gt;
=Eigenschaft von Theme übernehmen=&lt;br /&gt;
Auch hier zunächst ein Beispiel: wir haben einen View mit transparentem Hintergrund und schwarzer Schrift. Würden wir nun ein Theme einstellen mit schwarzem Hintergrund, dann könnte man den Text nicht mehr lesen. Aus diesem Grund ist es möglich Werte des Styles an Werte des Themes zu binden. Da ein Theme mit schwarzem Hintergrund keine schwarze Schriftfarbe verwenden würde, sollten wir die Textfarbe des Themes für unseren Style übernehmen. Dazu müssen wir einfach nur das gewünschte Attribut angeben und nutzen dazu folgendes Schema: &#039;&#039;&#039;?android:attr/[Name]&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Nun wollen wir das mal auf unseren obigen Style anwenden und dieser schaut dann wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;style name=&amp;quot;NameDesStyles&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;?android:background&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Video-Tutorial=&lt;br /&gt;
Zu diesem Thema habe ich auch ein Videotutorial gemacht. Dieses findet Ihr hier:[http://www.youtube.com/watch?v=yp1vb_w6LTs Android - Android XML Style + Theme]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Android]]&lt;/div&gt;</summary>
		<author><name>Tomate Salat</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Styles_und_Themes&amp;diff=5451</id>
		<title>Styles und Themes</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Styles_und_Themes&amp;diff=5451"/>
		<updated>2013-08-21T09:00:25Z</updated>

		<summary type="html">&lt;p&gt;Tomate Salat: /* Styles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Styles=&lt;br /&gt;
Diese ermöglichen es uns beliebig viele Attribute zusammenzufassen. Wird ein solcher Style einem View zugewiesen, so übernimmt dieser die angegebenen Werte. Um Redundanzen zu vermeiden können Styles aufeinander aufbauen und Werte hinzufügen oder überschreiben.&lt;br /&gt;
&lt;br /&gt;
Somit helfen uns Styles den Code übersichtlich zu halten und nehmen uns Wartungsaufwand ab. Da ein Style mehreren Elementen zugewiesen werden kann, können wir an einer zentralen Stelle direkten Einfluss auf betroffene Elemente ausüben.&lt;br /&gt;
&lt;br /&gt;
==Das Grundgerüst==&lt;br /&gt;
Styles werden in einer XML-Datei angelegt. Der Name der Datei kann dabei beliebig gewählt werden, oft wird diese aber einfach styles.xml genannt. Diese XML-Datei muss sich im Resourcen-Ordner values befinden. &lt;br /&gt;
&lt;br /&gt;
Eine einfache xml könnte dann z.B. so aussehen:&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;resources&amp;gt;&lt;br /&gt;
    &amp;lt;style name=&amp;quot;NameDesStyles&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Hier werden die Attribute angelegt --&amp;gt;&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/resources&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der style-Tag kann beliebg viele item-Tags aufnehmen. Die items besitzen ein Attribut &#039;&#039;&#039;name&#039;&#039;&#039; welches das Zielattribut definiert. Der zugehörige Wert wird dann als Inhalt in den Tag geschrieben. Hier ein Beispiel wie man einen roten Hintergrund definieren kann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;style name=&amp;quot;NameDesStyles&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#FF0000&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zuweisung==&lt;br /&gt;
Ausgehend von dem obigen Beispiel wollen wir diesen Style nun einem TextView zuweisen. Dazu nutzen wir das Attribut &#039;&#039;&#039;style&#039;&#039;&#039; und geben dort folgendes an: &#039;&#039;&#039;@style/NameDesStyles&#039;&#039;&#039;. Nachfolgend ist ein Auszug einer möglichen Layout-Datei zu sehen, die diesen Style verwendet:&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;TextView &lt;br /&gt;
    style=&amp;quot;@style/NameDesStyles&amp;quot;&lt;br /&gt;
    android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
    android:text=&amp;quot;Foo Bar&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
Im Layout selber haben wir dann letztendlich noch die Möglichkeit die Werte des angegebenen Styles zu überschreiben. Wenn wir also folgendes Attribut setzen würden: &#039;&#039;&#039;android:background=&#039;#0000FF&#039;&#039;&#039;&#039;, so wäre der Hintergrund blau und nicht rot.&lt;br /&gt;
&lt;br /&gt;
==Vererbung==&lt;br /&gt;
Dies wollen wir an einem Beispiel verdeutlichen. Angenommen wir haben einen Style welcher das Aussehen eines Eingabefeldes definiert. Zusätzlich brauchen wir ein definiertes Aussehen für das selbe Eingabefeld wenn es gesperrt ist - in diesem Fall soll einfach der Hintergrund Grau sein aber alles andere bleibt gleich. Ohne Vererbung müssten man dies mit zwei Style-Definitionen lösen:&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;style name=&amp;quot;Eingabe&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_width&amp;quot;&amp;gt;match_parent&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_height&amp;quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#00FF00&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style name=&amp;quot;EingabeGesperrt&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_width&amp;quot;&amp;gt;match_parent&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_height&amp;quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#CCCCCC&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
Schon in diesem kurzen Beispiel haben wir einiges an Redundanzen. Zusätzlich wird so ein  erhöhter Pflegeaufwand + eine potentielle Fehlerquelle geschaffen - denn Änderungen die den Style &#039;&#039;Eingabe&#039;&#039; betreffen, müssen auch im Style &#039;&#039;EingabeGesperrt&#039;&#039; nachgezogen werden. &lt;br /&gt;
&lt;br /&gt;
Deswegen gibt es eine elegantere Methode wie wir dieses Problem lösen können. Nämlich mithilfe von Vererbung. Dazu gibt es zwei Techniken wie man die Vererbung bewerkstelligen kann. &lt;br /&gt;
&lt;br /&gt;
===Vererbung: Parent===&lt;br /&gt;
Die erste Möglichkeit wie man Vererbung angehen kann ist über das Attribut &#039;&#039;&#039;parent&#039;&#039;&#039; des style-Tags. Dort gibt man einfach den zu erbenden Style an und die Werte werden entsprechend übernommen. Als Angabe ist sowohl nur der Name des Stils (Eingabe) als auch die &amp;quot;Resourcenschreibweise&amp;quot; (@style/Eingabe) gültig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;style name=&amp;quot;Eingabe&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_width&amp;quot;&amp;gt;match_parent&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_height&amp;quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#00FF00&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style name=&amp;quot;EingabeGesperrt&amp;quot; parent=&amp;quot;Eingabe&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#CCCCCC&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Vererbung: Punktnotation===&lt;br /&gt;
Die zweite Möglichkeit wäre dann die Punktnotation. Dabei wird nicht das parent-Attribut genutzt, sondern eine spezielle Form der Namensgebung. Zuerst wird der Name des zu erbenden Stils angegeben, danach folgt ein Punkt. Als nächstes schreibt man den eigentlichen Namen des Stils direkt dahinter. In unserem Fall also &#039;&#039;Eingabe.Gesperrt&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;style name=&amp;quot;Eingabe&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_width&amp;quot;&amp;gt;match_parent&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_height&amp;quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#00FF00&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style name=&amp;quot;Eingabe.Gesperrt&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#CCCCCC&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch von diesem Stil (Eingabe.Gesperrt) kann dann wieder geerbt werden. Eine weitere Vererbung könnte dann z.B. so aussehen: &#039;&#039;Eingabe.Gesperrt.FooBar&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=Themes=&lt;br /&gt;
Über das Theme kann die eigene App den eigenen Bedürfnissen angepasst werden. Ein Theme ist letztendlich nichts anderes wie ein Styles mit ganz vielen Eigenschaften. Um ein eigenes Theme zu entwickeln bietet es sich demnach an von einem bestehenden zu erben und anzupassen. Dabei sollte aber beachtet werden, dass der Style auch auf jeder Zielplattform verfügbar ist. Um verschiedene Android-Versionen zu unterstützen bietet sich folgende Struktur an:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;values/styles.xml&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;resources&amp;gt;&lt;br /&gt;
    &amp;lt;style name=&amp;quot;AppBaseTheme&amp;quot; parent=&amp;quot;android:Theme.Light&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;!-- Für alle Geräte unter Api-11 --&amp;gt;&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Application theme. --&amp;gt;&lt;br /&gt;
    &amp;lt;style name=&amp;quot;AppTheme&amp;quot; parent=&amp;quot;AppBaseTheme&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;!-- Alle API-Unabhängigen Eigenschaften --&amp;gt;&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/resources&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;values-v11/styles.xml&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;style name=&amp;quot;AppBaseTheme&amp;quot; parent=&amp;quot;android:Theme.Holo.Light&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;!-- API 11 theme anpassungen --&amp;gt;&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die App selber nutzt dann den Style &#039;&#039;&#039;AppTheme&#039;&#039;&#039; als eigentliches Theme und die Plattform entscheidet dann, welche Definition des Styles &#039;&#039;&#039;AppBaseTheme&#039;&#039;&#039; greift.&lt;br /&gt;
&lt;br /&gt;
Alternativ bieten Bibliotheken wie [http://actionbarsherlock.com/ ActionbarSherlock] oder das support-package-v7 Themes an, die Rückwärtskompatibel sind. Dann benötigt man keine Unterscheidung der Versionen.&lt;br /&gt;
&lt;br /&gt;
=Eigenschaft von Theme übernehmen=&lt;br /&gt;
Auch hier zunächst ein Beispiel: wir haben einen View mit transparentem Hintergrund und schwarzer Schrift. Würden wir nun ein Theme einstellen mit schwarzem Hintergrund, dann könnte man den Text nicht mehr lesen. Aus diesem Grund ist es möglich Werte des Styles an Werte des Themes zu binden. Da ein Theme mit schwarzem Hintergrund keine schwarze Schriftfarbe verwenden würde, sollten wir die Textfarbe des Themes für unseren Style übernehmen. Dazu müssen wir einfach nur das gewünschte Attribut angeben und nutzen dazu folgendes Schema: &#039;&#039;&#039;?android:attr/[Name]&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Nun wollen wir das mal auf unseren obigen Style anwenden und dieser schaut dann wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;style name=&amp;quot;NameDesStyles&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;?android:background&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Video-Tutorial=&lt;br /&gt;
Zu diesem Thema habe ich auch ein Videotutorial gemacht. Dieses findet Ihr hier:[http://www.youtube.com/watch?v=yp1vb_w6LTs Android - Android XML Style + Theme]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Android]]&lt;/div&gt;</summary>
		<author><name>Tomate Salat</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Ftp-Client_Tutorial&amp;diff=5439</id>
		<title>Ftp-Client Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Ftp-Client_Tutorial&amp;diff=5439"/>
		<updated>2013-08-17T20:43:33Z</updated>

		<summary type="html">&lt;p&gt;Tomate Salat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Java Ftp  Client Tutorial =&lt;br /&gt;
Mache mich mal dran ein Ftp Tutorial zu schreiben. In unserem Tutorial erstellen wir einen FTP Server. Wir verwenden für Das Tutorial die mitgelieferte Klasse aus der neusten Java Version. Für dieses Tutorial solltest du die Grundlagen von Java kennen. Auch empfehle ich eine IDE zu benutzen, die über einen Designer verfügt. &lt;br /&gt;
&lt;br /&gt;
== Importe ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
import java.awt.List;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.io.File;&lt;br /&gt;
import java.io.FileInputStream;&lt;br /&gt;
import java.io.FileNotFoundException;&lt;br /&gt;
import java.io.FileOutputStream;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.net.InetAddress;&lt;br /&gt;
import java.net.InetSocketAddress;&lt;br /&gt;
import java.net.SocketAddress;&lt;br /&gt;
import java.net.UnknownHostException;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.Iterator;&lt;br /&gt;
import java.util.logging.Level;&lt;br /&gt;
import java.util.logging.Logger;&lt;br /&gt;
import javax.swing.DefaultListModel;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JCheckBox;&lt;br /&gt;
import javax.swing.JDialog;&lt;br /&gt;
import javax.swing.JFileChooser;&lt;br /&gt;
import javax.swing.JTextField;&lt;br /&gt;
import javax.swing.UIManager;&lt;br /&gt;
import javax.swing.UnsupportedLookAndFeelException;&lt;br /&gt;
import javax.swing.tree.DefaultTreeModel;&lt;br /&gt;
import javax.swing.tree.MutableTreeNode;&lt;br /&gt;
import sun.net.ftp.FtpClient;&lt;br /&gt;
import sun.net.ftp.FtpDirEntry;&lt;br /&gt;
import sun.net.ftp.FtpProtocolException;&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Das Frame ==&lt;br /&gt;
Ich habe bei mir das Frame mit einer IDE Geschrieben die einen Desingner Verwendet, aber erfahrene Java Programmierer Sollten dies&lt;br /&gt;
auch in Wenigen Minuten mit einer IDE die Ohne Designer Arbeitet hinbekommen.&lt;br /&gt;
In dem Bild seht Ihr wie ich das Frame Aufgebaut habe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Bild22.PNG|mini|hochkant=1.8|Das Frame]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wie man Seht befinden sich auf dem Form 3 Listen und ein Menüstrip mit 2 Menüs, 3 textfelder, 1 Passwort Feld und ein Button. Ich habe folgende Listen Modelle den listen zugeordnet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Liste1 (DefaultListModel) mod (diese list zeigt die verzeichnisse an und Verfügt über ein Click ActionEvent&lt;br /&gt;
* Liste2 (DefaultListModel) Fmod (diese liste zeigt die Dateien An, aus dem Aktuellen FTP Verzeichniss.&lt;br /&gt;
* Liste3 (DefaultListModel) Cmod (diese liste dient als Interne Console)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Textfelder Werden folgt Verwendet&lt;br /&gt;
&lt;br /&gt;
* TextFeld1 Hier wird der Server Angegeben&lt;br /&gt;
* Textfeld2 Hier wird der Port Angegeben (Achtung der Port Muss Angegeben werden, bei vielen Servern ist der Standardt Port 21)&lt;br /&gt;
* Textfeld3 Hier Kommt der Benutzername Rein&lt;br /&gt;
* PasswordFeld1 Das Passwort.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Menü ist Aufgebaut in&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* File&lt;br /&gt;
&lt;br /&gt;
** Verbinden&lt;br /&gt;
** Trenen&lt;br /&gt;
** Daten Uploaden&lt;br /&gt;
** Daten Downloaden&lt;br /&gt;
** Daten Löschen&lt;br /&gt;
** Verzeichniss Löschen&lt;br /&gt;
** Verzeichniss Erstellen&lt;br /&gt;
&lt;br /&gt;
* Edit&lt;br /&gt;
** Übergeordneter Ordner&lt;br /&gt;
&lt;br /&gt;
== Die Codes ==&lt;br /&gt;
&lt;br /&gt;
=== Variabeln in der Klasse ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
//Suchen nach&lt;br /&gt;
public class main extends javax.swing.JFrame {&lt;br /&gt;
//hier diese Einträge Darunter Setzen&lt;br /&gt;
	public DefaultListModel mod;&lt;br /&gt;
	public FtpClient ftp;&lt;br /&gt;
	public FtpDirEntry direlement;&lt;br /&gt;
	public DefaultListModel Fmod;&lt;br /&gt;
	public DefaultListModel Cmod;&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Listen Initialisieren ===&lt;br /&gt;
Ich habe So die Listen Initalisiert&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
public main() {&lt;br /&gt;
initComponents();&lt;br /&gt;
// Hinzufügen&lt;br /&gt;
mod = new DefaultListModel();&lt;br /&gt;
jList1.setModel(mod);&lt;br /&gt;
Fmod = new DefaultListModel();&lt;br /&gt;
jList2.setModel(Fmod);&lt;br /&gt;
Cmod = new DefaultListModel();&lt;br /&gt;
jList3.setModel(Cmod);  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Das Verbinden Action Event ===&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
// Elemente aus Modellen Löschen&lt;br /&gt;
        	Fmod.removeAllElements();&lt;br /&gt;
        	mod.removeAllElements();&lt;br /&gt;
        	// deklariren&lt;br /&gt;
        	// Deklarieren des List Models&lt;br /&gt;
        	mod = (DefaultListModel) jList1.getModel();&lt;br /&gt;
        	// holen des Inhaltes aus der Server Text Box&lt;br /&gt;
        	String servUrl=jTextField1.getText();&lt;br /&gt;
        	// holen des Inhaltes aus der Port Text Box&lt;br /&gt;
        	int port=Integer.parseInt(jTextField2.getText());&lt;br /&gt;
        	// Internet Adresse umwandln in IP&lt;br /&gt;
        	String ipAdr = InetAddress.getByName(servUrl).getHostAddress();&lt;br /&gt;
        	// Consolen Anzeige&lt;br /&gt;
        	Cmod.addElement(&amp;quot;Encode Adresse &amp;quot; + servUrl + &amp;quot; in IP Adresse &amp;quot; + ipAdr);&lt;br /&gt;
        	System.out.println(&amp;quot;Endode Addresse in IP: &amp;quot; + ipAdr);   	&lt;br /&gt;
        	// Socket Addresse Deklarieren&lt;br /&gt;
        	SocketAddress sAdr = new InetSocketAddress(ipAdr,port);&lt;br /&gt;
        	// Deklarieren des ftpClients&lt;br /&gt;
        	ftp =  FtpClient.create();&lt;br /&gt;
 &lt;br /&gt;
        	// Benutzername Festelgen&lt;br /&gt;
        	String userName = jTextField3.getText();&lt;br /&gt;
 &lt;br /&gt;
        	//Verbindung Aufbauen&lt;br /&gt;
        	ftp.connect(sAdr);&lt;br /&gt;
        	//Wen Verbindung Besteht, einlogen&lt;br /&gt;
        	if(ftp.isConnected()==true){&lt;br /&gt;
            	// Console giebt aus das wir uns erfolgreich verbunden haben&lt;br /&gt;
            	Cmod.addElement(&amp;quot;Erfolgreich mit Server &amp;quot; + ipAdr + &amp;quot; Verbunden&amp;quot;);&lt;br /&gt;
            	System.out.println(&amp;quot;Erfolgreich mit Server &amp;quot; + ipAdr + &amp;quot; Verbunden&amp;quot;);&lt;br /&gt;
             	// Wir lassen Uns die Begrüßungsnachricht ausgeben&lt;br /&gt;
            	System.out.print(ftp.getWelcomeMsg());&lt;br /&gt;
            	Cmod.addElement(ftp.getWelcomeMsg());&lt;br /&gt;
            	// Hier Loggen wir uns in den Server ein&lt;br /&gt;
            	ftp.login(userName, jPasswordField1.getPassword());&lt;br /&gt;
            	// Wenn wir Eingelogt Sind &lt;br /&gt;
            	if(ftp.isLoggedIn()==true){&lt;br /&gt;
                	// Wir Bekommen eine nachricht vom Server das wir uns Erfolgreich Eingelogt sind&lt;br /&gt;
                	Cmod.addElement(&amp;quot;User &amp;quot; + userName + &amp;quot; Access Garanted&amp;quot;);&lt;br /&gt;
                	System.out.println(&amp;quot;User: &amp;quot; + userName + &amp;quot; ist erfolgreich im Server eingelogt&amp;quot;);&lt;br /&gt;
                	// Nun deklarieren wir unser Aktuelles Verzeichniss&lt;br /&gt;
                	String dir = ftp.getWorkingDirectory();&lt;br /&gt;
                	// Nun lesen wir die Verzeichnisse Aus&lt;br /&gt;
                	Iterator&amp;lt;FtpDirEntry&amp;gt; dirlist = ftp.listFiles(dir);&lt;br /&gt;
                	// Listview Model leeren&lt;br /&gt;
                	mod.removeAllElements();&lt;br /&gt;
                	// hinzufügen der neune Verzeichnisse&lt;br /&gt;
                	while(dirlist.hasNext()){&lt;br /&gt;
                   	// elemnt in die DirEntry hinzufügen&lt;br /&gt;
                   	direlement = dirlist.next();&lt;br /&gt;
                   	// Prüfen ob es ein Verzeichniss ist&lt;br /&gt;
                   	if(direlement.getType()==FtpDirEntry.Type.DIR){&lt;br /&gt;
                       	// in Model Hinzufügen&lt;br /&gt;
                       	mod.addElement(direlement.getName());&lt;br /&gt;
                   	}&lt;br /&gt;
                   	if(direlement.getType()==FtpDirEntry.Type.FILE){&lt;br /&gt;
                       	Fmod.addElement(direlement.getName());&lt;br /&gt;
                   	}&lt;br /&gt;
                	}&lt;br /&gt;
            	}&lt;br /&gt;
        	}&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    	} catch (UnknownHostException ex) {&lt;br /&gt;
        	Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;
    	} catch (FtpProtocolException ex) {&lt;br /&gt;
        	Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;
    	} catch (IOException ex) {&lt;br /&gt;
        	Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;
    	}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Das Trennen Action Event ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
        try {&lt;br /&gt;
            // TODO add your handling code here:&lt;br /&gt;
            ftp.close();&lt;br /&gt;
        } catch (IOException ex) {&lt;br /&gt;
            Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Das listview ClickAction Event ===&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
// List Model Deklarieren&lt;br /&gt;
    	mod = (DefaultListModel) jList1.getModel();&lt;br /&gt;
    	// Prüfen ob der Client noch Verbunden ist &lt;br /&gt;
    	if(ftp.isConnected()==true){&lt;br /&gt;
        	//prüfen ob wir noch eingelogt sind&lt;br /&gt;
        	if(ftp.isLoggedIn()==true){&lt;br /&gt;
            	try {&lt;br /&gt;
                	//Verzeichniss Wechselen&lt;br /&gt;
                	ftp.changeDirectory(jList1.getSelectedValue().toString());&lt;br /&gt;
                	// System giebt aus das das Verzeichniss gewechselt wurde&lt;br /&gt;
                	Cmod.addElement(&amp;quot;Verzeichniss Gewechelt nach: &amp;quot; + ftp.getWorkingDirectory());&lt;br /&gt;
                	System.out.print(&amp;quot;Verzeichniss Gewechselt nach :&amp;quot; + ftp.getWorkingDirectory());&lt;br /&gt;
                	// wir Listen die Files in dem Neune Verzeichniss&lt;br /&gt;
                	Iterator&amp;lt;FtpDirEntry&amp;gt; dirs = ftp.listFiles(ftp.getWorkingDirectory());&lt;br /&gt;
                	// wir Löschen die Alten List items&lt;br /&gt;
                	mod.removeAllElements();&lt;br /&gt;
                	Fmod.removeAllElements();&lt;br /&gt;
                	// Wir Tragen die Verzeichniss ein&lt;br /&gt;
                	while(dirs.hasNext()){&lt;br /&gt;
                    	// wir Deklarieren das Element&lt;br /&gt;
                    	direlement=dirs.next();&lt;br /&gt;
                    	// Wir Prüfen ob das Element ein Verzeichniss ist&lt;br /&gt;
                    	if(direlement.getType()==FtpDirEntry.Type.DIR){&lt;br /&gt;
                        	// wir fügen den Verzeichniss namen in die Liste ein&lt;br /&gt;
                        	mod.addElement(direlement.getName());&lt;br /&gt;
                    	}&lt;br /&gt;
                    	else if(direlement.getType()==FtpDirEntry.Type.FILE){&lt;br /&gt;
                        	Fmod.addElement(direlement.getName());&lt;br /&gt;
                    	}&lt;br /&gt;
                	}&lt;br /&gt;
 &lt;br /&gt;
            	} catch (FtpProtocolException ex) {&lt;br /&gt;
                	Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;
            	} catch (IOException ex) {&lt;br /&gt;
                	Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;
            	}&lt;br /&gt;
        	}&lt;br /&gt;
    	}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== das Multi Download ActionEvent ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
// Wir Deklarieren den FileChooser&lt;br /&gt;
    	JFileChooser sfd = new JFileChooser();&lt;br /&gt;
    	// Wir schreiben in das Datenfeld Bitte Wählen, da wir nur das Verzeichniss Benötigen&lt;br /&gt;
    	sfd.setSelectedFile(new File(&amp;quot;Bitte Wählen&amp;quot;));&lt;br /&gt;
    	//Wenn Ok Gedrückt Wurde&lt;br /&gt;
    	if(sfd.showSaveDialog(sfd) == JFileChooser.APPROVE_OPTION){&lt;br /&gt;
        	// list erstellen mit Unseren Ausgewählten Daten&lt;br /&gt;
        	Object[] flist = jList2.getSelectedValues();&lt;br /&gt;
        	for(int i = 0; i &amp;lt; flist.length; i++){&lt;br /&gt;
 &lt;br /&gt;
            	try {&lt;br /&gt;
                	// wir geben Aus welche File wir Downloaden möchten&lt;br /&gt;
                	Cmod.addElement(&amp;quot;Get file &amp;quot; + flist[i] + &amp;quot; from Curent Directory &amp;quot; + ftp.getWorkingDirectory());&lt;br /&gt;
                	System.out.println(&amp;quot;Get file &amp;quot; + flist[i] + &amp;quot; from Curent Directory &amp;quot; + ftp.getWorkingDirectory());&lt;br /&gt;
                	// neue File Erstellen&lt;br /&gt;
                	File f = new File(sfd.getSelectedFile().getParent() + &amp;quot;/&amp;quot; + flist[i]);&lt;br /&gt;
                	// Output Stream Erstellen&lt;br /&gt;
                	FileOutputStream os = new FileOutputStream(f);&lt;br /&gt;
                	// Datei Herunterladen&lt;br /&gt;
                	ftp.getFile(ftp.getWorkingDirectory() + &amp;quot;/&amp;quot; +flist[i], os);&lt;br /&gt;
                	// Server Antwortet auf unsere Anfrage&lt;br /&gt;
                	Cmod.addElement(&amp;quot;Server: &amp;quot; + ftp.getLastResponseString());&lt;br /&gt;
                	System.out.println(&amp;quot;Server: &amp;quot; + ftp.getLastResponseString());&lt;br /&gt;
            	} catch (FileNotFoundException ex) {&lt;br /&gt;
                	Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;
            	} catch (FtpProtocolException ex) {&lt;br /&gt;
                	Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;
            	} catch (IOException ex) {&lt;br /&gt;
                	Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;
            	}&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
        	}&lt;br /&gt;
        	// Ausgeben Das der Download Beendet wurde&lt;br /&gt;
        	Cmod.addElement(&amp;quot;Download Vorgang Beendet&amp;quot;);&lt;br /&gt;
        	System.out.println(&amp;quot;Download Vorgang Beendet&amp;quot;);&lt;br /&gt;
    	}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Das Multi Upload Action Event ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
//Wir erstellen einen Filechooser zum Wählen der Daten&lt;br /&gt;
        JFileChooser ofd = new JFileChooser();&lt;br /&gt;
        //mehrfach auswahl Aktivieren&lt;br /&gt;
        ofd.setMultiSelectionEnabled(true);&lt;br /&gt;
        // Wenn im Filechooser auf Ok geklickt wird&lt;br /&gt;
        if(ofd.showOpenDialog(ofd)==JFileChooser.APPROVE_OPTION){&lt;br /&gt;
            // Wir Erstellen eine Filelist die unsere Gewählten files Beinhaltet&lt;br /&gt;
            File[] flist = ofd.getSelectedFiles();&lt;br /&gt;
            // Wir laden jede Einzelne File hoch&lt;br /&gt;
            for(int i = 0 ; i&amp;lt;flist.length;i++){&lt;br /&gt;
                try {&lt;br /&gt;
                    // hiier Deklarieren wir die File&lt;br /&gt;
                    File f = flist[i];&lt;br /&gt;
                    // Info für Console&lt;br /&gt;
                    Cmod.addElement(&amp;quot;Put File &amp;quot; + f.getName() + &amp;quot; in to &amp;quot; + ftp.getWorkingDirectory() + &amp;quot; directory&amp;quot;);&lt;br /&gt;
                    System.out.println(&amp;quot;Put File &amp;quot; + f.getName() + &amp;quot; in to &amp;quot; + ftp.getWorkingDirectory() + &amp;quot; directory&amp;quot;);&lt;br /&gt;
                    // Wir erstellen einen Fileinputstream zum Auslesen der Datei&lt;br /&gt;
                    FileInputStream is = new FileInputStream(f);&lt;br /&gt;
                    // Nun wird die Datei ochgeladen&lt;br /&gt;
                    ftp.putFile(ftp.getWorkingDirectory() + &amp;quot;/&amp;quot; + f.getName(), is);&lt;br /&gt;
                    // Console giebt server Nachricht aus&lt;br /&gt;
                    Cmod.addElement(&amp;quot;Server: &amp;quot; +ftp.getLastResponseString());&lt;br /&gt;
                    System.out.println(&amp;quot;Server: &amp;quot; +ftp.getLastResponseString());&lt;br /&gt;
                } catch (FileNotFoundException ex) {&lt;br /&gt;
                    Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;
                } catch (FtpProtocolException ex) {&lt;br /&gt;
                    Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;
                } catch (IOException ex) {&lt;br /&gt;
                    Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;
                }&lt;br /&gt;
 &lt;br /&gt;
            }&lt;br /&gt;
            // Console giebt aus das Übertragung beendet Wurde&lt;br /&gt;
            Cmod.addElement(&amp;quot;Übertragung der Files &amp;quot; + flist.toString() + &amp;quot; Beendet&amp;quot;);&lt;br /&gt;
            System.out.println(&amp;quot;Übertragung der Files &amp;quot; + flist.toString() + &amp;quot; Beendet&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Das Übergerordneter Ordner Event ===&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
// Elemente Entfernen&lt;br /&gt;
            mod.removeAllElements();&lt;br /&gt;
            Fmod.removeAllElements();&lt;br /&gt;
 &lt;br /&gt;
            // FtpDirEntry Deklarieren&lt;br /&gt;
            FtpDirEntry dir;         &lt;br /&gt;
            // Verzeichniss Wechseln&lt;br /&gt;
            ftp.changeToParentDirectory();       &lt;br /&gt;
            // Neues Verzeichniss in Console Ausgeben&lt;br /&gt;
            Cmod.addElement(&amp;quot;Aktuelles Verzeichniss &amp;quot; + ftp.getWorkingDirectory());&lt;br /&gt;
 &lt;br /&gt;
            // Verzeichnisse in eine FtpDirEntry List hinzufügen&lt;br /&gt;
            Iterator&amp;lt;FtpDirEntry&amp;gt; dirlist = ftp.listFiles(ftp.getWorkingDirectory());&lt;br /&gt;
 &lt;br /&gt;
            // Jedes Verzeichniss Ausgeben&lt;br /&gt;
            while(dirlist.hasNext()){&lt;br /&gt;
                // dir elemnt Deklarieren&lt;br /&gt;
                dir=dirlist.next();&lt;br /&gt;
 &lt;br /&gt;
                // ist dir ein Ordner ?&lt;br /&gt;
                if(dir.getType()==FtpDirEntry.Type.DIR){&lt;br /&gt;
                    // wenn ja dan in List 1&lt;br /&gt;
                    mod.addElement(dir.getName());&lt;br /&gt;
                }&lt;br /&gt;
                // Ist dir eine Datei ?&lt;br /&gt;
                if(dir.getType()==FtpDirEntry.Type.FILE){&lt;br /&gt;
                    // wenn ja dan in List 2&lt;br /&gt;
                    Fmod.addElement(dir.getName());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
        } catch (FtpProtocolException ex) {&lt;br /&gt;
            Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;
        } catch (IOException ex) {&lt;br /&gt;
            Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Das Datei Löschen Event ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
try {&lt;br /&gt;
            // TODO add your handling code here:&lt;br /&gt;
 &lt;br /&gt;
            // Wir Schreiben in die Console das Wir die Datei Löschen&lt;br /&gt;
            Cmod.addElement(&amp;quot;Delete File &amp;quot; + ftp.getWorkingDirectory() + &amp;quot;/&amp;quot; + jList2.getSelectedValue().toString());&lt;br /&gt;
            System.out.println(&amp;quot;Delete File &amp;quot; + ftp.getWorkingDirectory() + &amp;quot;/&amp;quot; + jList2.getSelectedValue().toString());&lt;br /&gt;
 &lt;br /&gt;
            // Wir Löschen die Datei&lt;br /&gt;
            ftp.deleteFile(ftp.getWorkingDirectory() + &amp;quot;/&amp;quot; + jList2.getSelectedValue().toString());&lt;br /&gt;
 &lt;br /&gt;
            // Wir Geben die Server Antwort aus&lt;br /&gt;
            Cmod.addElement(&amp;quot;Server: &amp;quot;+ ftp.getLastResponseString());&lt;br /&gt;
            System.out.println(&amp;quot;Server: &amp;quot;+ ftp.getLastResponseString());&lt;br /&gt;
 &lt;br /&gt;
        } catch (FtpProtocolException ex) {&lt;br /&gt;
            Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;
        } catch (IOException ex) {&lt;br /&gt;
            Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Das Verzeichniss Löschen Event ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
try {&lt;br /&gt;
            // TODO add your handling code here:&lt;br /&gt;
                // Wir Schreiben in die Console das Wir das Verzeichniss Löschen&lt;br /&gt;
                Cmod.addElement(&amp;quot;Delete Directory &amp;quot; + ftp.getWorkingDirectory());&lt;br /&gt;
                System.out.println(&amp;quot;Delete Directory &amp;quot; + ftp.getWorkingDirectory());&lt;br /&gt;
 &lt;br /&gt;
                // Wir Löschen Das Verzeichniss&lt;br /&gt;
                ftp.removeDirectory(ftp.getWorkingDirectory());&lt;br /&gt;
 &lt;br /&gt;
                // Wir Geben die Server Antwort aus&lt;br /&gt;
                Cmod.addElement(&amp;quot;Server: &amp;quot;+ ftp.getLastResponseString());&lt;br /&gt;
                System.out.println(&amp;quot;Server: &amp;quot;+ ftp.getLastResponseString());&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
        } catch (FtpProtocolException ex) {&lt;br /&gt;
            Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;
        } catch (IOException ex) {&lt;br /&gt;
            Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Das Verzeichniss Erstellen Event ===&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
// Deklarieren der Elemente&lt;br /&gt;
        JDialog dia = new JDialog();&lt;br /&gt;
        dia.setSize(375, 110);&lt;br /&gt;
        dia.setLayout(null);&lt;br /&gt;
        dia.setTitle(&amp;quot;Neues Verzeichniss anlegen&amp;quot;);&lt;br /&gt;
        JButton b = new JButton(&amp;quot;Erstellen&amp;quot;);&lt;br /&gt;
        final JTextField textfield = new JTextField();&lt;br /&gt;
 &lt;br /&gt;
        // Platzieren der Elemente&lt;br /&gt;
        textfield.setLocation(25, 25);&lt;br /&gt;
        textfield.setSize(200, 20);&lt;br /&gt;
        b.setLocation(235, 25);&lt;br /&gt;
        b.setSize(100,20);&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
        // Füge Controls Hinzu&lt;br /&gt;
        dia.add(textfield);&lt;br /&gt;
        dia.add(b);&lt;br /&gt;
        dia.setVisible(true);&lt;br /&gt;
 &lt;br /&gt;
        // Action Listner auf Button Legen&lt;br /&gt;
        b.addActionListener(new ActionListener(){&lt;br /&gt;
        public void actionPerformed(ActionEvent e){&lt;br /&gt;
            try {&lt;br /&gt;
 &lt;br /&gt;
                // Console Giebt aus das wir ein Verzeichniss Erstellen&lt;br /&gt;
                Cmod.addElement(&amp;quot;Create Dir &amp;quot; + ftp.getWorkingDirectory() + &amp;quot;/&amp;quot; + textfield.getText());&lt;br /&gt;
                System.out.println(&amp;quot;Create Dir &amp;quot; + ftp.getWorkingDirectory() + &amp;quot;/&amp;quot; + textfield.getText());&lt;br /&gt;
 &lt;br /&gt;
                // Wir Erstellen das Verzeichniss&lt;br /&gt;
                ftp.makeDirectory(ftp.getWorkingDirectory() + &amp;quot;/&amp;quot; + textfield.getText());&lt;br /&gt;
 &lt;br /&gt;
                // Wir Geben die System Nachricht aus &lt;br /&gt;
                Cmod.addElement(&amp;quot;Server: &amp;quot;+ ftp.getLastResponseString());&lt;br /&gt;
                System.out.println(&amp;quot;Server: &amp;quot;+ ftp.getLastResponseString());&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
            } catch (FtpProtocolException ex) {&lt;br /&gt;
                Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;
            } catch (IOException ex) {&lt;br /&gt;
                Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;
            }&lt;br /&gt;
 &lt;br /&gt;
        }&lt;br /&gt;
        });&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das war der Letzte Teil des Toturials. Natürlich Könnte man noch X-Funktionen einfügen aber den Spaß überlasse ich euch. Auf Anfrage sende ich auch gerne Die Sourcecodes Zu, einfach im Forum eine PN an Andy16823.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen - Mitwirkende ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.das-java-forum.com/index.php?page=Thread&amp;amp;threadID=14 | Martin] - aus Anderem Forum - hat geholfen&lt;br /&gt;
&lt;br /&gt;
== Änderungen &amp;amp; Hystorie ==&lt;br /&gt;
Ich würde mich freuen wenn man die Bearbeitung kennzeichnet also wie ich &lt;br /&gt;
&lt;br /&gt;
* 17.08.2013 - Bild hinzugefügt - Andy16823&lt;/div&gt;</summary>
		<author><name>Tomate Salat</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Styles_und_Themes&amp;diff=5418</id>
		<title>Styles und Themes</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Styles_und_Themes&amp;diff=5418"/>
		<updated>2013-08-14T19:36:46Z</updated>

		<summary type="html">&lt;p&gt;Tomate Salat: Die Seite wurde neu angelegt: „=Styles= Diese ermöglichen es uns beliebig viele Attribute zusammenzufasse. Wird ein solcher Style einem View zugewiesen, so übernimmt dieser die angegebenen We…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Styles=&lt;br /&gt;
Diese ermöglichen es uns beliebig viele Attribute zusammenzufasse. Wird ein solcher Style einem View zugewiesen, so übernimmt dieser die angegebenen Werte. Um Redundanzen zu vermeiden, können Styles aufeinander aufbauen und somit Werte hinzufügen oder überschreiben.&lt;br /&gt;
&lt;br /&gt;
Somit helfen uns Styles den Code übersichtlich zu halten und nehmen uns Wartungsaufwand ab. Da ein Style mehreren Elementen zugewiesen werden kann, können wir somit an einer zentralen Stelle direkten Einfluss auf betroffene Elemente ausüben.&lt;br /&gt;
&lt;br /&gt;
==Das Grundgerüst==&lt;br /&gt;
Styles werden in einer XML-Datei angelegt. Der Name der Datei kann dabei beliebig gewählt werden, oft wird diese aber einfach styles.xml genannt. Diese XML-Datei muss sich im Resourcen-Ordner values befinden. &lt;br /&gt;
&lt;br /&gt;
Eine einfache xml könnte z.B. so aussehen:&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;resources&amp;gt;&lt;br /&gt;
    &amp;lt;style name=&amp;quot;NameDesStyles&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;!-- Hier werden die Attribute angelegt --&amp;gt;&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/resources&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem style-Tag können jetzt beliebig viele item-Tags verwendet werden. Diese besitzen ein Attribut &#039;&#039;&#039;name&#039;&#039;&#039;, dort wird das Zielattribut angegeben. Den zugehörigen Wert schreibt man dann als Inhalt in den Tag. Hier ein Beispiel wie man einen roten Hintergrund definieren kann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;style name=&amp;quot;NameDesStyles&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#FF0000&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Zuweisung==&lt;br /&gt;
Ausgehend von dem obigen Beispiel wollen wir diesen Style nun einem TextView zuweisen. Dazu nutzen wir das Attribut &#039;&#039;&#039;style&#039;&#039;&#039; und geben dort folgendes an &#039;&#039;&#039;@style/NameDesStyles&#039;&#039;&#039;. Nachfolgend ist ein Auszug einer möglichen Layout-Datei zu sehen, die diesen Style anwendet:&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;TextView &lt;br /&gt;
    style=&amp;quot;@style/NameDesStyles&amp;quot;&lt;br /&gt;
    android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
    android:text=&amp;quot;Foo Bar&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
Im Layout selber haben wir dann nochmals die Möglichkeit die Werte des Styles zu überschreiben. Wenn wir also folgendes Attribut setzen würden: &#039;&#039;&#039;android:background=&#039;#0000FF&#039;&#039;&#039;&#039;, so wäre der Hintergrund blau und nicht rot.&lt;br /&gt;
&lt;br /&gt;
==Vererbung==&lt;br /&gt;
Dies wollen wir an einem Beispiel verdeutlichen. Angenommen wir haben einen Style der das Aussehen eines Eingabefeldes definiert. Zusätzlich brauchen wir ein definiertes Aussehen für das selbe Eingabefeld wenn es gesperrt ist - in diesem Fall soll einfach der Hintergrund Grau sein aber alles andere bleibt gleich. Angenommen wir lösen dies mit zwei Styles:&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;style name=&amp;quot;Eingabe&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_width&amp;quot;&amp;gt;match_parent&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_height&amp;quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#00FF00&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style name=&amp;quot;EingabeGesperrt&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_width&amp;quot;&amp;gt;match_parent&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_height&amp;quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#CCCCCC&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
Schon in diesem kurzen Beispiel haben wir einiges an Redundanzen. Zusätzlich haben wir hier erhöhten Pflegeaufwand und eine potentielle Fehlerquelle - denn Änderungen die den Style &#039;&#039;Eingabe&#039;&#039; betreffen, müssen auch im Style &#039;&#039;EingabeGesperrt&#039;&#039; nachgezogen werden. &lt;br /&gt;
&lt;br /&gt;
Deswegen gibt es eine elegantere Methode wie wir dieses Problem lösen können. Nämlich mit der Vererbung. Dazu gibt es zwei Techniken, wie man die Vererbung bewerkstelligen kann. &lt;br /&gt;
&lt;br /&gt;
===Vererbung: Parent===&lt;br /&gt;
Die erste Möglichkeit, wie man Vererbung angehen kann ist über das Attribut &#039;&#039;&#039;parent&#039;&#039;&#039;. Dazu gibt man dort einfach den zu erbenden Style an. Als Angabe ist sowohl nur der Name des Stils (Eingabe) als auch die &amp;quot;Resourcenschreibweise&amp;quot; (@style/Eingabe) gültig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;style name=&amp;quot;Eingabe&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_width&amp;quot;&amp;gt;match_parent&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_height&amp;quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#00FF00&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style name=&amp;quot;EingabeGesperrt&amp;quot; parent=&amp;quot;Eingabe&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#CCCCCC&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Vererbung: Punktnotation===&lt;br /&gt;
Die zweite Möglichkeit wäre dann die Punktnotation. Dabei wird nicht das parent-Attribut genutzt, sondern eine spezielle Form der Namensgebung. Zuerst wird der Name des zu erbenden Stils angegeben, danach folgt ein Punkt. Als nächstes schreibt man den eigentlichen Namen des Stils direkt dahinter. In unserem Fall also &#039;&#039;Eingabe.Gesperrt&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;style name=&amp;quot;Eingabe&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_width&amp;quot;&amp;gt;match_parent&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:layout_height&amp;quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#00FF00&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style name=&amp;quot;Eingabe.Gesperrt&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;#CCCCCC&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch von diesem Stil (Eingabe.Gesperrt) kann dann wieder geerbt werden. Eine weitere Vererbung könnte dann z.B. so aussehen: &#039;&#039;Eingabe.Gesperrt.FooBar&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Themes=&lt;br /&gt;
Über das Theme kann die eigene App den eigenen Bedürfnissen angepasst werden. Ein Theme ist letztendlich nichts anderes wie ein Styles mit ganz vielen Eigenschaften. Um ein eigenes Theme zu entwickeln bietet es sich demnach an von einem bestehenden zu erben und anzupassen. Dabei sollte aber beachtet werden, dass der Style auch auf jeder Zielplattform verfügbar ist. Um verschiedene Android-Versionen zu unterstützen bietet sich folgende Struktur an:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;values/styles.xml&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;resources&amp;gt;&lt;br /&gt;
    &amp;lt;style name=&amp;quot;AppBaseTheme&amp;quot; parent=&amp;quot;android:Theme.Light&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;!-- Für alle Geräte unter Api-11 --&amp;gt;&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Application theme. --&amp;gt;&lt;br /&gt;
    &amp;lt;style name=&amp;quot;AppTheme&amp;quot; parent=&amp;quot;AppBaseTheme&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;!-- Alle API-Unabhängigen Eigenschaften --&amp;gt;&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/resources&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;values-v11/styles.xml&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;style name=&amp;quot;AppBaseTheme&amp;quot; parent=&amp;quot;android:Theme.Holo.Light&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;!-- API 11 theme anpassungen --&amp;gt;&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die App selber nutzt dann den Style &#039;&#039;&#039;AppTheme&#039;&#039;&#039; als eigentliches Theme und die Plattform entscheidet dann, welche Definition des Styles &#039;&#039;&#039;AppBaseTheme&#039;&#039;&#039; greift.&lt;br /&gt;
&lt;br /&gt;
Alternativ bieten Bibliotheken wie [http://actionbarsherlock.com/ ActionbarSherlock] oder das support-package-v7 Themes an, die Rückwärtskompatibel sind. Dann benötigt man keine Unterscheidung der Versionen.&lt;br /&gt;
&lt;br /&gt;
=Eigenschaft von Theme übernehmen=&lt;br /&gt;
Auch hier zunächst ein Beispiel: wir haben einen View mit transparentem Hintergrund und schwarzer Schrift. Würden wir nun ein Theme einstellen mit schwarzem Hintergrund, dann könnte man den Text nicht mehr lesen. Aus diesem Grund ist es möglich Werte des Styles an Werte des Themes zu binden. Da ein Theme mit schwarzem Hintergrund keine schwarze Schriftfarbe verwenden würde, sollten wir die Textfarbe des Themes für unseren Style übernehmen. Dazu müssen wir einfach nur das gewünschte Attribut angeben und nutzen dazu folgendes Schema: &#039;&#039;&#039;?android:attr/[Name]&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Nun wollen wir das mal auf unseren obigen Style anwenden und dieser schaut dann wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;style name=&amp;quot;NameDesStyles&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;item name=&amp;quot;android:background&amp;quot;&amp;gt;?android:background&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Video-Tutorial=&lt;br /&gt;
Zu diesem Thema habe ich auch ein Videotutorial gemacht. Dieses findet Ihr hier:[http://www.youtube.com/watch?v=yp1vb_w6LTs Android - Android XML Style + Theme]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Android]]&lt;/div&gt;</summary>
		<author><name>Tomate Salat</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Eigene_View_mit_XML-Attributen&amp;diff=5320</id>
		<title>Eigene View mit XML-Attributen</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Eigene_View_mit_XML-Attributen&amp;diff=5320"/>
		<updated>2013-08-09T16:23:48Z</updated>

		<summary type="html">&lt;p&gt;Tomate Salat: Die Seite wurde neu angelegt: „In diesem Artikel wird erklärt, wie ihr eine eigene View erstellen könnt, die durch XML-Attribute beeinflussbar ist. Mit dieser Technik können ähnliche Kompon…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In diesem Artikel wird erklärt, wie ihr eine eigene View erstellen könnt, die durch XML-Attribute beeinflussbar ist. Mit dieser Technik können ähnliche Komponenten zusammengefasst und als eine einzige gut wiederverwendet werden. &lt;br /&gt;
&lt;br /&gt;
=Eigenes XML-Attribut=&lt;br /&gt;
Damit wir mit einem eigenen Attribut arbeiten können muss es zuerst angelegt werden. Das geschieht in einer Resourcen-xml-Datei die sich im Ordner values befindet. In selbigem Ordner findet man oft z.B. auch folgende Dateien: strings.xml, styles.xml. Um Ordnung im Projekt zu halten empfielt es sich hier eine neue XML anzulegen mit dem Namen: attrs.xml (dort kann man dann alle Attribute sammeln).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;!-- attrs.xml --&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;resources&amp;gt;&lt;br /&gt;
    &amp;lt;declare-styleable name=&amp;quot;TutorialView&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;attr name=&amp;quot;info&amp;quot; format=&amp;quot;string&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/declare-styleable&amp;gt;&lt;br /&gt;
&amp;lt;/resources&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; declare-styleable &lt;br /&gt;
: Mit diesem Tag können wir mehrer Attribute kapseln. Declare-styleable benötigt einen Namen und am besten nehmen wir hierzu den Namen der View (in unserem Fall: TutorialView)&lt;br /&gt;
&lt;br /&gt;
; attr&lt;br /&gt;
: Mit diesem Tag definieren wir unser Attribut unter Angabe des Namens und Format. Welche Formate zur Verfügung stehen verratet euch die IDE. Ansonsten gibt es hier noch eine ausführlichere Erklärung dazu: [http://stackoverflow.com/questions/3441396/defining-custom-attrs stackoverflow - Defining custom attrs]&lt;br /&gt;
&lt;br /&gt;
=Die View-Klasse=&lt;br /&gt;
Um eine eigene View zu erstellen, brauchen wir zunächst eine Klasse. Diese sollte mindestens von [http://developer.android.com/reference/android/view/View.html View] erben. In diesem Artikel werden wir von einem [http://developer.android.com/guide/topics/ui/layout/linear.html LinearLayout] ausgehen. Unser neuer View wird sich also aus bestehenden Views zusammensetzen. &lt;br /&gt;
&lt;br /&gt;
==Der Konstruktor==&lt;br /&gt;
Damit der View in einer XML verwendet werden kann, benötigt er einen entsprechenden Konstruktor. Denn Android nutzt zum erstellen des View-Objektes immer folgenden Konstruktor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
public &amp;lt;constructor&amp;gt;(Context context, AttributeSet attrs) {&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei stehen unsere XML-Daten in dem AttributeSet-Objekt. Da es sein kann, dass man direkt in Java mal ein Objekt von der View-Klasse erstellen möchten, sollten wir noch einen Konstruktor bereitstellen mit nur einem Parameter (Context).&lt;br /&gt;
&lt;br /&gt;
==XML-Attribut in View auswerten==&lt;br /&gt;
Die Auswertung unseres XML-Attributes wird an folgendem Beispiel erklärt:&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
public class TutorialView extends LinearLayout {&lt;br /&gt;
&lt;br /&gt;
    public TutorialView(Context context) {&lt;br /&gt;
        this(context, null);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public TutorialView(Context context, AttributeSet attrs) {&lt;br /&gt;
        super(context, attrs);&lt;br /&gt;
        init(context, attrs);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private void init(Context context, AttributeSet attrs) {      &lt;br /&gt;
        TextView textView = new TextView(context);&lt;br /&gt;
        textView.setText(&amp;quot;Foo bar&amp;quot;);&lt;br /&gt;
        addView(textView);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier möchten wir das der TextView den Wert des Attributes übernimmt, welches wir zuvor im Abschnitt &#039;&#039;Eigenes XML-Attribut&#039;&#039; bereits angelegt haben. Um an eben diesen Wert zu kommen, müssen wir mit dem AttributeSet arbeiten. Mit einem [http://developer.android.com/reference/android/content/res/TypedArray.html TypedArray] können wir sehr elegant und einfach arbeiten. Deswegen erstellen wir uns eines mit folgendem Aufruf:&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.TutorialView);&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Methode obtainStyledAttributes übergeben wir zwei Werte. Zuerst die Informationen aus dem XML und danach was wir aus dem XML haben möchten (das R.styleable.TutorialView repräsentiert hier den XML-Tag &amp;quot;declared-styleable&amp;quot; und dessen Inhalt). &lt;br /&gt;
&lt;br /&gt;
Jetzt wo wir unser TypedArray haben sollten wir immer daran denken, dieses wieder frei zu geben. Dazu solltet Ihr die Methode recycle() aufrufen - sobald ihr das Objekt nicht mehr benötigt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
typedArray.recycle();&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der letzte Schritt ist dann, den Wert auslesen. Dies geht einfach mit folgender Codezeile:&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
String infoText = typedArray.getString(R.styleable.TutorialView_info);&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
getString sollte selbsterklärend sein, dennoch der Hinweis: wird im XML anstelle eines String eine Ressource (z.B.: @string/app_name) angegeben, so liefert getString den Inhalt der Ressource zurück.&lt;br /&gt;
&lt;br /&gt;
==Vollständige Klasse (Beispiel)==&lt;br /&gt;
Zur Vollständigkeit ist hier nochmal die komplette Klasse:&lt;br /&gt;
&amp;lt;code=java&amp;gt;&lt;br /&gt;
public class TutorialView extends LinearLayout {&lt;br /&gt;
&lt;br /&gt;
    public TutorialView(Context context) {&lt;br /&gt;
        this(context, null);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public TutorialView(Context context, AttributeSet attrs) {&lt;br /&gt;
        super(context, attrs);&lt;br /&gt;
        init(context, attrs);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private void init(Context context, AttributeSet attrs) {&lt;br /&gt;
        TextView textView = new TextView(context);&lt;br /&gt;
&lt;br /&gt;
        if(attrs != null) {&lt;br /&gt;
            TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.TutorialView);&lt;br /&gt;
            textView.setText(typedArray.getString(R.styleable.TutorialView_info));&lt;br /&gt;
            typedArray.recycle();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        addView(textView);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code=java&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Verwendung im Layout=&lt;br /&gt;
Um den View im Layout nutzen zu können, reicht es bereits Ihn über seinen vollqualifizierten Namen anzusprechen:&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;de.jfruit.tutorial.TutorialView&lt;br /&gt;
      android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
      android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
      /&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
damit wir hier unser Attribut nutzen können, müssen wir zuerst noch einen weiteren XML-Namespace angeben. Dazu passen wir einfach das Root-Element an indem wir folgendes Attribut hinzufügen:&lt;br /&gt;
&amp;lt;code=xml&amp;gt;xmlns:app=&amp;quot;http://schemas.android.com/apk/res-auto&amp;quot;&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
Dabei kann der Name des Namespaces (hier: app) frei gewählt werden. Wichtig ist nur, dass wir diesen Namespacenamen immer vor unser eigenes Attribut (durch Doppelpunkt getrennt) schreiben. In unserem Falle sähe das dann wie folgt aus:&lt;br /&gt;
&amp;lt;code=xml&amp;gt;app:info=&amp;quot;@string/app_name&amp;quot;&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Vollständige Layout-XML (Beispiel)==&lt;br /&gt;
Und hier seht Ihr das komplette Layout:&lt;br /&gt;
&amp;lt;code=xml&amp;gt;&lt;br /&gt;
&amp;lt;LinearLayout xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;
              xmlns:app=&amp;quot;http://schemas.android.com/apk/res-auto&amp;quot;&lt;br /&gt;
              android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
              android:layout_height=&amp;quot;match_parent&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;de.jfruit.tutorial.TutorialView&lt;br /&gt;
            app:info=&amp;quot;@string/app_name&amp;quot;&lt;br /&gt;
            android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
            android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
            /&amp;gt;&lt;br /&gt;
&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;
&amp;lt;/code=xml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind wir fertig. Unser View kann in einer XML verwendet und angepasst werden. &lt;br /&gt;
&lt;br /&gt;
=Video-Tutorial=&lt;br /&gt;
Zu diesem Thema habe ich auch ein Videotutorial gemacht. Dieses findet Ihr hier:[http://www.youtube.com/watch?v=9LnNKuBMrPc Android - Eigene View + XML]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Android]]&lt;/div&gt;</summary>
		<author><name>Tomate Salat</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Kategorie:Mobile_Development&amp;diff=5291</id>
		<title>Kategorie:Mobile Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Kategorie:Mobile_Development&amp;diff=5291"/>
		<updated>2013-08-07T08:47:02Z</updated>

		<summary type="html">&lt;p&gt;Tomate Salat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Unter Mobile Development versteht man das Entwickeln für mobile Endgeräte (z.B. Tablets, Smartphones). Für eben diese Geräte gibt es eine breite Vielfalt an existierenden Betriebssystemen die alle Ihre eigenen Besonderheiten haben. Nachfolgend werden alle Plattformen gelistet, für die Artikel existieren.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Byte-Welt]]&lt;/div&gt;</summary>
		<author><name>Tomate Salat</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Kategorie:Android&amp;diff=5284</id>
		<title>Kategorie:Android</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Kategorie:Android&amp;diff=5284"/>
		<updated>2013-08-07T08:07:43Z</updated>

		<summary type="html">&lt;p&gt;Tomate Salat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Mobile Development]] [[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>Tomate Salat</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Benutzer:Tomate_Salat&amp;diff=5283</id>
		<title>Benutzer:Tomate Salat</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Benutzer:Tomate_Salat&amp;diff=5283"/>
		<updated>2013-08-06T20:52:26Z</updated>

		<summary type="html">&lt;p&gt;Tomate Salat: Die Seite wurde neu angelegt: „404 - Not Found“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;404 - Not Found&lt;/div&gt;</summary>
		<author><name>Tomate Salat</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=Emulatoren&amp;diff=5282</id>
		<title>Emulatoren</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=Emulatoren&amp;diff=5282"/>
		<updated>2013-08-06T19:48:14Z</updated>

		<summary type="html">&lt;p&gt;Tomate Salat: Die Seite wurde neu angelegt: „Eine Liste von verfügbaren Emulatoren für das Android-OS.  =Standard Emulator= Der Standard Emulator wird mit dem SDK ausgeliefert. Der Emulator ist für Anfän…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine Liste von verfügbaren Emulatoren für das Android-OS.&lt;br /&gt;
&lt;br /&gt;
=Standard Emulator=&lt;br /&gt;
Der Standard Emulator wird mit dem SDK ausgeliefert. Der Emulator ist für Anfänger ausreichend, kommt aber aufgrund seiner Trägheit schnell an seine Grenzen. &lt;br /&gt;
&lt;br /&gt;
=YouWave= &lt;br /&gt;
[http://youwave.com/ YouWave] ist eher für Endanwender gedacht und unterstützt keine Tabletansicht. Zudem ist es nicht Möglich seine Apps zu deubggen (dies könnte sich in neueren/aktuellen Version geändert haben). Wer kein Android-Gerät besitzt kann diesen Emulator gut dazu verwenden um seine App in einer Umgebung zu testen, die Leistungstechnisch vergleichsweise besser an gängige Smartphones ran kommt als der Standardemulator.&lt;br /&gt;
&lt;br /&gt;
=Manymo=&lt;br /&gt;
[https://www.manymo.com/ Manymo] ist ein kostenpflichtiger Cloudbasierter Service - die App muss also auf den Server des Dienstleisters hochgeladen werden. Einmal hochgeladen kann man seine App gegen verschiedene Android-Versionen und Displayauflösungen testen. &lt;br /&gt;
&lt;br /&gt;
=BlueStacks=&lt;br /&gt;
[http://www.bluestacks.com/ BlueStacks] ist ein performanter Emulator für Tablets der auch bei der Entwicklung überzeugen kann. BlueStacks kann auch eine SD-Karte simulieren, das hochladen von eigenen Dateien darauf ist nur etwas versteckt. Einziges aufgefallenes Manko: es ist anscheinend nicht möglich die Google Play Services darauf zu installieren (dies könnte sich in neueren/aktuellen Version geändert haben).&lt;br /&gt;
&lt;br /&gt;
==Anleitung für die SD-Karte==&lt;br /&gt;
Um Dateien auf der SD-Karte von BlueStacks ablegen zu können, müsst ihr die Daten unter folgendem Pfad ablegen:&lt;br /&gt;
&lt;br /&gt;
C:\ProgramData\BlueStacks\UserData\SharedFolder&lt;br /&gt;
&lt;br /&gt;
=Virtual Box=&lt;br /&gt;
Eine sehr perfomante Möglichkeit Android zu emulieren ist das nutzen von Virtual Box. Eine ausführliche Beschreibung dazu finden Ihr hier: [http://blog.geniali.ch/post/2012/12/15/Android-Dev-%E2%80%93-Schneller-Android-Emulator.aspx http://blog.geniali.ch/post/2012/12/15/Android-Dev-%E2%80%93-Schneller-Android-Emulator.aspx]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Android]]&lt;/div&gt;</summary>
		<author><name>Tomate Salat</name></author>
	</entry>
	<entry>
		<id>https://wiki.byte-welt.net/index.php?title=IDE_Liste&amp;diff=5281</id>
		<title>IDE Liste</title>
		<link rel="alternate" type="text/html" href="https://wiki.byte-welt.net/index.php?title=IDE_Liste&amp;diff=5281"/>
		<updated>2013-08-06T17:55:32Z</updated>

		<summary type="html">&lt;p&gt;Tomate Salat: /* Java */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine Liste von verfügbaren IDEs, für die Entwicklung in verschiedenen Sprachen.&lt;br /&gt;
=Gratis [[Integrierte_Entwicklungsumgebung|IDE]]=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==C/C++==&lt;br /&gt;
*Code::Blocks - [http://www.codeblocks.org/ codeblocks.org] (am besten die nightly builds nehmen)&lt;br /&gt;
*NetBeans - [http://www.netbeans.org netbeans.org]&lt;br /&gt;
*wxDev-C++ 6.10-1 - [http://wxdsgn.sourceforge.net sourceforge.net]&lt;br /&gt;
*Dev C++ 5 - [http://www.bloodshed.net/devcpp.html bloodshed.net]&lt;br /&gt;
*KDevelop (Linux) - [http://www.kdevelop.org kdevelop.org]&lt;br /&gt;
*QtCreator (speziell für die Entwicklung mit Qt) - [http://www.qtsoftware.com/developer/qt-creator qtsoftware.com]&lt;br /&gt;
*Eclipse CDT (Plugin für Eclipse) - [http://www.eclipse.org/cdt/ eclipse.org]&lt;br /&gt;
&lt;br /&gt;
==C#(Sharp)==&lt;br /&gt;
*Visual Studio 2005 Express Editions - [http://www.microsoft.com/germany/msdn/vstudio/products/express/default.mspx microsoft.com]&lt;br /&gt;
*Visual C# Express [http://www.microsoft.com/germany/msdn/vstudio/products/express/visualcsharp microsoft.com]&lt;br /&gt;
*SharpDevelop - [http://www.icsharpcode.net/OpenSource/SD/ icsharpcode.net]&lt;br /&gt;
*monodevelop (für Linux) - [http://www.monodevelop.com/Main_Page monodevelop.com]&lt;br /&gt;
&lt;br /&gt;
==Java==&lt;br /&gt;
*NetBeans - [http://www.netbeans.org netbeans.org]&lt;br /&gt;
*Eclipse - [http://www.eclipse.org eclipse.org]&lt;br /&gt;
*IntelliJ IDEA (Community Edition) - [http://www.jetbrains.com/idea/ jetbrains.com]&lt;br /&gt;
*JBuilder Foundation (Borland) - [http://jbuilder.softonic.de/ie/10351 softonic.de]&lt;br /&gt;
&lt;br /&gt;
== Android ==&lt;br /&gt;
*Android Studio - [http://developer.android.com/sdk/installing/studio.html developer.android.com/sdk/installing/studio.html]&lt;br /&gt;
*Eclipse ADT-Bundle  - [http://developer.android.com/sdk/index.html developer.android.com/sdk/index.html]&lt;br /&gt;
*IntelliJ IDEA (Community Edition) - [http://www.jetbrains.com/idea/ jetbrains.com]&lt;br /&gt;
&lt;br /&gt;
==LaTeX==&lt;br /&gt;
*TexnicCenter - [http://www.texniccenter.org texniccenter.org]&lt;br /&gt;
*WinTex - [http://www.tex-tools.de tex-tools.de]&lt;br /&gt;
&lt;br /&gt;
==Ruby==&lt;br /&gt;
*Arachno Ruby IDE (30-Tage-Testversion) - [http://www.ruby-ide.com/ruby/ruby_ide_and_ruby_editor.php ruby-ide.com]&lt;br /&gt;
&lt;br /&gt;
==PHP==&lt;br /&gt;
*NetBeans - [http://www.netbeans.org netbeans.org]&lt;br /&gt;
*Eclipse mit [http://www.eclipse.org/pdt/ PDT PlugIn]&lt;br /&gt;
*Aptana Studio [http://www.aptana.com/studio aptana.com]&lt;br /&gt;
&lt;br /&gt;
=Kostenpflichtige [[Integrierte_Entwicklungsumgebung|IDE]]=&lt;br /&gt;
&lt;br /&gt;
==Java==&lt;br /&gt;
*IntelliJ IDEA - [http://www.jetbrains.com/idea/index.html jetbrains]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==LaTeX==&lt;br /&gt;
*WinEdt - [http://www.winedt.com winedt.com]&lt;br /&gt;
[[Kategorie:IDE]]&lt;/div&gt;</summary>
		<author><name>Tomate Salat</name></author>
	</entry>
</feed>