<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>jKoeber.de &#187; Android</title>
	<atom:link href="http://www.jkoeber.de/tag/android/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jkoeber.de</link>
	<description>Entwicklung, Systeme, Programmierung und Umsetzung</description>
	<lastBuildDate>Fri, 03 Feb 2012 07:21:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Android: ListViews optimieren und Felder ändern</title>
		<link>http://www.jkoeber.de/2011/09/22/android-listviews-optimieren/</link>
		<comments>http://www.jkoeber.de/2011/09/22/android-listviews-optimieren/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 10:14:36 +0000</pubDate>
		<dc:creator>lyrixx</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Tutorials / How to do]]></category>
		<category><![CDATA[Adapter]]></category>
		<category><![CDATA[Buffer]]></category>
		<category><![CDATA[Listview]]></category>
		<category><![CDATA[Optimierung]]></category>
		<category><![CDATA[Optimization]]></category>
		<category><![CDATA[Recycle]]></category>
		<category><![CDATA[Speichernutzung]]></category>
		<category><![CDATA[static]]></category>
		<category><![CDATA[View]]></category>
		<category><![CDATA[ViewHolder]]></category>

		<guid isPermaLink="false">http://www.jkoeber.de/?p=1129</guid>
		<description><![CDATA[Wie schon angeschlagen im letzten Post, heute geht es um die ListView Optimierung in Android. In einem sehr interessanten Webcast von Google I/O 2010 gab es schon einiges sehr sinnvolles zu ListViews und auch wieder einiges was ich dazu gelernt habe.

Für alle die es interessiert: The World of ListView



&#160;

Hier noch das Tutorial bzw. HowTo ...]]></description>
			<content:encoded><![CDATA[<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F09%2F22%2Fandroid-listviews-optimieren%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p>Wie schon angeschlagen im letzten Post, heute geht es um die ListView Optimierung in Android. In einem sehr interessanten Webcast von Google I/O 2010 gab es schon einiges sehr sinnvolles zu ListViews und auch wieder einiges was ich dazu gelernt habe.</p>
<p>Für alle die es interessiert: <strong>The World of ListView</strong></p>
<p><iframe src="http://www.youtube.com/embed/wDBM6wVEO70" frameborder="0" width="475" height="315"></iframe></p>
<p>&nbsp;</p>
<p>Hier noch das Tutorial bzw. HowTo zu dem Video. Wozu ViewHandler gebraucht werden und wie man Speicherschonend die ListViews befüllt. Anschließend noch ein kleiner Ausschnitt wie man ListViews aktualisiert mit <strong>notifyDataSetChanged().</strong></p>
<p>Ich gehe davon aus das jeder weiß wie man eine ListView in der Layout.xml definiert, daher fangen wir sofort an mit der implementierung der View im Code.</p>
<p><strong>Step 1</strong></p>
<p>ListView in der Activity aufrufen.</p>
<p>&nbsp;</p>
<pre class="java" name="code">import java.util.ArrayList;
import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.widget.ListView;

public class ListActivity extends Activity {

	private Context ctx;
	private ListView liste;
	private ListeItemAdapter adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.liste);
		this.ctx = this;

		List<String >items = new ArrayList<String>();
		for(int i=0;i<100;i++) {
			items.add(new ListeItemAdapter().randomText);
		}

		adapter = new ListeItemAdapter(this, R.layout.liste_item, items);
		liste = (ListView) findViewById(R.id.liste);
		liste.setAdapter(adapter);
	}
}
</pre>
<p>Der Adapter und somit das Herzstück des Tutorials. Wie definiere ich einen ViewHolder zum speichern der statischen Views für eine sinnvolle Speicherwiedernutzung.</p>
<pre class="java"  name="code">import java.util.List;
import java.util.Random;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ListeItemAdapter extends BaseAdapter {

	private Context ctx;
	private int rowResID;
	private List<String> itemList;
	private LayoutInflater layoutInflater;
	public String randomText = myRandomText();

	private static class ViewHolder {
		public static TextView text1;
		public static TextView text2;
		public static TextView text3;
		public static ImageView status;
	}

	public ListeItemAdapter() { }

	public ListeItemAdapter(final Context ctx, final int rowResID, final List<String> itemList) {
		this.ctx = ctx;
		this.rowResID = rowResID;
		this.itemList = itemList; 

		layoutInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	}

	public int getCount() {
		return this.itemList.size();
	}

	public Object getItem(int position) {
		return this.itemList.get(position);
	}

	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	public void setItemList(List<String> itemList) {
		this.itemList = itemList;
	}

	public View getView(int position, View v, ViewGroup vg) {
		ViewHolder holder;

		// prüfen ob eine view bereits existiert
		if(v == null || v.getTag() == null) {
			holder = new ViewHolder();
			v = layoutInflater.inflate(rowResID, null); // inflate the item layout!
			holder.text1 = (TextView) v.findViewById(R.id.text1);
			holder.text2 = (TextView)v.findViewById(R.id.text2);
			holder.text3 = (TextView)v.findViewById(R.id.text3);
			holder.status = (ImageView) v.findViewById(R.id.status);
			v.setTag(holder); // viewholder setzen
		} else {
		// laden der Views über den ViewHolder
			holder = (ViewHolder) v.getTag();
		}

		// get item value
		String item = itemList.get(position);

		// Views füllen
		holder.text1.setText(item);
		holder.text2.setText(myRandomText());
		holder.text3.setText(myRandomText());
		holder.status.setImageResource(myRandomImage());

        return v;
	}

	/**
	 * get random String value
	 * @return String
	 */
	public String myRandomText() {
		String[] values = new String[] { "Hase","Hund","Katze","Maus","Schwein","Pferd","Esel","Kuh","Henne","Hahn","Vogel","Affe","Giraffe","Schlange" };
		Random generator = new Random();
		return values[generator.nextInt(values.length)];
	}
	/**
	 * get random Image Resource
	 * @return int
	 */
	private int myRandomImage() {
		int[] values = new int[] { R.drawable.tick_green_00, R.drawable.tick_green_01, R.drawable.tick_green_02, R.drawable.tick_green_03 };
		Random generator = new Random();
		return values[generator.nextInt(values.length)];
	}

}</pre>
<p>Somit wäre eigentlich alles geklärt. Es ist fast selbst beschreibend für die, die sich schon mit ListViews auseinander gesetzt haben.<br />
Wir werden jetzt mit einem Handler in der MainActivity noch ein delayed Handler aufrufen indem wir die Werte der Listview ändern.<br />
Hier die veränderte Activity.</p>
<p><strong><span style="color: #339966;">PART 2</span></strong></p>
<p><strong>Step1</strong></p>
<pre class="java" name="code">
import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.widget.ListView;

public class ListActivity extends Activity {

	private Context ctx;
	private ListView liste;
	private ListeItemAdapter adapter;
	private Handler handler;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.liste);
		this.ctx = this;
		handler = new Handler();

		List<String >items = new ArrayList<String>();
		for(int i=0;i<100;i++) {
			items.add(new ListeItemAdapter().randomText);
		}

		adapter = new ListeItemAdapter(this, R.layout.liste_item, items);
		liste = (ListView) findViewById(R.id.liste);
		liste.setAdapter(adapter);

		Thread updateListViewThread = new Thread() {
			@Override
			public void run() {
				super.run();

				final List<String >items = new ArrayList<String>();
				for(int i=0;i<100;i++) {
					items.add(new ListeItemAdapter().randomText);
				}

				handler.postDelayed(new Runnable() {
					@Override
					public void run() {
						adapter.setItemList(items);
						adapter.notifyDataSetChanged();
					}
				}, 5000);

			}
		};
		updateListViewThread.start();

	}

}
</pre>
<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F09%2F22%2Fandroid-listviews-optimieren%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p class="wp-flattr-button"></p> <p><a href="http://www.jkoeber.de/?flattrss_redirect&amp;id=1129&amp;md5=87fab0ff98345a25c687d39407f49950" title="Flattr" target="_blank"><img src="http://www.jkoeber.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.jkoeber.de/2011/09/22/android-listviews-optimieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android AIDL Prozess erstellen</title>
		<link>http://www.jkoeber.de/2011/08/01/android-aidl-prozess-erstellen/</link>
		<comments>http://www.jkoeber.de/2011/08/01/android-aidl-prozess-erstellen/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 18:48:34 +0000</pubDate>
		<dc:creator>lyrixx</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tutorials / How to do]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[AIDL]]></category>
		<category><![CDATA[Beispiel]]></category>
		<category><![CDATA[Einfach]]></category>
		<category><![CDATA[Example]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Remote Service]]></category>
		<category><![CDATA[sample]]></category>

		<guid isPermaLink="false">http://www.jkoeber.de/?p=1117</guid>
		<description><![CDATA[AIDL Prozesse oder Services sind Schnittstellen zur Kommunikation und Automatisierung außerhalb der App. Wenn deine App für Widgets oder auch für länger laufende Prozesse einiges an Ressourcen benötigt und vor allem auch nach dem schließen der Applikation weiter arbeiten soll. z.B. Streamen von Musik oder Aktualisieren von Daten bei Newsfeed's etc. sind sogenannte Remote ...]]></description>
			<content:encoded><![CDATA[<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F08%2F01%2Fandroid-aidl-prozess-erstellen%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p>AIDL Prozesse oder Services sind Schnittstellen zur Kommunikation und Automatisierung außerhalb der App. Wenn deine App für Widgets oder auch für länger laufende Prozesse einiges an Ressourcen benötigt und vor allem auch nach dem schließen der Applikation weiter arbeiten soll. z.B. Streamen von Musik oder Aktualisieren von Daten bei Newsfeed&#8217;s etc. sind sogenannte Remote Services sinnvoll.</p>
<p>Remoteservices werden mit einer .aidl file spezifiziert, dieses beinhaltet eine Interfaceklasse die die Struktur des späteren Services erzeugt. Vieles zur Kommunikation mit dem System erzeugt Eclipse wieder von alleine, um das wir uns nicht kümmern müssen. Einmal verstanden ist es halb so schwer.</p>
<p>Mein Mainpackage z.B. <strong>de.jkoeber.testapp</strong> darin erstelle ich eine .aidl file mit dem Namen <strong>MyRemoteService.aidl</strong></p>
<pre name="code" class="java">package de.jkoeber.testapp;/** service interface */
interface MyRemoteService{
void startUpate();
void stopUpdate();
boolean isUpdating();
}
</pre>
<p>Aus dieser AIDL File erstellt der Builder von Eclipse in den Ordner <strong>gen</strong> die Java Klasse zur Kommunikation mit dem Systemen.</p>
<p>Im nächsten Step registrieren wir den Service in der App. Andernfalls kann das ganze Programm nicht mit der File umgehen. Also fügen wir z.B. folgendes in die <strong>AndroidManifest.xml</strong> ein.</p>
<pre name="code" class="xml">
<service android:name=".remoteservices.MyRemoteService" android:process=":remote">
  <intent-filter>
    <action android:name="de.jkoeber.testapp.MyRemoteService" />
    <action android:name="de.jkoeber.testapp.REMOTE_SERVICE" />
  </intent-filter>
</service>
</pre>
<p>Jetzt zur Erklärung. Ein Remoteservice wird über die Interfacefile erzeugt. Dem Remoteservice hängt aber eine Klasse an, die die angegebenen Funktionen im Interface ausführt. das wäre dann in der Zeile: <strong>android:name=&#8221;.remoteservices.MyRemoteService&#8221;</strong> Das heißt, ich hab ein neues Packages erstellt das .remoteservices heißt und hab darin die Klasse MyRemoteService erzeugt. Per Intent Filter wird anschließend die Interface .aidl Datei angegeben.</p>
<p>Jetzt erzeugen wir noch die Klasse zur AIDL. Es ist wie bei jedem Interface, das es einer Klasse zu Grunde liegt.</p>
<pre name="code" class="java">
package de.jkoeber.testapp.remoteservices;

import java.util.ArrayList;
import java.util.List;

import de.jkoeber.testapp.MyRemoteService;

public class MyRemoteService extends Service {
    private Handler handler = new Handler();

    @Override
    public void onCreate() {
        super.onCreate();
        ctx= this;
    }

    @Override
    public IBinder onBind(Intent intent) {
        // Return the interface
        return mBinder;
    }

    private final MyRemoteService.Stub mBinder = new MyRemoteService.Stub() {
		@Override
		public void startUpate() throws RemoteException {
		    // start update
		}

		/**
		 * stop updating service
		 */
		@Override
		public void stopUpdate() throws RemoteException {
                    // stop service
		}

		/**
		 * check if update is running
		 */
		@Override
		public boolean isUpdating() throws RemoteException {
                   // check if service is running
                }
    };

}
</pre>
<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F08%2F01%2Fandroid-aidl-prozess-erstellen%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p class="wp-flattr-button"></p> <p><a href="http://www.jkoeber.de/?flattrss_redirect&amp;id=1117&amp;md5=95a2852670f9fd7044a813e30705eb71" title="Flattr" target="_blank"><img src="http://www.jkoeber.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.jkoeber.de/2011/08/01/android-aidl-prozess-erstellen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android SDK Manager Error: unknown option: -</title>
		<link>http://www.jkoeber.de/2011/08/01/android-sdk-manager-error-unknown-option/</link>
		<comments>http://www.jkoeber.de/2011/08/01/android-sdk-manager-error-unknown-option/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 13:07:25 +0000</pubDate>
		<dc:creator>lyrixx</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tutorials / How to do]]></category>
		<category><![CDATA[-]]></category>
		<category><![CDATA[1&1]]></category>
		<category><![CDATA[10]]></category>
		<category><![CDATA[12]]></category>
		<category><![CDATA[13]]></category>
		<category><![CDATA[AVD]]></category>
		<category><![CDATA[emulator]]></category>
		<category><![CDATA[Error]]></category>
		<category><![CDATA[Fehler]]></category>
		<category><![CDATA[geht nicht mehr]]></category>
		<category><![CDATA[kein emulator]]></category>
		<category><![CDATA[lässt sich nicht starten]]></category>
		<category><![CDATA[Manager]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[starten]]></category>
		<category><![CDATA[starting]]></category>
		<category><![CDATA[unknown option]]></category>
		<category><![CDATA[version]]></category>

		<guid isPermaLink="false">http://www.jkoeber.de/?p=1119</guid>
		<description><![CDATA[Wer den Fehler: unknown option: - please use -help for a list of valid options steht erstmal vor einem Rätsel. Es ist aber ziemlich einfach. Da Android eher von Google kommt und damit auch eher die Unix und Mac Programmierer ansprechen will stellt man sich dem dummen Windows Nutzer quer und baut schnell mal ...]]></description>
			<content:encoded><![CDATA[<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F08%2F01%2Fandroid-sdk-manager-error-unknown-option%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p>Wer den Fehler: unknown option: &#8211; please use -help for a list of valid options steht erstmal vor einem Rätsel. Es ist aber ziemlich einfach. Da Android eher von Google kommt und damit auch eher die Unix und Mac Programmierer ansprechen will stellt man sich dem dummen Windows Nutzer quer und baut schnell mal seinen AVD Manager um.</p>
<p>Seit der aktuelle Version des SDK und AVD Managers ist es nicht mehr gestattet mit Leerstellen im Pfad zum AVD Manager zu arbeiten.<br />
Wer voher einen ähnlichen Pfad wie ich hatte mit Leerstelle. zum Beispiel: <em>c:\Program Files\Android\SDK-Manager\</em> wird jetzt ziemlich schnell enttäuscht und man erhält den Fehler: <strong>unknown option: &#8211; please use -help for a list of valid options</strong> </p>
<p>Typischerweise gibt es kein Logging und somit beginnt eine dreitägige Tour der Suche in den endlosen Weiten der Updates und Reinstallationen um einen solch banalen Fehler zu finden. Für alle anderen die den Fehler auch haben und sich Emulatoren nicht mehr vernünftig starten lassen. Ladet euren SDK Manager in ein Verzeichnis ohne Leerstellen: <em>c:\android\sdk-manager\</em> und schon funktoiniert es wie gehabt.
<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F08%2F01%2Fandroid-sdk-manager-error-unknown-option%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p class="wp-flattr-button"></p> <p><a href="http://www.jkoeber.de/?flattrss_redirect&amp;id=1119&amp;md5=93b66f8583e5ba66744da6a1f18868ed" title="Flattr" target="_blank"><img src="http://www.jkoeber.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.jkoeber.de/2011/08/01/android-sdk-manager-error-unknown-option/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Android Orientation Trick</title>
		<link>http://www.jkoeber.de/2011/07/04/android-orientation-trick/</link>
		<comments>http://www.jkoeber.de/2011/07/04/android-orientation-trick/#comments</comments>
		<pubDate>Mon, 04 Jul 2011 12:08:26 +0000</pubDate>
		<dc:creator>lyrixx</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tutorials / How to do]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[anzeigen]]></category>
		<category><![CDATA[ausprobieren]]></category>
		<category><![CDATA[erkennen]]></category>
		<category><![CDATA[Erkennung]]></category>
		<category><![CDATA[Filtern]]></category>
		<category><![CDATA[Funktion]]></category>
		<category><![CDATA[herausfinden]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Landscape]]></category>
		<category><![CDATA[Modus]]></category>
		<category><![CDATA[Orientation]]></category>
		<category><![CDATA[Portrait]]></category>
		<category><![CDATA[Prüfen]]></category>
		<category><![CDATA[Selection]]></category>
		<category><![CDATA[testen]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Übergabe]]></category>
		<category><![CDATA[Verbesserung]]></category>

		<guid isPermaLink="false">http://www.jkoeber.de/?p=1112</guid>
		<description><![CDATA[Heute geht es um die Orientation im Android. Alle oder so gut wie alle aktuellen Smartphonehandys haben einen Sensor um die Ausrichtung des Handybildschirms zu bestimmen. Landscape oder Portrait heißen diese 2 Varianten. Mit diesen beiden Möglichkeiten lässt sich viel anstellen. Man kann seine Apps den größen der Monitore etc. anpassen. Eine super Sache. ...]]></description>
			<content:encoded><![CDATA[<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F07%2F04%2Fandroid-orientation-trick%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p>Heute geht es um die Orientation im Android. Alle oder so gut wie alle aktuellen Smartphonehandys haben einen Sensor um die Ausrichtung des Handybildschirms zu bestimmen. Landscape oder Portrait heißen diese 2 Varianten. Mit diesen beiden Möglichkeiten lässt sich viel anstellen. Man kann seine Apps den größen der Monitore etc. anpassen. Eine super Sache. Aber wie stelle ich am geschicktesten die Orientation fest um vernünftig meine Programmdaten zu übergeben.</p>
<p>Eines ist mir aufgefallen. Pads und Handys sind zwei paar Schuhe, das aber auch die Hersteller an sich nicht an die Standards halten finde ich unverschämt. So gibt das Acer Iconia Tab andere Daten als das HTC Desire HD zurück um seine Orientation Punkte zu merken. Zur Erinnerung in der Google bzw. Android Dokumentation:</p>
<blockquote>
<table>
<tbody>
<tr>
<td>&#8220;<code>unspecified</code>&#8220;</td>
<td>The default value. The system chooses the orientation. The policy it uses, and therefore the choices made in specific contexts, may differ from device to device.</td>
</tr>
<tr>
<td>&#8220;<code>landscape</code>&#8220;</td>
<td>Landscape orientation (the display is wider than it is tall).</td>
</tr>
<tr>
<td>&#8220;<code>portrait</code>&#8220;</td>
<td>Portrait orientation (the display is taller than it is wide).</td>
</tr>
<tr>
<td>&#8220;<code>user</code>&#8220;</td>
<td>The user&#8217;s current preferred orientation.</td>
</tr>
<tr>
<td>&#8220;<code>behind</code>&#8220;</td>
<td>The same orientation as the activity that&#8217;s immediately beneath it in the activity stack.</td>
</tr>
<tr>
<td>&#8220;<code>sensor</code>&#8220;</td>
<td>The orientation determined by a physical orientation sensor. The orientation of the display depends on how the user is holding the device; it changes when the user rotates the device.</td>
</tr>
<tr>
<td>&#8220;<code>nosensor</code>&#8220;</td>
<td>An orientation determined without reference to a physical orientation sensor. The sensor is ignored, so the display will not rotate based on how the user moves the device. Except for this distinction, the system chooses the orientation using the same policy as for the &#8220;<code>unspecified</code>&#8221; setting.</td>
</tr>
</tbody>
</table>
</blockquote>
<p>Jeder der einzelnen Werte wird über eindeute Integer zugeordnet. Aber bei Herstellern, wie ich feststellen musste gibt es diesen Standard nicht und sie übergeben was sie wollen. Im normalen Verfahren, kann man die Position bzw. Orientierung des Displays mit diesem Befehl feststellen und dem entsprechen darauf reagieren:</p>
<pre name="code" class="java">
 Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
 int orientation = display.getOrientation();
</pre>
<p>Anschließend könnte man den übergebenen Wert per ActivityInfo verlgeichen und den dementsprechenden Content laden. Zum Beispiel so:</p>
<pre name="code" class="java">
switch (orientation) {
  case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE:
      ... do anything ...
  break;
  case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT:
      ... do anything else ...
  break;
}
</pre>
<p>Aber das funktioniert nur bedingt. Für Tablet, z.B. dem Iconia von Acer gilt der Landscape und Portrait Bereich nicht, da Acer als Tab sich den Portrait Bereich im Querformat vorstellt und somit die Variable für Landscape und Portrait vertauscht. Somit bekommt man ein 0 für Landscape und 1 für Portrait was nicht sein dürfte.<br />
Für mich ist der Landscape Modus das Querformat des Monitors und nicht die Hochkanvariante. Somit prüfe ich folgendes ab:</p>
<pre name="code" class="java">
setContentView(R.layout.demo) // Für alle Ansichten muss der selbe Name verwendet werden
LinearLayout contentLand = (LinearLayout) findViewId(R.id.content);
LinearLayout contentPortrait = (LinearLayout) findViewId(R.id.content);

if(contentLand != null) { // check if Orientation == Landscape
  ... do whatever u want ...
} else if(contentPortrait != null ) { // check if Orientation == Portrait
  ... do whatever u want ...
}
</pre>
<p>Mein Beispiel ist kurz und knapp, ich verwende keine Mühe mehr daran den Sensor zu ermitteln wie er gerade steht sondern überlass es dem System. Ich prüfe lediglich ab welche View existiert und arbeite damit weiter. Wenn die jeweilige View ansprechbar ist bzw. in meinem Fall <strong>not null</strong> erhalte ich das selbe, für mich sogar bessere Ergebnis als wenn ich umständlich mit den Orientation Funktionen arbeite.</p>
<p>Ich hoffe es hilf einigen von euch die sich damit erst beschäftigen werden.</p>
<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F07%2F04%2Fandroid-orientation-trick%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p class="wp-flattr-button"></p> <p><a href="http://www.jkoeber.de/?flattrss_redirect&amp;id=1112&amp;md5=f8a6aed32f741daefc207d49a04306da" title="Flattr" target="_blank"><img src="http://www.jkoeber.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.jkoeber.de/2011/07/04/android-orientation-trick/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Acer Iconia Tab</title>
		<link>http://www.jkoeber.de/2011/06/27/acer-iconia-tab/</link>
		<comments>http://www.jkoeber.de/2011/06/27/acer-iconia-tab/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 21:11:00 +0000</pubDate>
		<dc:creator>lyrixx</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Apps]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Sensor]]></category>
		<category><![CDATA[Social]]></category>
		<category><![CDATA[Tag]]></category>
		<category><![CDATA[Touchscreen]]></category>

		<guid isPermaLink="false">http://www.jkoeber.de/2011/06/27/acer-iconia-tab/</guid>
		<description><![CDATA[Seit knapp einer woche bin ich stolzer Besitzer eines Iconia w500 Tablets. Im großen und ganzen bin ich damit zufrieden. Ich habe ein paar Testberichte gelesen in denen das Iconia besser bewertet wurde als das Xoom von Motorola. Leider habe ich nicht den direkten Vergleich. Von der Hardware nehmen sich die Hersteller nicht viel. ...]]></description>
			<content:encoded><![CDATA[<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F06%2F27%2Facer-iconia-tab%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p>Seit knapp einer woche bin ich stolzer Besitzer eines Iconia w500 Tablets. Im großen und ganzen bin ich damit zufrieden. Ich habe ein paar Testberichte gelesen in denen das Iconia besser bewertet wurde als das Xoom von Motorola. Leider habe ich nicht den direkten Vergleich. Von der Hardware nehmen sich die Hersteller nicht viel. Auch das Iconia gibt es mitv3g Modul.</p>
<p><strong>Zur Android Version</strong><br />
Vorhanden ist eine Android 3.0.1 Version, die kommenden Mittwoch auf Android 3.1 geupgradet werden kann. Das Vorinstallierte Acer Themen ist gut gelungen und alles ancseinem Platz. Aber auch ein paar kleine Nachteile gibt es, was man Acer aber nicht in die Schuhe schieben kann. Beim installieren von Apps kann es vorkommen das sich der Marktplace verabschiedet.</p>
<p><strong>Hardware</strong><br />
Dem Iconia ist eine hohe Aulösung von über 1000Pixeln gegen worden. Ein großer Pluspunkt. <img src='http://www.jkoeber.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />   Viele Seiten können somit ohne zoom gelesen werden. Ein USB Anschluss für eine zusätzliche Tastaur ist auch vorhanden. Sehr schön. Was mich aber atört ist ein kleiner Verarbeitungsfehler am Display.  Durch die Anschlussmöglichkeit der Acer Docking ist ein zusätzlicher Slot integriert hinter dem anscheinend ein Chip eingebaut ist. Daher wird das Display auf der Seite um einen Millimeter nach oben gedrückt und somit eine unschöne Kante am unteren Ende sichtbar und fühlbar.</p>
<p>Wenn mir noch was einfällt und ich noch etwas Zeit habe werde ich den Beitrag ergänzen.</p>
<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F06%2F27%2Facer-iconia-tab%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://www.jkoeber.de/2011/06/27/acer-iconia-tab/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google IO 2011</title>
		<link>http://www.jkoeber.de/2011/05/12/google-io-2011/</link>
		<comments>http://www.jkoeber.de/2011/05/12/google-io-2011/#comments</comments>
		<pubDate>Thu, 12 May 2011 21:59:07 +0000</pubDate>
		<dc:creator>lyrixx</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[3.0]]></category>
		<category><![CDATA[3.1]]></category>
		<category><![CDATA[Buy]]></category>
		<category><![CDATA[Collection]]></category>
		<category><![CDATA[Converence]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Honeycamp]]></category>
		<category><![CDATA[I/O]]></category>
		<category><![CDATA[Kaufen]]></category>
		<category><![CDATA[Market]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[TV]]></category>

		<guid isPermaLink="false">http://www.jkoeber.de/?p=1107</guid>
		<description><![CDATA[Ich schau mir gerade die Google I/O Podcast über Youtube an und muss sagen, das ich recht begeistert bin. Verkaufszahlen und Aktivierungen von Android Geräten, natürlich sehr spektakulär aufgemacht aber auch gute Zahlen. Über 100 Millionen aktivierte Geräte mit dem beliebten OS. Viele neue Pläne und Features werden vorgestellt. Ein kleiner Ausschnitt:

- 3D und ...]]></description>
			<content:encoded><![CDATA[<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F05%2F12%2Fgoogle-io-2011%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p>Ich schau mir gerade die Google I/O Podcast über Youtube an und muss sagen, das ich recht begeistert bin. Verkaufszahlen und Aktivierungen von Android Geräten, natürlich sehr spektakulär aufgemacht aber auch gute Zahlen. Über 100 Millionen aktivierte Geräte mit dem beliebten OS. Viele neue Pläne und Features werden vorgestellt. Ein kleiner Ausschnitt:</p>
<p>- 3D und Camera z.B. Automatisiertes visieren des Sprecher über Videotelefonie</p>
<p>-  Google TV bekommt den Android Market</p>
<p>- Es können, wie auch schon im Appstore möglich direkt über den Store Videos gemietet werden</p>
<p>- Google Music (sehr interresant)</p>
<p>Ich werde mir jetzt die restlichen Stunden Google I/O reinziehen, morgen wieder zu spät auf Arbeit aufkreuzen aber dafür umso mehr Wissen und Ideen mit ins Bett nehmen die ich mir im Schlaf doch alle mal durchdenken kann. Wozu ist auch sonst die Nacht gut&#8230; <img src='http://www.jkoeber.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Dann Allen einen schönen Abend und bis Morgen!
<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F05%2F12%2Fgoogle-io-2011%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p class="wp-flattr-button"></p> <p><a href="http://www.jkoeber.de/?flattrss_redirect&amp;id=1107&amp;md5=dd518505993fd343b0af07eec2b95dca" title="Flattr" target="_blank"><img src="http://www.jkoeber.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.jkoeber.de/2011/05/12/google-io-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android Desire HD, installieren auf SD Karte / USB Speicher</title>
		<link>http://www.jkoeber.de/2011/05/10/android-desire-hd-installieren-auf-sd-karte-usb-speicher/</link>
		<comments>http://www.jkoeber.de/2011/05/10/android-desire-hd-installieren-auf-sd-karte-usb-speicher/#comments</comments>
		<pubDate>Tue, 10 May 2011 09:34:51 +0000</pubDate>
		<dc:creator>lyrixx</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[2.2]]></category>
		<category><![CDATA[2.2.1]]></category>
		<category><![CDATA[Desire]]></category>
		<category><![CDATA[Desire HD]]></category>
		<category><![CDATA[externer Speicher]]></category>
		<category><![CDATA[Hilfe]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[HTC]]></category>
		<category><![CDATA[Quick]]></category>
		<category><![CDATA[Speichern]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[USB]]></category>

		<guid isPermaLink="false">http://www.jkoeber.de/?p=1097</guid>
		<description><![CDATA[Für alle anderen die schon mal vom Android Desire HD per App2SD oder auch über die Anwendungsverwaltung Apps auf die SD Karte verschoben haben und anschließend überraschend feststellen mussten das sich die Apps nicht mehr Updaten lassen gibt es hier die Lösung.

HTC hat anscheinend in der HD Variante des Desire eine kleine Sperre auf ...]]></description>
			<content:encoded><![CDATA[<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F05%2F10%2Fandroid-desire-hd-installieren-auf-sd-karte-usb-speicher%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p>Für alle anderen die schon mal vom Android Desire HD per App2SD oder auch über die Anwendungsverwaltung Apps auf die SD Karte verschoben haben und anschließend überraschend feststellen mussten das sich die Apps nicht mehr Updaten lassen gibt es hier die Lösung.</p>
<p>HTC hat anscheinend in der HD Variante des Desire eine kleine Sperre auf die SD Karte eingebaut das man nicht so einfach die Apps updaten kann wie man mag sobald diese auf der SD Karte gespeichert werden.</p>
<ul>
<li>Verbinden des Handys mit eurem PC per USB Kabel, anschließend wählt Ihr Festplatte als Verbindungseinstellung</li>
<li>Öffnet den Explorer und geht in den Ordner .android_secure</li>
<li>Hier befindet sich eine File mit dem Namen: smdl2tmp1.asec</li>
<li>Bennent diese File um oder löscht sie und schön könnt ihr Updates und Installationen auf der SD Karte tätigen</li>
</ul>
<p>Mir ist dieser kleine Trick sehr hilfreich gewesen bei der Installation eines kleinen Spiels das unbedingt auf die SD Karte speichern wollte.</p>
<p>&nbsp;</p>
<p>&nbsp;
<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F05%2F10%2Fandroid-desire-hd-installieren-auf-sd-karte-usb-speicher%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p class="wp-flattr-button"></p> <p><a href="http://www.jkoeber.de/?flattrss_redirect&amp;id=1097&amp;md5=04a46f1fcd73fa608977c38a92ab4ddd" title="Flattr" target="_blank"><img src="http://www.jkoeber.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.jkoeber.de/2011/05/10/android-desire-hd-installieren-auf-sd-karte-usb-speicher/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android Tutorials</title>
		<link>http://www.jkoeber.de/2011/03/23/android-tutorials/</link>
		<comments>http://www.jkoeber.de/2011/03/23/android-tutorials/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 21:28:12 +0000</pubDate>
		<dc:creator>lyrixx</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[2.1]]></category>
		<category><![CDATA[2.2]]></category>
		<category><![CDATA[2.3]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Beispiele]]></category>
		<category><![CDATA[Donut]]></category>
		<category><![CDATA[Honeycamb]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.jkoeber.de/?p=1088</guid>
		<description><![CDATA[Schon lang lang ist es her. Noch zur Affäre von zu Guttenberg hatte ich Zeit einen kurzen Blogeintrag zu verfassen und jetzt stecke ich von Kopf bis Fuß in einem neuen Projekt. Es wird ein Mobile Projekt und hierbei habe ich wieder viel lernen können.

Deshalb habe ich mich entschlossen mein neues angelerntes Wissen nicht ...]]></description>
			<content:encoded><![CDATA[<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F03%2F23%2Fandroid-tutorials%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p>Schon lang lang ist es her. Noch zur Affäre von zu Guttenberg hatte ich Zeit einen kurzen Blogeintrag zu verfassen und jetzt stecke ich von Kopf bis Fuß in einem neuen Projekt. Es wird ein Mobile Projekt und hierbei habe ich wieder viel lernen können.</p>
<p>Deshalb habe ich mich entschlossen mein neues angelerntes Wissen nicht für mich zu behalten und will euch das ein oder andere Tutorial noch schreiben. Aber vorerst eine Kurse Übersicht was es geben wird.</p>
<ul>
<li>Manipulation Tabbar und Positionierung</li>
<li>Zugriff auf Parent Objekte</li>
<li>Threads und Handler</li>
<li>Manipulation von Progressbar für Horizontale Ansicht</li>
<li>Bilder nachladen</li>
</ul>
<p>Ich werde in den kommenden Tagen die Tutorials online stellen und auch auf diesem &#8220;Artikel&#8221; verlinken. Aber zuerst einmal noch einen schönen Abend und bis demnächst.
<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F03%2F23%2Fandroid-tutorials%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p class="wp-flattr-button"></p> <p><a href="http://www.jkoeber.de/?flattrss_redirect&amp;id=1088&amp;md5=62210ccb52b01e8367e50d4627c2c8ea" title="Flattr" target="_blank"><img src="http://www.jkoeber.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.jkoeber.de/2011/03/23/android-tutorials/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iOS und Android, warum eine Migration nicht sinnvoll ist!</title>
		<link>http://www.jkoeber.de/2010/11/26/ios-und-android-warum-eine-migration-nicht-sinnvoll-ist/</link>
		<comments>http://www.jkoeber.de/2010/11/26/ios-und-android-warum-eine-migration-nicht-sinnvoll-ist/#comments</comments>
		<pubDate>Thu, 25 Nov 2010 23:26:45 +0000</pubDate>
		<dc:creator>lyrixx</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Enterprise 2.0]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[App]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Desire]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[Droid]]></category>
		<category><![CDATA[droidcon]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iTunes]]></category>
		<category><![CDATA[Java One]]></category>
		<category><![CDATA[Market]]></category>
		<category><![CDATA[motorola]]></category>
		<category><![CDATA[Store]]></category>
		<category><![CDATA[tab]]></category>
		<category><![CDATA[table]]></category>
		<category><![CDATA[tablet]]></category>

		<guid isPermaLink="false">http://www.jkoeber.de/2010/11/26/ios-und-android-warum-eine-migration-nicht-sinnvoll-ist/</guid>
		<description><![CDATA[Es gibt zig Einträge in Foren oder Blogs. Stellenanzeigen und Leistungsübersichten in denen ich immer wieder von Migrationen lese. 
Dabei habe ich mir selbst die Frage gestellt ob es Sinn macht und auch gut ist Apps von iOS auf Android im 1to1 Verfahren zu kopieren.
Meine eindeutige Antwort darauf ist: nein.
Der Ansatz von Android und ...]]></description>
			<content:encoded><![CDATA[<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2010%2F11%2F26%2Fios-und-android-warum-eine-migration-nicht-sinnvoll-ist%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p>Es gibt zig Einträge in Foren oder Blogs. Stellenanzeigen und Leistungsübersichten in denen ich immer wieder von Migrationen lese. <br />
Dabei habe ich mir selbst die Frage gestellt ob es Sinn macht und auch gut ist Apps von iOS auf Android im 1to1 Verfahren zu kopieren.<br />
Meine eindeutige Antwort darauf ist: <strong>nein</strong>.<br />
Der Ansatz von Android und IPhone ist verschieden. Sowohl was die wählbaren Tasten angeht bis hin zu den Touchevents die man auslesen kann.<br />
Ich kenne kein iPhone App das mir ein Contextmenu (längerer Druck auf ein Item) ermöglicht. Aber ich kenne auch nur wenige Android Apps die wirklich die iPhone-Bottom-Menustruktur imitieren. Was, für mein Verständnis eine totale Themaverfehlung wäre, wenn ein Android Entwickler diese Menuform extra einprogrammiert.</p>
<p><strong>Warum macht eine Direktkopie Sinn?</strong> Es gibt nur eine Ausrede, die Kosten. Entwicklungszeit kostet Geld und Menschen die gut darin sind lassen es sich gut bezahlen. Daher kostet eine Neuentwicklung mehr Geld als die Kopie.</p>
<p>Vorteile der angepassten App zum jeweiligen System sind ganz klar. Passende Grafiken, es gibt doch fast nichts schlimmeres als wenn die Grafiken aussehen wie Kraut und Rüben. Neben zusätzlichen Features. Auf dem Android zum Beispiel die Integration von Widgets. Angepasste Menüs und Suchfunktionen. Auch Fehleranalysen und Debugging spielen dabei die ein oder andere Rolle.</p>
<p>Fazit: Für mich persönlich macht es wenig Sinn echte Applikationen, ich rede nicht von Spielen einer Kopiermaßnahme zu unterziehen und damit eine identische Version auf mehreren total unterschiedlichsten Systemen zu publizieren.</p>
<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2010%2F11%2F26%2Fios-und-android-warum-eine-migration-nicht-sinnvoll-ist%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://www.jkoeber.de/2010/11/26/ios-und-android-warum-eine-migration-nicht-sinnvoll-ist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android RatingBar Probleme</title>
		<link>http://www.jkoeber.de/2010/11/23/android-ratingbar-probleme/</link>
		<comments>http://www.jkoeber.de/2010/11/23/android-ratingbar-probleme/#comments</comments>
		<pubDate>Tue, 23 Nov 2010 14:06:54 +0000</pubDate>
		<dc:creator>lyrixx</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Anpassung]]></category>
		<category><![CDATA[Fehler]]></category>
		<category><![CDATA[HTC]]></category>
		<category><![CDATA[RatingBar]]></category>
		<category><![CDATA[Resize]]></category>
		<category><![CDATA[Scale]]></category>
		<category><![CDATA[Size issue]]></category>
		<category><![CDATA[Star]]></category>
		<category><![CDATA[Sterne]]></category>
		<category><![CDATA[Update]]></category>

		<guid isPermaLink="false">http://www.jkoeber.de/?p=1045</guid>
		<description><![CDATA[Immer wenn ich eine Ratingbar anlege ist dies zu groß. In der Landscape- Ansicht würde es funktionieren und der Nutzer ohne Probleme das Rating vornehmen können, um aber das Rating sinnvoll auf ein standard Portrait View zu erzeugen muss ich einen Umweg gehen. RatingBar Items können wir 3 verschiedene Zustände zuordnen.
larger indicator-only    -    style="?android:attr/ratingBarStyleIndicator"
smaller ...]]></description>
			<content:encoded><![CDATA[<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2010%2F11%2F23%2Fandroid-ratingbar-probleme%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p>Immer wenn ich eine Ratingbar anlege ist dies zu groß. In der Landscape- Ansicht würde es funktionieren und der Nutzer ohne Probleme das Rating vornehmen können, um aber das Rating sinnvoll auf ein standard Portrait View zu erzeugen muss ich einen Umweg gehen. RatingBar Items können wir 3 verschiedene <em>Zustände zuordnen</em>.</p>
<blockquote><p><strong>larger indicator-only    -    style=&#8221;?android:attr/ratingBarStyleIndicator&#8221;<br />
smaller RatingBar     -    style=&#8221;?android:attr/ratingBarStyleSmall&#8221;<br />
Default            -    style=&#8221;?android:attr/ratingBarStyle&#8221;</strong></p></blockquote>
<p>Jeder dieser Zustände hat seine Eigenschaften. Zum Beispiel können bei lager indicator als auch bei der smaller RatingBar keine Werte direkt vergeben werden. Das heißt der Nutzer kann hier keine Interaktion mit der RatingBar eingehen. In der Default Variante kann es zu Layoutschwierigkeiten kommen. Wie auch in meinem Fall.</p>
<p>Folgender Fehler habe ich nun gefunden, der im Simulator ohne Probleme läuft. Das Rendern der Stars wird nicht korrekt vorgenommen solange man nicht eine Anpassung in der Manifest.xml macht. Erst nach ändern der XML wurden die Ratingsterne richtig dargestellt.</p>
<blockquote>
<pre><strong>&lt;supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:anyDensity="true" /&gt;</strong></pre>
<pre><strong>&lt;uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4" /&gt;</strong></pre>
</blockquote>
<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2010%2F11%2F23%2Fandroid-ratingbar-probleme%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p class="wp-flattr-button"></p> <p><a href="http://www.jkoeber.de/?flattrss_redirect&amp;id=1045&amp;md5=74f4818279baf5bf86d9e5ec03cd6b4a" title="Flattr" target="_blank"><img src="http://www.jkoeber.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.jkoeber.de/2010/11/23/android-ratingbar-probleme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

