<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10russianfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en" xml:base="http://mobile-developer.ru/wp-atom.php">
	<title type="text">Программирование для мобильных устройств</title>
	<subtitle type="text">Программирование для мобильных устройств. Разработка для Windows Mobile, Windows CE, Embedded Linux, Google Android, iPhone, Palm webOS и др. Все о программировании для мобильных телефонов, смартфонов, КПК и других мобильных устройств. Статьи, новости, руководства, видео уроки.</subtitle>

	<updated>2012-03-15T22:41:41Z</updated>

	<link rel="alternate" type="text/html" href="http://mobile-developer.ru" />
	<id>http://mobile-developer.ru/feed/atom/</id>
	

	<generator uri="http://wordpress.org/" version="3.3.2">WordPress</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/mobile-developer" /><feedburner:info uri="mobile-developer" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>mobile-developer</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmobile-developer" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmobile-developer" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmobile-developer" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/mobile-developer" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmobile-developer" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fmobile-developer" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmobile-developer" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://lenta.yandex.ru/settings.xml?name=feed&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fmobile-developer" src="http://lenta.yandex.ru/i/addfeed.gif">?????? ? ??????.?????</feedburner:feedFlare><entry>
		<author>
			<name>T-Rex</name>
						<uri>http://mobile-developer.ru</uri>
					</author>
		<title type="html"><![CDATA[ActionBarSherlock – Удобная реализация UI-паттерна ActionBar для Android-приложений – Часть II]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/mobile-developer/~3/oYjt5pgiPNc/" />
		<id>http://mobile-developer.ru/?p=1490</id>
		<updated>2012-03-15T22:41:41Z</updated>
		<published>2012-03-15T22:41:41Z</published>
		<category scheme="http://mobile-developer.ru" term="Google Android" /><category scheme="http://mobile-developer.ru" term="SDK" /><category scheme="http://mobile-developer.ru" term="Tools" />		<summary type="html"><![CDATA[Это вторая часть рассказа о библиотеке ActionBar Sherlock, реализующей UI-паттерн ActionBar для Android-приложений, а также еще ряд дополнительных возможностей. В этой части речь пойдет о том, как можно реализовать навигацию в приложении с использованием ActionBar и какие для этого есть возможности в ActionBar Sherlock. Кастомная навигация В ActionBar Sherlock есть возможность разместить свой View внутри [...]<p>Post from: <a href="http://mobile-developer.ru">Mobile-Developer.ru</a><br/><br/><a href="http://mobile-developer.ru/tools/actionbarsherlock-udobnaya-realizaciya-ui-patterna-actionbar-dlya-android-prilozhenij-chast-ii/">ActionBarSherlock – Удобная реализация UI-паттерна ActionBar для Android-приложений – Часть II</a></p>
]]></summary>
		<content type="html" xml:base="http://mobile-developer.ru/tools/actionbarsherlock-udobnaya-realizaciya-ui-patterna-actionbar-dlya-android-prilozhenij-chast-ii/">&lt;p&gt;Это вторая часть рассказа о библиотеке &lt;a rel="nofollow" href="http://mobile-developer.ru/goto/actionbarsherlock.com"&gt;ActionBar Sherlock&lt;/a&gt;, реализующей &lt;a href="http://developer.android.com/design/patterns/actionbar.html" &gt;UI-паттерн ActionBar&lt;/a&gt; для Android-приложений, а также еще ряд дополнительных возможностей. В этой части речь пойдет о том, как можно реализовать навигацию в приложении с использованием ActionBar и какие для этого есть возможности в ActionBar Sherlock.&lt;br /&gt;
&lt;span id="more-1490"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Кастомная навигация&lt;/h4&gt;
&lt;p&gt;В ActionBar Sherlock есть возможность разместить свой View внутри ActionBar и использовать его для навигации. Так, например, можно разместить RadioGroup и при нажатии на RadioButton внутри нее переходить на нужную страницу в UI.&lt;br /&gt;
Пример такого XML-файла для контрола навигации ниже:&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;
    android:layout_width=&amp;quot;wrap_content&amp;quot;
    android:layout_height=&amp;quot;fill_parent&amp;quot;
    android:gravity=&amp;quot;left|center_vertical&amp;quot;
    android:orientation=&amp;quot;horizontal&amp;quot;
    &amp;gt;
    &amp;lt;RadioGroup
        android:id=&amp;quot;@+id/radio_nav&amp;quot;
        android:orientation=&amp;quot;horizontal&amp;quot;
        android:layout_width=&amp;quot;fill_parent&amp;quot;
        android:layout_height=&amp;quot;wrap_content&amp;quot;&amp;gt;
        &amp;lt;RadioButton
            android:id=&amp;quot;@+id/nav_page_a&amp;quot;
            android:text=&amp;quot;Page A&amp;quot;
            android:layout_width=&amp;quot;wrap_content&amp;quot;
            android:layout_height=&amp;quot;wrap_content&amp;quot;/&amp;gt;
        &amp;lt;RadioButton
            android:id=&amp;quot;@+id/nav_page_b&amp;quot;
            android:text=&amp;quot;Page B&amp;quot;
            android:layout_width=&amp;quot;wrap_content&amp;quot;
            android:layout_height=&amp;quot;wrap_content&amp;quot;/&amp;gt;
    &amp;lt;/RadioGroup&amp;gt;
&amp;lt;/LinearLayout&amp;gt;
&lt;/pre&gt;
&lt;p&gt;В коде Activity необходимо вызвать метод getSupportActionBar().setCustomView() и нужній контрол будет размещен в ActionBar.&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
public class ActionBarSherlockTestActivity extends SherlockActivity {

	static final int [] pages = {
		R.layout.page_a,
		R.layout.page_b
	};

	private void setPage(int page_index) {
		setContentView(pages[page_index]);
	}

    @Override
    public void onCreate(Bundle savedInstanceState) {
    	setTheme(R.style.Theme_Sherlock);
        super.onCreate(savedInstanceState);
        View customNav = getLayoutInflater().inflate(R.layout.cusom_navigation, null);

        ((RadioGroup)customNav.findViewById(R.id.radio_nav)).setOnCheckedChangeListener(new OnCheckedChangeListener() {
            public void onCheckedChanged(RadioGroup group, int checkedId) {
            	int page_index = checkedId == R.id.nav_page_a ? 0 : 1;
            	setPage(page_index);
            }

        });

        getSupportActionBar().setCustomView(customNav);
        getSupportActionBar().setDisplayShowCustomEnabled(true);
        setPage(0);
    }
}
&lt;/pre&gt;
&lt;p&gt;На вид получится так:&lt;br /&gt;
&lt;a href="http://mobile-developer.ru/wp-content/uploads/2012/03/appbar-sherlock-demo-2-1.png" &gt;&lt;img src="http://mobile-developer.ru/wp-content/uploads/2012/03/appbar-sherlock-demo-2-1.png" alt="" title="AppBar Sherlock - Custom Navigation demo" width="478" height="202" class="alignright size-full wp-image-1491" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Вкладки (Tabs)&lt;/h4&gt;
&lt;p&gt;Возможность работы с вкладками сама по себе очень полезна для отображения ограниченного количества страниц в интерфейсе пользователя (напомню что &amp;#8220;ограниченное количество страниц&amp;#8221;, согласно UI Design Guidelines это максимум 4 страницы).&lt;br /&gt;
Для того, чтобы иметь возможность отображать вкладки в ActionBar нужно указать для ActionBar режим &lt;code&gt;NAVIGATION_MODE_TABS&lt;/code&gt;. Делается это посредством метода &lt;code&gt;getSupportActionBar().setNavigationMode()&lt;/code&gt;. Затем нужно создать нужное количество объектов &lt;code&gt;Tab&lt;/code&gt; с помощью &lt;code&gt;getSupportActionBar().newTab()&lt;/code&gt;, заполнить в них информацию о вкладке (например заголовок и listener) и добавить в ActionBar с помощью &lt;code&gt;getSupportActionBar().addTab(tab)&lt;/code&gt;:&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
public class TabNavigation extends SherlockActivity i
		mplements ActionBar.TabListener {

	private TextView mSelected;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        ...
        setContentView(R.layout.tab_navigation);
        mSelected = (TextView)findViewById(R.id.text);

        getSupportActionBar().setNavigationMode(
			ActionBar.NAVIGATION_MODE_TABS);
        for (int i = 1; i &amp;lt;= 3; i++) {
            ActionBar.Tab tab = getSupportActionBar().newTab();
            tab.setText(&amp;quot;Tab &amp;quot; + i);
            tab.setTabListener(this);
            getSupportActionBar().addTab(tab);
        }
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction transaction) {
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction transaction) {
        mSelected.setText(&amp;quot;Selected: &amp;quot; + tab.getText());
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction transaction) {
    }
}
&lt;/pre&gt;
&lt;p&gt;В listener&amp;#8217;е можно получать уведомления о переходе на вкладку и выходе с вкладки.&lt;br /&gt;
По поводу же смены layout&amp;#8217;а, то этот функционал надо реализовывать самостоятельно.&lt;br /&gt;
Очень полезной является возможность отображать вкладки второй строкой в ActionBar в портретном режиме и встраивать их в ActionBar в ландшафтном режиме для экономии места.&lt;br /&gt;
&lt;a href="http://mobile-developer.ru/wp-content/uploads/2012/03/appbar-sherlock-demo-2-2-1.png" &gt;&lt;img src="http://mobile-developer.ru/wp-content/uploads/2012/03/appbar-sherlock-demo-2-2-1.png" alt="" title="Пример вкладок в ActionBar Sherlock для Android" width="480" height="375" class="alignright size-full wp-image-1494" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://mobile-developer.ru/wp-content/uploads/2012/03/appbar-sherlock-demo-2-2-2.png" &gt;&lt;img src="http://mobile-developer.ru/wp-content/uploads/2012/03/appbar-sherlock-demo-2-2-2.png" alt="" title="" width="480" height="151" class="alignright size-full wp-image-1495" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Навигация списком&lt;/h4&gt;
&lt;p&gt;Навигацию с помощью выпадающего списка есть смысл использовать для переходов между страницами, когда их больше 4х. Для того, чтобы с помощью ActionBar Sherlock реализовать выпадающий список в ActionBar нужно сделать следующее:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Указать Navigation Mode равным &lt;code&gt;NAVIGATION_MODE_LIST&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Установить адаптер с элементами навигации и listener для получения сообщений о навигации с помощью &lt;code&gt;getSupportActionBar().setListNavigationCallbacks()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В коде это будет выглядеть как-то так:&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
public class ListNavigation extends SherlockActivity
		implements ActionBar.OnNavigationListener {
    private TextView mSelected;
    private String[] mLocations;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        setTheme(SampleList.THEME); //Used for theme switching in samples
        super.onCreate(savedInstanceState);

        setContentView(R.layout.list_navigation);
        mSelected = (TextView)findViewById(R.id.text);

        mLocations = getResources().getStringArray(R.array.locations);

        Context context = getSupportActionBar().getThemedContext();
        ArrayAdapter&amp;lt;CharSequence&amp;gt; list = ArrayAdapter.createFromResource(
        		context, R.array.locations, R.layout.sherlock_spinner_item);
        list.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item);

        getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
        getSupportActionBar().setListNavigationCallbacks(list, this);
    }

    @Override
    public boolean onNavigationItemSelected(int itemPosition, long itemId) {
        mSelected.setText(&amp;quot;Selected: &amp;quot; + mLocations[itemPosition]);
        return true;
    }
}
&lt;/pre&gt;
&lt;p&gt;Визуально все это выглядит так:&lt;br /&gt;
&lt;a href="http://mobile-developer.ru/wp-content/uploads/2012/03/appbar-sherlock-demo-2-2.png" &gt;&lt;img src="http://mobile-developer.ru/wp-content/uploads/2012/03/appbar-sherlock-demo-2-2.png" alt="" title="Навигация списком в ActionBar Sherlock для Android" width="320" height="301" class="alignright size-full wp-image-1497" /&gt;&lt;/a&gt;&lt;br /&gt;
Функционал по смене лайаута надо тоже реализовывать руками.&lt;/p&gt;
&lt;h4&gt;Кнопка возврата&lt;/h4&gt;
&lt;p&gt;Есть также возможность отображения кнопки возврата в предыдущую activity в левой части ActionBar. Для этого использается метод &lt;code&gt;getSupportActionBar().setDisplayHomeAsUpEnabled()&lt;/code&gt;. В результате получаем такой внешний вид ActionBar:&lt;br /&gt;
&lt;a href="http://mobile-developer.ru/wp-content/uploads/2012/03/appbar-sherlock-demo-2-3.png" &gt;&lt;img src="http://mobile-developer.ru/wp-content/uploads/2012/03/appbar-sherlock-demo-2-3.png" alt="" title="appbar-sherlock-demo-2-3" width="320" height="143" class="alignright size-full wp-image-1499" /&gt;&lt;/a&gt;&lt;br /&gt;
Исходный код всех примеров можно скачать вместе с дистрибутивом библиотеки. Примеры, которые идут в поставке покрывают абсолютно все аспекты использования ActionBar Sherlock и, хотя не блещут элегантностью и богатством реализации дополнительных фич, не связанных с API самой библиотеки, позволяют понять что и как можно использовать в своем приложении.&lt;/p&gt;
&lt;p&gt;Post from: &lt;a href="http://mobile-developer.ru" &gt;Mobile-Developer.ru&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href="http://mobile-developer.ru/tools/actionbarsherlock-udobnaya-realizaciya-ui-patterna-actionbar-dlya-android-prilozhenij-chast-ii/" &gt;ActionBarSherlock – Удобная реализация UI-паттерна ActionBar для Android-приложений – Часть II&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rgWPtT6oc__-KJFL9m3UUBOmCzU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rgWPtT6oc__-KJFL9m3UUBOmCzU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rgWPtT6oc__-KJFL9m3UUBOmCzU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rgWPtT6oc__-KJFL9m3UUBOmCzU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=oYjt5pgiPNc:W8tkJR6yhnM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=oYjt5pgiPNc:W8tkJR6yhnM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=oYjt5pgiPNc:W8tkJR6yhnM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=oYjt5pgiPNc:W8tkJR6yhnM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=oYjt5pgiPNc:W8tkJR6yhnM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=oYjt5pgiPNc:W8tkJR6yhnM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=oYjt5pgiPNc:W8tkJR6yhnM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://mobile-developer.ru/tools/actionbarsherlock-udobnaya-realizaciya-ui-patterna-actionbar-dlya-android-prilozhenij-chast-ii/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://mobile-developer.ru/tools/actionbarsherlock-udobnaya-realizaciya-ui-patterna-actionbar-dlya-android-prilozhenij-chast-ii/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://mobile-developer.ru/tools/actionbarsherlock-udobnaya-realizaciya-ui-patterna-actionbar-dlya-android-prilozhenij-chast-ii/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>T-Rex</name>
						<uri>http://mobile-developer.ru</uri>
					</author>
		<title type="html"><![CDATA[Android 4.0 Ice Cream Sandwich UI PSD]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/mobile-developer/~3/2lVAk0HKGYk/" />
		<id>http://mobile-developer.ru/?p=1484</id>
		<updated>2012-03-12T19:00:34Z</updated>
		<published>2012-03-12T12:25:45Z</published>
		<category scheme="http://mobile-developer.ru" term="Google Android" /><category scheme="http://mobile-developer.ru" term="Tools" />		<summary type="html"><![CDATA[Парни из Posterous представили PSD шаблон интерфейса пользователя Android 4.0. В шаблоне есть лок-скрин, все стандартные контролы, клавиатура, меню, тоесть все что может понадобиться для прототипирования интерфейса Android-приложения. Скачать PSD файл можно здесь. На всякий случай напомню, что официальные стенсилы для Android 4.0 можно скачать здесь. Post from: Mobile-Developer.ruAndroid 4.0 Ice Cream Sandwich UI PSD<p>Post from: <a href="http://mobile-developer.ru">Mobile-Developer.ru</a><br/><br/><a href="http://mobile-developer.ru/tools/android-4-0-ice-cream-sandwich-ui-psd/">Android 4.0 Ice Cream Sandwich UI PSD</a></p>
]]></summary>
		<content type="html" xml:base="http://mobile-developer.ru/tools/android-4-0-ice-cream-sandwich-ui-psd/">&lt;p&gt;Парни из Posterous представили PSD шаблон интерфейса пользователя Android 4.0. В шаблоне есть лок-скрин, все стандартные контролы, клавиатура, меню, тоесть все что может понадобиться для прототипирования интерфейса Android-приложения.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mobile-developer.ru/wp-content/uploads/2012/03/android-ui-4.0-psd.png" &gt;&lt;img class="alignright size-full wp-image-1485" title="Android 4.0 UI PSD" src="http://mobile-developer.ru/wp-content/uploads/2012/03/android-ui-4.0-psd.png" alt="" width="455" height="500" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" href="http://mobile-developer.ru/goto/http://cl.ly/DYMZ"  title="Скачать Android 4.0 UI PSD"&gt;Скачать PSD файл можно здесь&lt;/a&gt;.&lt;br /&gt;
На всякий случай напомню, что &lt;a rel="nofollow" href="http://mobile-developer.ru/goto/https://developer.android.com/design/downloads/index.html"  title="Android 4.0 UI Stencils"&gt;официальные стенсилы для Android 4.0 можно скачать здесь&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Post from: &lt;a href="http://mobile-developer.ru" &gt;Mobile-Developer.ru&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href="http://mobile-developer.ru/tools/android-4-0-ice-cream-sandwich-ui-psd/" &gt;Android 4.0 Ice Cream Sandwich UI PSD&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LuoiCyEWAUuU7INXfzTD68KCzBI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LuoiCyEWAUuU7INXfzTD68KCzBI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LuoiCyEWAUuU7INXfzTD68KCzBI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LuoiCyEWAUuU7INXfzTD68KCzBI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=2lVAk0HKGYk:8epssSamArw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=2lVAk0HKGYk:8epssSamArw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=2lVAk0HKGYk:8epssSamArw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=2lVAk0HKGYk:8epssSamArw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=2lVAk0HKGYk:8epssSamArw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=2lVAk0HKGYk:8epssSamArw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=2lVAk0HKGYk:8epssSamArw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://mobile-developer.ru/tools/android-4-0-ice-cream-sandwich-ui-psd/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://mobile-developer.ru/tools/android-4-0-ice-cream-sandwich-ui-psd/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://mobile-developer.ru/tools/android-4-0-ice-cream-sandwich-ui-psd/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>T-Rex</name>
						<uri>http://mobile-developer.ru</uri>
					</author>
		<title type="html"><![CDATA[ActionBarSherlock &#8211; Удобная реализация UI-паттерна ActionBar для Android-приложений &#8211; Часть I]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/mobile-developer/~3/XV0zhxELH88/" />
		<id>http://mobile-developer.ru/?p=1458</id>
		<updated>2012-03-12T02:15:28Z</updated>
		<published>2012-03-12T02:15:09Z</published>
		<category scheme="http://mobile-developer.ru" term="Google Android" /><category scheme="http://mobile-developer.ru" term="Tools" /><category scheme="http://mobile-developer.ru" term="Без рубрики" />		<summary type="html"><![CDATA[Что-то пауза с постами у нас получается совсем нечеловеческая. Попробуем еще разок возобновить публикации. И сегодня мы познакомимся с библиотекой, реализующей UI-паттерн Action Bar для Android-приложений. Разработчики библиотеки позиционируют ее как расширение к Compatibility Library, которое для создания ActionBar использует нативную реализацию, если это поддерживается системой, или же вручную дублирует нужный функционал. Библиотека является open-source [...]<p>Post from: <a href="http://mobile-developer.ru">Mobile-Developer.ru</a><br/><br/><a href="http://mobile-developer.ru/uncategorized/actionbarsherlock-udobnaya-realizaciya-ui-patterna-actionbar-dlya-android-prilozhenij-chast-i/">ActionBarSherlock &#8211; Удобная реализация UI-паттерна ActionBar для Android-приложений &#8211; Часть I</a></p>
]]></summary>
		<content type="html" xml:base="http://mobile-developer.ru/uncategorized/actionbarsherlock-udobnaya-realizaciya-ui-patterna-actionbar-dlya-android-prilozhenij-chast-i/">&lt;p&gt;Что-то пауза с постами у нас получается совсем нечеловеческая. Попробуем еще разок возобновить публикации.&lt;br /&gt;
И сегодня мы познакомимся с библиотекой, реализующей &lt;a rel="nofollow" href="http://mobile-developer.ru/goto/http://developer.android.com/design/patterns/actionbar.html" &gt;UI-паттерн Action Bar&lt;/a&gt; для Android-приложений.&lt;/p&gt;
&lt;p&gt;Разработчики библиотеки позиционируют ее как расширение к &lt;a rel="nofollow" href="http://mobile-developer.ru/goto/http://developer.android.com/sdk/compatibility-library.html" &gt;Compatibility Library&lt;/a&gt;, которое для создания ActionBar использует нативную реализацию, если это поддерживается системой, или же вручную дублирует нужный функционал.&lt;/p&gt;
&lt;p&gt;Библиотека является open-source проектом и &lt;a rel="nofollow" href="http://mobile-developer.ru/goto/https://github.com/JakeWharton/ActionBarSherlock/" &gt;доступна для загрузки на GitHub&lt;/a&gt;.&lt;br /&gt;
&lt;span id="more-1458"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Начало&lt;/h4&gt;
&lt;p&gt;Начать пользоваться библиотекой довольно просто. Нужно сделать вот что:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Унаследовать активити от SherlockActivity (или SherlockListActivity)&lt;/li&gt;
&lt;li&gt;Переопределить метод onCreateOptionsMenu() и в нем заполнить объект Menu информацией о кнопках&lt;/li&gt;
&lt;li&gt;В onCreate() или в манифесте указать что используется тема Theme_Sherlock&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В итоге код получится приблизительно таким:&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
package ru.mobiledeveloper.actionbarsherlocktest;

import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;

import android.os.Bundle;
import ru.mobiledeveloper.actionbarsherlocktest.R;

public class ActionBarSherlockTestActivity extends SherlockActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
    	setTheme(R.style.Theme_Sherlock);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(&amp;quot;Save&amp;quot;)
            .setIcon(R.drawable.ic_compose)
            .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

        menu.add(&amp;quot;Search&amp;quot;)
            .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM |
                MenuItem.SHOW_AS_ACTION_WITH_TEXT);

        return true;
    }
}
&lt;/pre&gt;
&lt;p&gt;В результате получим такой внешний вид окна приложения:&lt;br /&gt;
&lt;a href="http://mobile-developer.ru/wp-content/uploads/2012/03/actionbar-sherlock-demo-1.png" &gt;&lt;img src="http://mobile-developer.ru/wp-content/uploads/2012/03/actionbar-sherlock-demo-1.png" alt="" title="Пример простейшего приложения с ActionBar Sherlock для Android" width="320" class="alignright size-full wp-image-1459" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Режим действия&lt;/h4&gt;
&lt;p&gt;ActionBar Sherlock поддерживает возможность отображения контекстно-зависимого содержания. Такая возможность называется режим действий (ActionMode). режим действий можно использовать, например, для отображения контекстного &amp;#8220;меню&amp;#8221; при длинном нажатии на єлемент списка.&lt;br /&gt;
Для того, чтобі добавить возможность отображать режим действий в приложение, нужно сделать следующее:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Создать класс, производный от &lt;code&gt;ActionMode.Callback&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Реализовать в этом классе метод &lt;code&gt;onCreateActionMode()&lt;/code&gt;, в котором добавить нужные команды.&lt;/li&gt;
&lt;li&gt;Реализовать в этом классе метод &lt;code&gt;onActionItemClicked()&lt;/code&gt;, в котором написать код, обрабатывающий нажатия на кнопки в ActionBar&lt;/li&gt;
&lt;li&gt;Для перехода в режим действий вызвать метод &lt;code&gt;startActionMode()&lt;/code&gt; и в качестве параметра передать ему объект выше указанного класса&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В коде это выглядит приблизительно так:&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
public class ActionBarSherlockTestActivity extends SherlockActivity {

	ActionMode mMode;

	private final class ActionModeA implements ActionMode.Callback {

        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            menu.add(&amp;quot;Save&amp;quot;)
                .setIcon(R.drawable.ic_compose)
                .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
            menu.add(&amp;quot;Search&amp;quot;)
                .setIcon(R.drawable.ic_search)
                .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
            return true;
        }

		public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
			// TODO Auto-generated method stub
			return false;
		}

		public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
			Toast.makeText(ActionBarSherlockTestActivity.this,
                            &amp;quot;Got click: &amp;quot; + item, Toast.LENGTH_SHORT).show();
            mode.finish();
			return true;
		}

		public void onDestroyActionMode(ActionMode mode) {
			// TODO Auto-generated method stub

		}

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
    	setTheme(R.style.Theme_Sherlock);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btnTest = (Button)findViewById(R.id.btnTest);
        if(btnTest != null) {
        	btnTest.setOnClickListener(new OnClickListener() {

				public void onClick(View v) {
					mMode = startActionMode(new ActionModeA());
				}
			});
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(&amp;quot;Save&amp;quot;)
            .setIcon(R.drawable.ic_compose)
            .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

        menu.add(&amp;quot;Search&amp;quot;)
            .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM |
                MenuItem.SHOW_AS_ACTION_WITH_TEXT);
        return true;
    }
}
&lt;/pre&gt;
&lt;p&gt;И в результате получаем такое:&lt;br /&gt;
&lt;a href="http://mobile-developer.ru/wp-content/uploads/2012/03/actionbar-sherlock-demo-2.png" &gt;&lt;img src="http://mobile-developer.ru/wp-content/uploads/2012/03/actionbar-sherlock-demo-2-300x137.png" alt="" title="Простейший пример реализации ActionMode в ActionBar Sherlock для Android" width="300" height="137" class="alignright size-medium wp-image-1464" /&gt;&lt;/a&gt;&lt;br /&gt;
Существует, также, возможность отображать ActionBar только в режиме Action Mode и скрывать ее в остальное время работы приложения. Для этого в &lt;code&gt;onCreate()&lt;/code&gt; надо вызвать &lt;code&gt;requestWindowFeature(Window.FEATURE_NO_TITLE)&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Провайдеры действий&lt;/h4&gt;
&lt;p&gt;ActionBar Sherlock поддерживает работу с провайдерами действий (Action Provider), которые позволяют реализовать отображение собственных виджетов в ActionBar и добавить более гибкое взаимодействие с пользователем. Action Provier можно повторно использовать в нескольких активитях.&lt;br /&gt;
Есть две возможности указать Action Provider для элемента &amp;#8211; прописать его в XML файле для пункта меню или указать в коде с помощью &lt;code&gt;setActionProvider()&lt;/code&gt;.&lt;br /&gt;
Рассмотрим реализацию Action Provider&amp;#8217;а, который по нажатию на кнопку в ActionBar открывает системные настройки:&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
public static class SettingsActionProvider extends ActionProvider {
	private static final Intent sSettingsIntent = new Intent(Settings.ACTION_SETTINGS);

	private final Context mContext;

    public SettingsActionProvider(Context context) {
        super(context);
        mContext = context;
    }

    @Override
    public View onCreateActionView() {
        LayoutInflater layoutInflater = LayoutInflater.from(mContext);
        View view = layoutInflater.inflate(R.layout.settings_action_provider, null);
        ImageButton button = (ImageButton) view.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                mContext.startActivity(sSettingsIntent);
            }
        });
        return view;
    }

    @Override
    public boolean onPerformDefaultAction() {
        mContext.startActivity(sSettingsIntent);
        return true;
    }
}
...
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Этот элемент будет отображен в ActionBar
    menu.add(&amp;quot;Settings&amp;quot;)
        .setActionProvider(new SettingsActionProvider(
        		ActionBarSherlockTestActivity.this))
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM |
        		MenuItem.SHOW_AS_ACTION_WITH_TEXT);

    // Этот элемент будет отображен в стандартном меню
    menu.add(&amp;quot;Settings&amp;quot;)
        .setActionProvider(new SettingsActionProvider(
        		ActionBarSherlockTestActivity.this))
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
    return true;
}
&lt;/pre&gt;
&lt;p&gt;XML-файл для кнопки:&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;
    android:layout_width=&amp;quot;wrap_content&amp;quot;
    android:layout_height=&amp;quot;match_parent&amp;quot;
    android:layout_gravity=&amp;quot;center&amp;quot;
    android:focusable=&amp;quot;true&amp;quot;
    android:addStatesFromChildren=&amp;quot;true&amp;quot;
    android:background=&amp;quot;?attr/actionBarItemBackground&amp;quot;
    style=&amp;quot;?attr/actionButtonStyle&amp;quot;&amp;gt;
    &amp;lt;ImageButton android:id=&amp;quot;@+id/button&amp;quot;
        android:background=&amp;quot;@drawable/ic_launcher_settings&amp;quot;
        android:layout_width=&amp;quot;32dip&amp;quot;
        android:layout_height=&amp;quot;32dip&amp;quot;
        android:layout_gravity=&amp;quot;center&amp;quot;
        android:scaleType=&amp;quot;fitCenter&amp;quot;
        android:adjustViewBounds=&amp;quot;true&amp;quot; /&amp;gt;
&amp;lt;/LinearLayout&amp;gt;
&lt;/pre&gt;
&lt;p&gt;После создания провайдера действий и добавления его к пунктам меню получим такое:&lt;br /&gt;
&lt;a href="http://mobile-developer.ru/wp-content/uploads/2012/03/actionbar-sherlock-demo-3.png" &gt;&lt;img src="http://mobile-developer.ru/wp-content/uploads/2012/03/actionbar-sherlock-demo-3.png" alt="" title="Пример использования Action Provider в ActionBar Sherlock для Android" width="300" height="127" class="alignright size-full wp-image-1467" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Collapsible Actions&lt;/h4&gt;
&lt;p&gt;Есть возможность, при нажатии на пункт меню, отображать собственный контрол на всю ширину ActionBar. Например, для поиска можно отображать текстовое поле. Сделать это можно, указав дайаут с помощью &lt;code&gt;setActionView()&lt;/code&gt; и стиль &lt;code&gt;MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW&lt;/code&gt;.&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
public boolean onCreateOptionsMenu(Menu menu) {
    boolean isLight = SampleList.THEME == R.style.Theme_Sherlock_Light;
    menu.add(&amp;quot;Search&amp;quot;)
        .setIcon(isLight ? R.drawable.ic_search_inverse : R.drawable.ic_search)
        .setActionView(R.layout.collapsible_edittext)
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS |
                MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
    return true;
}
&lt;/pre&gt;
&lt;p&gt;При нажатии на пункт в ActionBar будет отображен контрол из XML файла collapsible_edittext.xml.&lt;br /&gt;
&lt;a href="http://mobile-developer.ru/wp-content/uploads/2012/03/actionbar-sherlock-demo-4.png" &gt;&lt;img src="http://mobile-developer.ru/wp-content/uploads/2012/03/actionbar-sherlock-demo-4-300x145.png" alt="" title="Пример Collapsible Actions в ActionBar Sherlock для Android" width="300" height="145" class="alignright size-medium wp-image-1470" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Полезные функции&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Индикатор прогресса&lt;/strong&gt;&lt;br /&gt;
Есть возможность отобразить индикатор прогресса в ActionBar. Такая возможность может быть полезна для отображения прогресса длительной операции. Сделать это можно с помощью метода &lt;code&gt;setSupportProgressBarIndeterminateVisibility()&lt;/code&gt;.&lt;br /&gt;
&lt;strong&gt;Оверлей&lt;/strong&gt;&lt;br /&gt;
Можно отображать ActionBar поверх контента при скроллинге. Очень полезная возможность, например, при просмотре текстов. Перевести ActinBar в режим оверлея можно с помощью метода &lt;code&gt;requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY)&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Различные типы активитей&lt;/h4&gt;
&lt;p&gt;В ActionBar Sherlock помимо обычной активити есть классы для отображения активитей со списками, активитей настройки, диалогов.&lt;br /&gt;
&lt;strong&gt;SherlockPreferenceActivity&lt;/strong&gt;&lt;br /&gt;
Этот класс используется для отображения окон настройки. Функционал аналогичен PreferenceActivity из Android SDK.&lt;br /&gt;
&lt;a href="http://mobile-developer.ru/wp-content/uploads/2012/03/actionbar-sherlock-demo-5.png" &gt;&lt;img src="http://mobile-developer.ru/wp-content/uploads/2012/03/actionbar-sherlock-demo-5.png" alt="" title="SherlockPreferenceActivity - пример внешнего вида" width="320" height="569" class="alignright size-full wp-image-1472" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;strong&gt;SherlockListActivity и SherlockExpandableListActivity&lt;/strong&gt;&lt;br /&gt;
Это активити, производные от ListActivity и ExpandableListActivity соответственно, в которую добавлен функционал по работе с ActionBar.&lt;br /&gt;
&lt;strong&gt;Диалоги&lt;/strong&gt;&lt;br /&gt;
Есть возможность отображать активити в виде диалогов. Для этого надо указать соответствующую тему в манифесте (необходимо указывать тему именно в манифесте).&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
&amp;lt;activity
    android:name=&amp;quot;.Dialog&amp;quot;
    android:label=&amp;quot;@string/dialog&amp;quot;
    android:theme=&amp;quot;@style/Theme.Sherlock.Dialog&amp;quot;&amp;gt;
    &amp;lt;intent-filter&amp;gt;
        &amp;lt;action android:name=&amp;quot;android.intent.action.MAIN&amp;quot; /&amp;gt;
        &amp;lt;category android:name=&amp;quot;com.actionbarsherlock.sample.demos.EXAMPLE&amp;quot; /&amp;gt;
    &amp;lt;/intent-filter&amp;gt;
&amp;lt;/activity&amp;gt;
&lt;/pre&gt;
&lt;p&gt;На вид выглядит так:&lt;br /&gt;
&lt;a href="http://mobile-developer.ru/wp-content/uploads/2012/03/actionbar-sherlock-demo-6.png" &gt;&lt;img src="http://mobile-developer.ru/wp-content/uploads/2012/03/actionbar-sherlock-demo-6-300x236.png" alt="" title="Пример диалога в ActionBar Sherlock для Android" width="300" height="236" class="alignright size-medium wp-image-1474" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Пара слов о навигации&lt;/h4&gt;
&lt;p&gt;В ActionBar Sherlock есть возможность организовать навигацию внутри приложения средствами ActionBar. Визуально получается очень приятный результат, например можно реализовать навигацию посредством выпадающего списка или вкладками или еще каким-либо способом, встроив контрол для навигации в ActionBar.&lt;br /&gt;
&lt;a href="http://mobile-developer.ru/wp-content/uploads/2012/03/actionbar-sherlock-demo-7.png" &gt;&lt;img src="http://mobile-developer.ru/wp-content/uploads/2012/03/actionbar-sherlock-demo-7-300x281.png" alt="" title="Пример навигации списком в ActionBar Sherlock" width="300" height="281" class="alignright size-medium wp-image-1477" /&gt;&lt;/a&gt;&lt;br /&gt;
Более подробно реализацию навигации рассмотрим в следующей части статьи.&lt;/p&gt;
&lt;p&gt;Post from: &lt;a href="http://mobile-developer.ru" &gt;Mobile-Developer.ru&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href="http://mobile-developer.ru/uncategorized/actionbarsherlock-udobnaya-realizaciya-ui-patterna-actionbar-dlya-android-prilozhenij-chast-i/" &gt;ActionBarSherlock &amp;#8211; Удобная реализация UI-паттерна ActionBar для Android-приложений &amp;#8211; Часть I&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ch3ufKfZYcmXZ6UV_K2Z3JKPJcs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ch3ufKfZYcmXZ6UV_K2Z3JKPJcs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ch3ufKfZYcmXZ6UV_K2Z3JKPJcs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ch3ufKfZYcmXZ6UV_K2Z3JKPJcs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=XV0zhxELH88:JmODXD1cT10:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=XV0zhxELH88:JmODXD1cT10:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=XV0zhxELH88:JmODXD1cT10:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=XV0zhxELH88:JmODXD1cT10:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=XV0zhxELH88:JmODXD1cT10:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=XV0zhxELH88:JmODXD1cT10:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=XV0zhxELH88:JmODXD1cT10:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://mobile-developer.ru/uncategorized/actionbarsherlock-udobnaya-realizaciya-ui-patterna-actionbar-dlya-android-prilozhenij-chast-i/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://mobile-developer.ru/uncategorized/actionbarsherlock-udobnaya-realizaciya-ui-patterna-actionbar-dlya-android-prilozhenij-chast-i/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://mobile-developer.ru/uncategorized/actionbarsherlock-udobnaya-realizaciya-ui-patterna-actionbar-dlya-android-prilozhenij-chast-i/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>T-Rex</name>
						<uri>http://mobile-developer.ru</uri>
					</author>
		<title type="html"><![CDATA[Исходные коды JavaScript-фреймворка Enyo (из WebOS) выложены в open-source!]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/mobile-developer/~3/Oh42ZalgD4Q/" />
		<id>http://mobile-developer.ru/?p=1451</id>
		<updated>2012-01-26T09:00:13Z</updated>
		<published>2012-01-26T09:00:13Z</published>
		<category scheme="http://mobile-developer.ru" term="News" /><category scheme="http://mobile-developer.ru" term="SDK" /><category scheme="http://mobile-developer.ru" term="Tools" /><category scheme="http://mobile-developer.ru" term="Без рубрики" /><category scheme="http://mobile-developer.ru" term="Enyo" /><category scheme="http://mobile-developer.ru" term="JavaScript" /><category scheme="http://mobile-developer.ru" term="Mobile Web" />		<summary type="html"><![CDATA[HP выложила в свободный доступ исходные коды JS-фреймворка Enyo (из WebOS 2.x) под лицензией Apache 2.0. Этот кросс-платформенный фреймворк весит всего 13 кб и может быть использован для разработки приложений не только для WebOS, но и для Android. Помимо исходного кода разработчикам доступен Playground, где можно написать любой код на Enyo и посмотреть как он [...]<p>Post from: <a href="http://mobile-developer.ru">Mobile-Developer.ru</a><br/><br/><a href="http://mobile-developer.ru/uncategorized/isxodnye-kody-javascript-frejmvorka-enyo-iz-webos-vylozheny-v-open-source/">Исходные коды JavaScript-фреймворка Enyo (из WebOS) выложены в open-source!</a></p>
]]></summary>
		<content type="html" xml:base="http://mobile-developer.ru/uncategorized/isxodnye-kody-javascript-frejmvorka-enyo-iz-webos-vylozheny-v-open-source/">&lt;p&gt;&lt;a href="http://mobile-developer.ru/wp-content/uploads/2012/01/enyo-js.jpg" &gt;&lt;img align="right" class="alignright size-full wp-image-1452" title="Enyo" src="http://mobile-developer.ru/wp-content/uploads/2012/01/enyo-js.jpg" alt="" width="200" height="200" /&gt;&lt;/a&gt;HP выложила в свободный доступ исходные коды JS-фреймворка &lt;a rel="nofollow" href="http://mobile-developer.ru/goto/http://enyojs.com/" title="Enyo JS Framework"  target="_blank"&gt;Enyo&lt;/a&gt; (из WebOS 2.x) под лицензией &lt;a rel="nofollow" href="http://mobile-developer.ru/goto/http://www.apache.org/licenses/LICENSE-2.0.html"  target="_blank"&gt;Apache 2.0&lt;/a&gt;. Этот кросс-платформенный фреймворк весит всего 13 кб и может быть использован для разработки приложений не только для WebOS, но и для Android.&lt;/p&gt;
&lt;p&gt;Помимо исходного кода разработчикам доступен &lt;a rel="nofollow" href="http://mobile-developer.ru/goto/http://enyojs.com/samples/playground/" title="Enyo PlayGround"  target="_blank"&gt;Playground&lt;/a&gt;, где можно написать любой код на Enyo и посмотреть как он работает.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Скачать исходный код можно &lt;a rel="nofollow" href="http://mobile-developer.ru/goto/https://github.com/downloads/enyojs/enyo/enyo-2.0b.zip" title="Download Enyo Framework 2.0"  target="_blank"&gt;здесь&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Примеры приложений можно посмотреть &lt;a rel="nofollow" href="http://mobile-developer.ru/goto/http://enyojs.com/#samples" title="Enyo Sample Applications"  target="_blank"&gt;здесь&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a rel="nofollow" href="http://mobile-developer.ru/goto/https://github.com/enyojs" title="Enyo @ GutHub"  target="_blank"&gt;Проект на GitHub&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Post from: &lt;a href="http://mobile-developer.ru" &gt;Mobile-Developer.ru&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href="http://mobile-developer.ru/uncategorized/isxodnye-kody-javascript-frejmvorka-enyo-iz-webos-vylozheny-v-open-source/" &gt;Исходные коды JavaScript-фреймворка Enyo (из WebOS) выложены в open-source!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AV2sBXBIGaRokoUQBHSlz9BzZbw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AV2sBXBIGaRokoUQBHSlz9BzZbw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AV2sBXBIGaRokoUQBHSlz9BzZbw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AV2sBXBIGaRokoUQBHSlz9BzZbw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=Oh42ZalgD4Q:Emvm4_OqVts:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=Oh42ZalgD4Q:Emvm4_OqVts:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=Oh42ZalgD4Q:Emvm4_OqVts:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=Oh42ZalgD4Q:Emvm4_OqVts:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=Oh42ZalgD4Q:Emvm4_OqVts:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=Oh42ZalgD4Q:Emvm4_OqVts:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=Oh42ZalgD4Q:Emvm4_OqVts:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://mobile-developer.ru/uncategorized/isxodnye-kody-javascript-frejmvorka-enyo-iz-webos-vylozheny-v-open-source/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://mobile-developer.ru/uncategorized/isxodnye-kody-javascript-frejmvorka-enyo-iz-webos-vylozheny-v-open-source/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://mobile-developer.ru/uncategorized/isxodnye-kody-javascript-frejmvorka-enyo-iz-webos-vylozheny-v-open-source/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>T-Rex</name>
						<uri>http://mobile-developer.ru</uri>
					</author>
		<title type="html"><![CDATA[Google запустил сайт по дизайну Android-приложений]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/mobile-developer/~3/2Q6Ad2siSzM/" />
		<id>http://mobile-developer.ru/?p=1446</id>
		<updated>2012-01-12T22:59:15Z</updated>
		<published>2012-01-12T22:59:15Z</published>
		<category scheme="http://mobile-developer.ru" term="Google Android" /><category scheme="http://mobile-developer.ru" term="News" /><category scheme="http://mobile-developer.ru" term="Без рубрики" />		<summary type="html"><![CDATA[Сегодня в Google Developers Blog появился анонс о новом разделе сайта для разработчиков, в котором будут освещаться вопросы, связанные с дизайном приложений для платформы Android. На сайте можно найти документацию о проектировании интерфейса Android-приложений, работающих на устройствах с различными размерами и различными разрешениями экранов, описание типовых шаблонов проектирования интерфейса приложений (таких как Action Bar, Swipe [...]<p>Post from: <a href="http://mobile-developer.ru">Mobile-Developer.ru</a><br/><br/><a href="http://mobile-developer.ru/uncategorized/google-zapustil-sajt-po-dizajnu-android-prilozhenij/">Google запустил сайт по дизайну Android-приложений</a></p>
]]></summary>
		<content type="html" xml:base="http://mobile-developer.ru/uncategorized/google-zapustil-sajt-po-dizajnu-android-prilozhenij/">&lt;p&gt;Сегодня в Google Developers Blog появился анонс о &lt;a rel="nofollow" href="http://mobile-developer.ru/goto/http://developer.android.com/design/index.html" title="Android Design"  target="_blank"&gt;новом разделе сайта для разработчиков&lt;/a&gt;, в котором будут освещаться вопросы, связанные с дизайном приложений для платформы Android.&lt;/p&gt;
&lt;p&gt;На сайте можно найти документацию о проектировании интерфейса Android-приложений, работающих на устройствах с различными размерами и различными разрешениями экранов, описание типовых шаблонов проектирования интерфейса приложений (таких как Action Bar, Swipe Views и т.д.), узнать больше о стандартных компонентах Android и новой теме оформления в Ice Cream Sandwich.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mobile-developer.ru/wp-content/uploads/2012/01/android-design.png" &gt;&lt;img class="alignnone size-full wp-image-1447" title="" src="http://mobile-developer.ru/wp-content/uploads/2012/01/android-design.png" alt="" width="608" height="473" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Post from: &lt;a href="http://mobile-developer.ru" &gt;Mobile-Developer.ru&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href="http://mobile-developer.ru/uncategorized/google-zapustil-sajt-po-dizajnu-android-prilozhenij/" &gt;Google запустил сайт по дизайну Android-приложений&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-5188470588945412";
/* 468x60 - mobile-developer.ru */
google_ad_slot = "3657023452";
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zMAw6fym_RMgaBkHGMGOA5wl78E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zMAw6fym_RMgaBkHGMGOA5wl78E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zMAw6fym_RMgaBkHGMGOA5wl78E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zMAw6fym_RMgaBkHGMGOA5wl78E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=2Q6Ad2siSzM:YyV-IqCA5Fo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=2Q6Ad2siSzM:YyV-IqCA5Fo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=2Q6Ad2siSzM:YyV-IqCA5Fo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=2Q6Ad2siSzM:YyV-IqCA5Fo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=2Q6Ad2siSzM:YyV-IqCA5Fo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=2Q6Ad2siSzM:YyV-IqCA5Fo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=2Q6Ad2siSzM:YyV-IqCA5Fo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://mobile-developer.ru/uncategorized/google-zapustil-sajt-po-dizajnu-android-prilozhenij/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://mobile-developer.ru/uncategorized/google-zapustil-sajt-po-dizajnu-android-prilozhenij/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://mobile-developer.ru/uncategorized/google-zapustil-sajt-po-dizajnu-android-prilozhenij/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>T-Rex</name>
						<uri>http://mobile-developer.ru</uri>
					</author>
		<title type="html"><![CDATA[Наша Android-игра на конкурсе мобильных приложений от HTC]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/mobile-developer/~3/d2X3KO6x6ko/" />
		<id>http://mobile-developer.ru/?p=1433</id>
		<updated>2011-05-01T09:56:38Z</updated>
		<published>2011-05-01T09:46:30Z</published>
		<category scheme="http://mobile-developer.ru" term="Projects" /><category scheme="http://mobile-developer.ru" term="Google Android" />		<summary type="html"><![CDATA[Зарелизили Android-версию Tetra Master&#8216;а, мини-игры из Final Fantasy IX и отправили на конкурс Android-приоложений от HTC. Кому интересно &#8211; страница приложения на конкурсе здесь. Игра доступна в маркете для бесплатной загрузки, работает на телефонах и таблетках с Android OS 1.6 и выше. В игре есть поддержка русского, украинского, английского языка. Всем сочувствующим просьба: проголосуйте за [...]<p>Post from: <a href="http://mobile-developer.ru">Mobile-Developer.ru</a><br/><br/><a href="http://mobile-developer.ru/projects/nasha-android-igra-na-konkurse-mobilnyx-prilozhenij-ot-htc/">Наша Android-игра на конкурсе мобильных приложений от HTC</a></p>
]]></summary>
		<content type="html" xml:base="http://mobile-developer.ru/projects/nasha-android-igra-na-konkurse-mobilnyx-prilozhenij-ot-htc/">&lt;p&gt;Зарелизили Android-версию &lt;a rel="nofollow" href="http://mobile-developer.ru/goto/http://ru.finalfantasy.wikia.com/wiki/%D0%A2%D0%B5%D1%82%D1%80%D0%B0_%D0%9C%D0%B0%D1%81%D1%82%D0%B5%D1%80" title="Tetra Master - Правила игры и описание"  target="_blank"&gt;Tetra Master&lt;/a&gt;&amp;#8216;а,  мини-игры из Final Fantasy IX и отправили на &lt;strong&gt;конкурс Android-приоложений от HTC&lt;/strong&gt;.&lt;br /&gt;
Кому интересно &amp;#8211; &lt;a rel="nofollow" href="http://mobile-developer.ru/goto/http://bit.ly/jeNmC9" title="Tetra Master для Android на конкурсе приложений от HTC"  target="_blank"&gt;страница приложения на конкурсе здесь&lt;/a&gt;.&lt;br /&gt;
Игра доступна в маркете для бесплатной загрузки, работает на телефонах и таблетках с Android OS 1.6 и выше.&lt;/p&gt;
&lt;p&gt;В игре есть поддержка русского, украинского, английского языка.&lt;/p&gt;
&lt;p&gt;Всем сочувствующим просьба: &lt;a rel="nofollow" href="http://mobile-developer.ru/goto/http://bit.ly/jeNmC9" title="Голосовать за Tetra Master на конкурсе Android-приложений"  target="_blank"&gt;проголосуйте за игру в конкурсе (звездочками)&lt;/a&gt;?&lt;br /&gt;
Комментарии\советы по улучшению, багрепорты в маркете приветствуются, в ближайшее время планируем сетевой геймплей!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mobile-developer.ru/wp-content/uploads/2011/05/3.png" &gt;&lt;img class="alignnone size-medium wp-image-1434" title="Tetra Master для Android" src="http://mobile-developer.ru/wp-content/uploads/2011/05/3-180x300.png" alt="" width="180" height="300" /&gt; &lt;a href="http://mobile-developer.ru/wp-content/uploads/2011/05/1.png"&gt;&lt;img class="alignnone size-medium wp-image-1435" title="Tetra Master для Android" src="http://mobile-developer.ru/wp-content/uploads/2011/05/1-180x300.png" alt="" width="180" height="300" /&gt;&lt;/a&gt;&lt;/a&gt; &lt;a href="http://mobile-developer.ru/wp-content/uploads/2011/05/2.png" &gt;&lt;img class="alignnone size-medium wp-image-1436" title="Tetra Master для Android" src="http://mobile-developer.ru/wp-content/uploads/2011/05/2-180x300.png" alt="" width="180" height="300" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Post from: &lt;a href="http://mobile-developer.ru" &gt;Mobile-Developer.ru&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href="http://mobile-developer.ru/projects/nasha-android-igra-na-konkurse-mobilnyx-prilozhenij-ot-htc/" &gt;Наша Android-игра на конкурсе мобильных приложений от HTC&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7fwPG1i95eE_3ctM1fPuZuAgGvM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7fwPG1i95eE_3ctM1fPuZuAgGvM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7fwPG1i95eE_3ctM1fPuZuAgGvM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7fwPG1i95eE_3ctM1fPuZuAgGvM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=d2X3KO6x6ko:tjpujobgbSI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=d2X3KO6x6ko:tjpujobgbSI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=d2X3KO6x6ko:tjpujobgbSI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=d2X3KO6x6ko:tjpujobgbSI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=d2X3KO6x6ko:tjpujobgbSI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=d2X3KO6x6ko:tjpujobgbSI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=d2X3KO6x6ko:tjpujobgbSI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://mobile-developer.ru/projects/nasha-android-igra-na-konkurse-mobilnyx-prilozhenij-ot-htc/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://mobile-developer.ru/projects/nasha-android-igra-na-konkurse-mobilnyx-prilozhenij-ot-htc/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://mobile-developer.ru/projects/nasha-android-igra-na-konkurse-mobilnyx-prilozhenij-ot-htc/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>T-Rex</name>
						<uri>http://mobile-developer.ru</uri>
					</author>
		<title type="html"><![CDATA[Настраиваем внешний вид текстовых полей в Palm WebOS]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/mobile-developer/~3/lw717DPrRKo/" />
		<id>http://mobile-developer.ru/?p=1425</id>
		<updated>2010-11-07T22:41:40Z</updated>
		<published>2010-11-07T22:40:24Z</published>
		<category scheme="http://mobile-developer.ru" term="webOS" /><category scheme="http://mobile-developer.ru" term="Palm" />		<summary type="html"><![CDATA[Текстовые поля &#8211; это наиболее часто используемый контрол в WebOS-приложениях. Но когда речь заходит о настройке внешнего вида этого контрола, оказывается что все не так просто. Стандартный вид WebOS приложений не всегда вызывает у пользователей положительные эмоции и Wow-эффект, поэтому довольно часто требуется изменить внешний вид приложения. Как это можно сделать &#8211; рассмотрим в этот [...]<p>Post from: <a href="http://mobile-developer.ru">Mobile-Developer.ru</a><br/><br/><a href="http://mobile-developer.ru/webos/nastraivaem-vneshnij-vid-tekstovyx-polej-v-palm-webos/">Настраиваем внешний вид текстовых полей в Palm WebOS</a></p>
]]></summary>
		<content type="html" xml:base="http://mobile-developer.ru/webos/nastraivaem-vneshnij-vid-tekstovyx-polej-v-palm-webos/">&lt;p&gt;Текстовые поля &amp;#8211; это наиболее часто используемый контрол в WebOS-приложениях. Но когда речь заходит о настройке внешнего вида этого контрола, оказывается что все не так просто. Стандартный вид WebOS приложений не всегда вызывает у пользователей положительные эмоции и Wow-эффект, поэтому довольно часто требуется изменить внешний вид приложения. Как это можно сделать &amp;#8211; рассмотрим в этот раз.&lt;span id="more-1425"&gt;&lt;/span&gt;&lt;br /&gt;
&amp;#8220;Из коробки&amp;#8221; внешний вид текстовых полей ужасен и уныл (см. скриншот):&lt;br /&gt;
&lt;a href="http://mobile-developer.ru/wp-content/uploads/2010/11/styled-textfields-webos-1.png" &gt;&lt;img src="http://mobile-developer.ru/wp-content/uploads/2010/11/styled-textfields-webos-1.png" alt="" title="Custom TextField in Palm WebOS" width="320" height="480" class="alignnone size-full wp-image-1426" /&gt;&lt;/a&gt;&lt;br /&gt;
Это все, чего мы можем добиться, разместив TextField прямо в коде сцены:&lt;br /&gt;
&lt;strong&gt;simple-scele.html&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
&amp;lt;div class=&amp;quot;palm-hasheader&amp;quot;&amp;gt;
  &amp;lt;div class=&amp;quot;palm-header&amp;quot;&amp;gt;Simple TextField&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;palm-header-spacer&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;SimpleTextField&amp;quot; x-mojo-element=&amp;quot;TextField&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;simple-assistant.js&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="brush: jscript; title: ; notranslate"&gt;
function SimpleAssistant() {
}

SimpleAssistant.prototype.setup = function() {
	this.controller.setupWidget('SimpleTextField', {hintText: 'Simple'}, {});
};
&lt;/pre&gt;
&lt;p&gt;Как-то привести TextField к более-менее вменяемому виду можно, поместив его внутрь групбокса, а в групбокс список, а в список элемент списка, а в него враппер, а во враппер лейбл &lt;img src='http://mobile-developer.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt;  (прям как смерть кащщеева):&lt;br /&gt;
&lt;strong&gt;group-spece.html&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
&amp;lt;div class=&amp;quot;palm-hasheader&amp;quot;&amp;gt;
  &amp;lt;div class=&amp;quot;palm-header&amp;quot;&amp;gt;TextField in Groups&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;palm-header-spacer&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;palm-group&amp;quot;&amp;gt;
  &amp;lt;div class=&amp;quot;palm-group-title&amp;quot;&amp;gt;Single TextField&amp;lt;/div&amp;gt;
  &amp;lt;div class=&amp;quot;palm-list&amp;quot;&amp;gt;
    &amp;lt;div class=&amp;quot;palm-row single&amp;quot;&amp;gt;
      &amp;lt;div class=&amp;quot;palm-row-wrapper textfield-group&amp;quot; x-mojo-focus-highlight=&amp;quot;true&amp;quot;&amp;gt;
        &amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;
          &amp;lt;div id=&amp;quot;GroupedSingleTextField&amp;quot; x-mojo-element=&amp;quot;TextField&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div class=&amp;quot;palm-group unlabeled&amp;quot;&amp;gt;
  &amp;lt;div class=&amp;quot;palm-list&amp;quot;&amp;gt;
    &amp;lt;div class=&amp;quot;palm-row first&amp;quot;&amp;gt;
      &amp;lt;div class=&amp;quot;palm-row-wrapper textfield-group&amp;quot; x-mojo-focus-highlight=&amp;quot;true&amp;quot;&amp;gt;
        &amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;
          &amp;lt;div class=&amp;quot;label&amp;quot;&amp;gt;Login&amp;lt;/div&amp;gt;
          &amp;lt;div id=&amp;quot;GroupedLoginTextField&amp;quot; x-mojo-element=&amp;quot;TextField&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div class=&amp;quot;palm-row last&amp;quot;&amp;gt;
      &amp;lt;div class=&amp;quot;palm-row-wrapper textfield-group&amp;quot; x-mojo-focus-highlight=&amp;quot;true&amp;quot;&amp;gt;
        &amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;
          &amp;lt;div class=&amp;quot;label&amp;quot;&amp;gt;Password&amp;lt;/div&amp;gt;
          &amp;lt;div id=&amp;quot;GroupedPasswordTextField&amp;quot; x-mojo-element=&amp;quot;PasswordField&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;group-assistant.js&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="brush: jscript; title: ; notranslate"&gt;
function GroupAssistant() {
}

GroupAssistant.prototype.setup = function() {
	this.controller.setupWidget('GroupedSingleTextField', {hintText: 'Single'}, {});
	this.controller.setupWidget('GroupedLoginTextField', {hintText: 'Your Login...'}, {});
	this.controller.setupWidget('GroupedPasswordTextField', {}, {});
};
&lt;/pre&gt;
&lt;p&gt;Получится что-то вроде этого:&lt;br /&gt;
&lt;a href="http://mobile-developer.ru/wp-content/uploads/2010/11/styled-textfields-webos-2.png" &gt;&lt;img src="http://mobile-developer.ru/wp-content/uploads/2010/11/styled-textfields-webos-2.png" alt="" title="Skinning TextField in Palm WebOS" width="320" height="480" class="alignnone size-full wp-image-1427" /&gt;&lt;/a&gt;&lt;br /&gt;
Уже что-то, но опять же, это все стандартный внешний вид, да и групбокс видно, а он не всегда нужен и не всегда уместен.&lt;/p&gt;
&lt;p&gt;Остается одно &amp;#8211; допиливать все самостоятельно.&lt;br /&gt;
Основной проблемой при создании собственных стилей для текстовых полей является то, что при создании, внутрь текстового поля система кладет еще несколько вложенных элементов. Помимо самого текстового поля, внутри еще есть div с подсказкой (задается в атрибутах полем hintText) и div, содержащий копию значения текстового поля, когда это текстовое поле теряет фокус.&lt;br /&gt;
Принимая во внимание все выше сказанное, можно приступить к рестайлингу.&lt;br /&gt;
&lt;strong&gt;styled-scene.html&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
&amp;lt;div class=&amp;quot;palm-hasheader&amp;quot;&amp;gt;
  &amp;lt;div class=&amp;quot;palm-header&amp;quot;&amp;gt;Simple TextField&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;palm-header-spacer&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;StyledLoginTextField&amp;quot; class=&amp;quot;styled-textfield&amp;quot; x-mojo-element=&amp;quot;TextField&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;StyledPasswordTextField&amp;quot; class=&amp;quot;styled-textfield&amp;quot; x-mojo-element=&amp;quot;PasswordField&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;styled-assistant.js&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="brush: jscript; title: ; notranslate"&gt;
function StyledAssistant() {
}

StyledAssistant.prototype.setup = function() {
	this.controller.setupWidget('StyledLoginTextField', {hintText: 'Login'}, {});
	this.controller.setupWidget('StyledPasswordTextField', {hintText: 'Password'}, {});
};
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;sample.css&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="brush: css; title: ; notranslate"&gt;
#mojo-scene-styled-scene-scroller
{
    background: url(../images/background.jpg) repeat;
}

.styled-textfield input[type=text], .styled-textfield input[type=password] {
  width: 274px !important;
  -webkit-border-radius:15px;
  margin:15px;
  padding: 8px 8px;
  border:1px solid #ccc;
  display:block !important;
  font-size: 0.8em;
}
.styled-textfield div:nth-child(2) {display:none;visibility:hidden;}
.styled-textfield .hint-text
{
  margin: 9px 0 0 23px !important;color:#666;
  font-size: 0.8em;
}
&lt;/pre&gt;
&lt;p&gt;И вот, у нас сцена с двумя текстовыми полями. Каждое текстовое поле имеет скругления и свой шрифт. Выглядит все это как-то так:&lt;br /&gt;
&lt;a href="http://mobile-developer.ru/wp-content/uploads/2010/11/styled-textfields-webos-3.png" &gt;&lt;img src="http://mobile-developer.ru/wp-content/uploads/2010/11/styled-textfields-webos-3.png" alt="" title="TextField with Custom Style/Skin for Palm WebOS" width="320" height="480" class="alignnone size-full wp-image-1428" /&gt;&lt;/a&gt;&lt;br /&gt;
И никаких списков или групбоксов &lt;img src='http://mobile-developer.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://mobile-developer.ru/wp-content/uploads/2010/11/WebOSTest.zip" &gt;Скачать исходный код примера&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Post from: &lt;a href="http://mobile-developer.ru" &gt;Mobile-Developer.ru&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href="http://mobile-developer.ru/webos/nastraivaem-vneshnij-vid-tekstovyx-polej-v-palm-webos/" &gt;Настраиваем внешний вид текстовых полей в Palm WebOS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/E26CiB_79drnPGnNwhua0EfDMws/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/E26CiB_79drnPGnNwhua0EfDMws/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/E26CiB_79drnPGnNwhua0EfDMws/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/E26CiB_79drnPGnNwhua0EfDMws/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=lw717DPrRKo:UiGJ9tar3Is:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=lw717DPrRKo:UiGJ9tar3Is:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=lw717DPrRKo:UiGJ9tar3Is:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=lw717DPrRKo:UiGJ9tar3Is:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=lw717DPrRKo:UiGJ9tar3Is:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=lw717DPrRKo:UiGJ9tar3Is:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=lw717DPrRKo:UiGJ9tar3Is:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://mobile-developer.ru/webos/nastraivaem-vneshnij-vid-tekstovyx-polej-v-palm-webos/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://mobile-developer.ru/webos/nastraivaem-vneshnij-vid-tekstovyx-polej-v-palm-webos/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://mobile-developer.ru/webos/nastraivaem-vneshnij-vid-tekstovyx-polej-v-palm-webos/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>T-Rex</name>
						<uri>http://mobile-developer.ru</uri>
					</author>
		<title type="html"><![CDATA[Работа с SOAP Web-сервисами в Android-приложениях]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/mobile-developer/~3/zXRPVV6Y4Kk/" />
		<id>http://mobile-developer.ru/?p=1409</id>
		<updated>2010-10-01T16:26:05Z</updated>
		<published>2010-10-01T16:26:05Z</published>
		<category scheme="http://mobile-developer.ru" term="Без рубрики" /><category scheme="http://mobile-developer.ru" term="Google Android" />		<summary type="html"><![CDATA[Всем время от времени хочется странного. Вот мне тоже захотелось такого. А именно &#8211; подружить Android-приложение с .NET Web-сервисом &#8211; такие сервисы и писать быстрее и доступ к ним потом можно получить из Windows Mobile и Windows Phone 7 без проблем &#8211; тоесть одним махом можно решить проблему работы с сервисом для различных мобильных платформ. [...]<p>Post from: <a href="http://mobile-developer.ru">Mobile-Developer.ru</a><br/><br/><a href="http://mobile-developer.ru/uncategorized/rabota-s-soap-web-servisami-v-android-prilozheniyax/">Работа с SOAP Web-сервисами в Android-приложениях</a></p>
]]></summary>
		<content type="html" xml:base="http://mobile-developer.ru/uncategorized/rabota-s-soap-web-servisami-v-android-prilozheniyax/">&lt;p&gt;Всем время от времени хочется странного. Вот мне тоже захотелось такого. А именно &amp;#8211; подружить Android-приложение с .NET Web-сервисом &amp;#8211; такие сервисы и писать быстрее и доступ к ним потом можно получить из Windows Mobile и Windows Phone 7 без проблем &amp;#8211; тоесть одним махом можно решить проблему работы с сервисом для различных мобильных платформ. И вот в этот раз я расскажу о том, как сделать чтобы все это заработало.&lt;span id="more-1409"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Подготовительный этап &amp;#8211; Создание Web-сервиса&lt;/h4&gt;
&lt;p&gt;Для начала создадим простой .NET Web-сервис:&lt;br /&gt;
&lt;strong&gt;ISampleService.cs&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="brush: cpp; title: ; notranslate"&gt;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace SampleService
{
    [ServiceContract]
    public interface ISampleService
    {
        [OperationContract]
        double Add(double a, double b, String c);
    }
}
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;SampleService.asmx.cs&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="brush: cpp; title: ; notranslate"&gt;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

namespace WebService
{
    [WebService(Namespace = &amp;quot;http://tempuri.org/&amp;quot;)]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    public class SampleService : System.Web.Services.WebService
    {
        [WebMethod]
        public double Add(double a, double b, String c)
        {
            return a + b;
        }
    }
}
&lt;/pre&gt;
&lt;p&gt;Затем  установим его на Web-сервер (для примера я создал виртуальный каталог на локальном IIS сервисе и установил туда сервис прямо из Visual Studio. После этого URL сервиса у меня получился вот такой:&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;

http://192.168.1.32/SampleService/SampleService.asmx
&lt;/pre&gt;
&lt;h4&gt;kSOAP2 &amp;#8211; Библиотека для доступа к SOAP-сервисам под Android&lt;/h4&gt;
&lt;p&gt;Процесс создания Android-приложения описывать не буду. Скажу только ,что после создания приложения необходимо в него добавить библиоеку kSOAP2-Android, которую можно скачать &lt;a rel="nofollow" href="http://mobile-developer.ru/goto/http://code.google.com/p/ksoap2-android/" title="kSOAP2-Android"  target="_blank"&gt;здесь&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;После того, как скачали дистрибутив, JAR файл библиотеки нужнно положить в подкаталог lib в каталоге с исходными кодами проекта, а затем в окне свойств проекта в разделе &lt;strong&gt;Java Build Path&lt;/strong&gt; на вкладке &lt;strong&gt;Libraries&lt;/strong&gt; с помощью кнопки &lt;strong&gt;Add JARs&amp;#8230;&lt;/strong&gt; добавить его в список используемых библиотек.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mobile-developer.ru/wp-content/uploads/2010/10/soap-android-0.png" &gt;&lt;img class="alignnone size-full wp-image-1413" src="http://mobile-developer.ru/wp-content/uploads/2010/10/soap-android-0.png" alt="" width="620" height="443" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Библиотеку добавили, теперь можно начинать кодинг.&lt;/p&gt;
&lt;h4&gt;Кодинг&lt;/h4&gt;
&lt;p&gt;kSOAP2 для работы с сервисом необходимы 4 параметра:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;URL сервиса&lt;/li&gt;
&lt;li&gt;Имя пространства имен&lt;/li&gt;
&lt;li&gt;Имя SOAP-операции&lt;/li&gt;
&lt;li&gt;Имя метода&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;URL Web-сервиса мы знаем &amp;#8211; это адрес ASMX файла&lt;/p&gt;
&lt;p&gt;Имя пространства имен можно узнать если открыть в браузере URL Web-сервиса:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mobile-developer.ru/wp-content/uploads/2010/10/soap-android-1.png" &gt;&lt;img class="alignnone size-full wp-image-1415" src="http://mobile-developer.ru/wp-content/uploads/2010/10/soap-android-1.png" alt="" width="564" height="195" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Дальше нам надо узнать имя SOAP-операции, а также имя метода. Их можно узнать из WSDL схемы:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mobile-developer.ru/wp-content/uploads/2010/10/soap-android-2.png" &gt;&lt;img class="alignnone size-full wp-image-1416" src="http://mobile-developer.ru/wp-content/uploads/2010/10/soap-android-2.png" alt="" width="590" height="319" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Итак, с параметрами подключения разобрались. Поулчаем что-то вроде этого:&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
private static final String NAMESPACE = &amp;quot;http://tempuri.org/&amp;quot;;
private static final String URL = &amp;quot;http://192.168.1.32/SampleService/SampleService.asmx&amp;quot;;
private static final String SOAP_ACTION = &amp;quot;http://tempuri.org/Add&amp;quot;;
private static final String METHOD_NAME = &amp;quot;Add&amp;quot;;
&lt;/pre&gt;
&lt;p&gt;Теперь надо как-то наш метод вызывать из приложения и передавать туда параметры.&lt;br /&gt;
Добавим на activity два текстовых поля, кнопку и поле для вывода результата:&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;
    android:orientation=&amp;quot;vertical&amp;quot;
    android:layout_width=&amp;quot;fill_parent&amp;quot;
    android:layout_height=&amp;quot;fill_parent&amp;quot;
    android:focusable=&amp;quot;true&amp;quot; android:focusableInTouchMode=&amp;quot;true&amp;quot;&amp;gt;

&amp;lt;EditText android:layout_height=&amp;quot;wrap_content&amp;quot;
			android:layout_width=&amp;quot;fill_parent&amp;quot;
			android:layout_margin=&amp;quot;5dip&amp;quot;
			android:id=&amp;quot;@+id/Num1EditText&amp;quot;
			android:inputType=&amp;quot;number&amp;quot;
			android:text=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;/EditText&amp;gt;
&amp;lt;EditText android:layout_height=&amp;quot;wrap_content&amp;quot;
			android:layout_width=&amp;quot;fill_parent&amp;quot;
			android:layout_marginBottom=&amp;quot;5dip&amp;quot;
			android:layout_marginLeft=&amp;quot;5dip&amp;quot;
			android:layout_marginRight=&amp;quot;5dip&amp;quot;
			android:id=&amp;quot;@+id/Num2EditText&amp;quot;
			android:inputType=&amp;quot;number&amp;quot;
			android:text=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;/EditText&amp;gt;
&amp;lt;Button android:text=&amp;quot;=&amp;quot;
			android:layout_height=&amp;quot;wrap_content&amp;quot;
			android:layout_width=&amp;quot;fill_parent&amp;quot;
			android:layout_marginLeft=&amp;quot;5dip&amp;quot;
			android:layout_marginRight=&amp;quot;5dip&amp;quot;
			android:id=&amp;quot;@+id/CallServiceButton&amp;quot;&amp;gt;&amp;lt;/Button&amp;gt;
&amp;lt;TextView android:layout_width=&amp;quot;wrap_content&amp;quot;
			android:layout_height=&amp;quot;wrap_content&amp;quot;
			android:textSize=&amp;quot;24dip&amp;quot;
			android:textStyle=&amp;quot;bold&amp;quot;
			android:layout_marginLeft=&amp;quot;7dip&amp;quot;
			android:layout_marginRight=&amp;quot;7dip&amp;quot;
			android:gravity=&amp;quot;fill_vertical|fill_horizontal&amp;quot;
			android:id=&amp;quot;@+id/ResultTextView&amp;quot;&amp;gt;&amp;lt;/TextView&amp;gt;
&amp;lt;/LinearLayout&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://mobile-developer.ru/wp-content/uploads/2010/10/soap-android-3.png" &gt;&lt;img class="alignnone size-full wp-image-1418" src="http://mobile-developer.ru/wp-content/uploads/2010/10/soap-android-3.png" alt="" width="320" height="480" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ну вот, теперь пишем обработчик для кнопки, в котором вызываем Web-сервис.&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
	OnClickListener mCallServiceButtonListener = new OnClickListener() {

		@Override
		public void onClick(View v) {
			try
			{
				double a = Double.parseDouble(mNum1EditText.getText().toString());
				double b = Double.parseDouble(mNum2EditText.getText().toString());
				double result = callService(a, b);
				mResultTextView.setText(String.valueOf(result));
			}
			catch(Exception e) {
				e.printStackTrace();
				mResultTextView.setText(SOAPTest.this.getString(R.string.message_error));
			}
		}
	};

	double callService(double a, double b) throws Exception {
		double result = 0;
		do
		{
			SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

			PropertyInfo pa = new PropertyInfo();
			pa.setName(&amp;quot;a&amp;quot;);
			pa.setValue(new Double(a).toString());

			PropertyInfo pb = new PropertyInfo();
			pb.setName(&amp;quot;b&amp;quot;);
			pb.setValue(new Double(b).toString());

			PropertyInfo pc = new PropertyInfo();
			pc.setName(&amp;quot;c&amp;quot;);
			pc.setValue(&amp;quot;test&amp;quot;);

			request.addProperty(pa);
			request.addProperty(pb);
			request.addProperty(pc);

			SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
			envelope.dotNet = true;

			envelope.setOutputSoapObject(request);
			HttpTransportSE androidHttpTransport = new AndroidHttpTransport(URL);
			androidHttpTransport.setXmlVersionTag(&amp;quot;&amp;lt;?xml version=\&amp;quot;1.0\&amp;quot; encoding=\&amp;quot;utf-8\&amp;quot;?&amp;gt;&amp;quot;);

			androidHttpTransport.call(SOAP_ACTION, envelope);
			SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;
			result = Double.parseDouble(resultsRequestSOAP.getProperty(&amp;quot;AddResult&amp;quot;).toString());
		}
		while(false);
		return result;
	}
&lt;/pre&gt;
&lt;p&gt;Не забываем обратить внимание на магический флаг &lt;code&gt;envelope.dotNet&lt;/code&gt; &amp;#8211; без него к .NET сервису подключиться не получится.&lt;br /&gt;
Также есть проблемы с подключением к WCF-сервисам. У меня так и не получилось вызвать метод из WCF-сервиса (судя по тикетам проекта ksoap2-android, у многих та же проблема, но говорят что все-таки как-то можно&amp;#8230;)&lt;/p&gt;
&lt;p&gt;Еще есть проблема с численными параметрами. У меня упорно не хотело сериализировать параметры типа double, пришлось передавать их в виде строки (судя по примерам, все так делаю, видимо так и надо).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mobile-developer.ru/wp-content/uploads/2010/10/SOAPTest.zip" title="Пример - Доступ к SOAP Web-сервису из Android-приложения"  target="_blank"&gt;Скачать исходный код примера&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Post from: &lt;a href="http://mobile-developer.ru" &gt;Mobile-Developer.ru&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href="http://mobile-developer.ru/uncategorized/rabota-s-soap-web-servisami-v-android-prilozheniyax/" &gt;Работа с SOAP Web-сервисами в Android-приложениях&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/av8AgW1urgvDyJFCUH4Ogg3QnL0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/av8AgW1urgvDyJFCUH4Ogg3QnL0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/av8AgW1urgvDyJFCUH4Ogg3QnL0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/av8AgW1urgvDyJFCUH4Ogg3QnL0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=zXRPVV6Y4Kk:2mMBcm3cWYo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=zXRPVV6Y4Kk:2mMBcm3cWYo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=zXRPVV6Y4Kk:2mMBcm3cWYo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=zXRPVV6Y4Kk:2mMBcm3cWYo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=zXRPVV6Y4Kk:2mMBcm3cWYo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=zXRPVV6Y4Kk:2mMBcm3cWYo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=zXRPVV6Y4Kk:2mMBcm3cWYo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://mobile-developer.ru/uncategorized/rabota-s-soap-web-servisami-v-android-prilozheniyax/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://mobile-developer.ru/uncategorized/rabota-s-soap-web-servisami-v-android-prilozheniyax/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://mobile-developer.ru/uncategorized/rabota-s-soap-web-servisami-v-android-prilozheniyax/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>T-Rex</name>
						<uri>http://mobile-developer.ru</uri>
					</author>
		<title type="html"><![CDATA[Интегрируем оплату через PayPal в Android-приложение]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/mobile-developer/~3/Hj_a7-zCF_4/" />
		<id>http://mobile-developer.ru/?p=1401</id>
		<updated>2010-09-30T12:17:24Z</updated>
		<published>2010-09-30T12:17:24Z</published>
		<category scheme="http://mobile-developer.ru" term="Google Android" /><category scheme="http://mobile-developer.ru" term="PayPal" /><category scheme="http://mobile-developer.ru" term="SDK" />		<summary type="html"><![CDATA[С некоторых пор PayPal предлагает возможность добавления функционала, связанного с оплатой, непосредственно в Android-приложения. Пользователям, в этом случае, нет необходимости заходить на сайт PayPal, все происходит непосредственно в программе. Для этих целей доступен SDK. О том, как его использовать я расскажу в этот раз. Настройка приложения Для начала качаем SDK с официального сайта. Затем создаем [...]<p>Post from: <a href="http://mobile-developer.ru">Mobile-Developer.ru</a><br/><br/><a href="http://mobile-developer.ru/google-android/integriruem-oplatu-cherez-paypal-v-android-prilozhenie/">Интегрируем оплату через PayPal в Android-приложение</a></p>
]]></summary>
		<content type="html" xml:base="http://mobile-developer.ru/google-android/integriruem-oplatu-cherez-paypal-v-android-prilozhenie/">&lt;p&gt;С некоторых пор PayPal предлагает возможность добавления функционала, связанного с оплатой, непосредственно в Android-приложения. Пользователям, в этом случае, нет необходимости заходить на сайт PayPal, все происходит непосредственно в программе. Для этих целей доступен SDK. О том, как его использовать я расскажу в этот раз.&lt;span id="more-1401"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Настройка приложения&lt;/h4&gt;
&lt;p&gt;Для начала &lt;a rel="nofollow" href="http://mobile-developer.ru/goto/https://www.x.com/community/ppx/sdks#MPL" title="Скачать PayPal in-app payments SDK for Android"  target="_blank"&gt;качаем SDK с официального сайта&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Затем создаем Android-приложение в Eclipse.&lt;/p&gt;
&lt;p&gt;В архиве с PayPal SDK есть jar-файл &lt;strong&gt;PayPal_MPL.jar&lt;/strong&gt;, который нам необходимо положить в подкаталог &lt;strong&gt;lib &lt;/strong&gt;внутри каталога с исходным кодом нашего приложения (подкаталог lib создаем руками, никто за нас автоматически этого не сделает).&lt;/p&gt;
&lt;p&gt;Затем идем в настройки проекта в раздел &lt;strong&gt;Java Build Path&lt;/strong&gt; и на вкладке &lt;strong&gt;Libraries &lt;/strong&gt;с помощью кнопки &lt;strong&gt;Add JARs&amp;#8230;&lt;/strong&gt; добавляем эту библиотеку в список используемых в нашем проекте.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mobile-developer.ru/wp-content/uploads/2010/09/paypal-android-1.png" &gt;&lt;img class="alignnone size-full wp-image-1402" src="http://mobile-developer.ru/wp-content/uploads/2010/09/paypal-android-1.png" alt="" width="698" height="499" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;В созданном приложении в манифесте необходимо добавить следующие строки:&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
&amp;lt;activity android:name=&amp;quot;com.paypal.android.MEP.PayPalActivity&amp;quot;
                    android:theme=&amp;quot;@android:style/Theme.Translucent.NoTitleBar&amp;quot;
                    android:configChanges=&amp;quot;keyboardHidden|orientation&amp;quot;/&amp;gt;

&amp;lt;uses-permission android:name=&amp;quot;android.permission.INTERNET&amp;quot;/&amp;gt;
&amp;lt;uses-permission android:name=&amp;quot;android.permission.READ_PHONE_STATE&amp;quot;/&amp;gt;
&lt;/pre&gt;
&lt;p&gt;После этого можно приступать к написанию кода.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Кодинг&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;SDK позволяет создавать брендированные кнопки для вызова окна оплаты. И вот при создании activity (в методе onCreate()) мы создадим такую кнопку и добавим в layout.&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
private static final String PAYPAL_APP_ID = &amp;quot;APP-80W284485P519543T&amp;quot;;
PayPal mPayPal;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mPayPal = PayPal.initWithAppID(
				MainActivity.this.getBaseContext(),
				PAYPAL_APP_ID,
				PayPal.ENV_SANDBOX);
    CheckoutButton payButton = mPayPal.getPaymentButton(PayPal.BUTTON_278x43, this, PayPal.PAYMENT_TYPE_HARD_GOODS);
   payButton.setOnClickListener(mPayButtonListener);
   LinearLayout mainLayout = (LinearLayout)findViewById(R.id.main_layout);
   mainLayout.addView(payButton,
       		new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
}
&lt;/pre&gt;
&lt;p&gt;Как видно из кода, у нас используется строка с PayPal Application ID. В примере используется тестовый ID приложения. Его можно посмотреть на странице аккаунта разработчика после регистрации на &lt;a rel="nofollow" href="http://mobile-developer.ru/goto/http://x.com" &gt;X.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Также хотелось бы отметить, что PayPal позволяет тестировать приложения с использованием &amp;#8220;песочницы&amp;#8221; (sandbox), а уже после тестирования можно настроить все так, чтобы приложение работало с реальным сайтом. В тестовом приложении мы указываем тип подключения PayPal.ENV_SANDBOX, который указывает что мы используем &amp;#8220;песочницу&amp;#8221;.&lt;/p&gt;
&lt;p&gt;После того, как мы выполнили указанные выше действия, у нас должно получиться что-то вроде этого:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mobile-developer.ru/wp-content/uploads/2010/09/paypal-android-2.png" &gt;&lt;img class="alignnone size-full wp-image-1403" src="http://mobile-developer.ru/wp-content/uploads/2010/09/paypal-android-2.png" alt="" width="320" height="480" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Отлично, кнопку мы добавили, но это всего лишь кнопка, она ничего не делает. Для того, чтобы она что-то делала, необходимо к ней добавить обработчик нажатия:&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
OnClickListener mPayButtonListener = new OnClickListener() {

		@Override
		public void onClick(View v) {
			PayPalPayment newPayment = new PayPalPayment();

			newPayment.setAmount(&amp;quot;5.00&amp;quot;);
			newPayment.setCurrency(&amp;quot;USD&amp;quot;);
			newPayment.setRecipient(&amp;quot;zombie_1285772993_biz@wxwidgets.info&amp;quot;);
			newPayment.setItemDescription(&amp;quot;My Super Item&amp;quot;);
			newPayment.setMerchantName(&amp;quot;John Doe&amp;quot;);

			Intent paypalIntent = new Intent(MainActivity.this, PayPalActivity.class);
			paypalIntent.putExtra(PayPalActivity.EXTRA_PAYMENT_INFO, newPayment);
			MainActivity.this.startActivityForResult(paypalIntent, 1);
		}
	};
&lt;/pre&gt;
&lt;p&gt;E-mail получателя платежа можно получить в &lt;a rel="nofollow" href="http://mobile-developer.ru/goto/http://developer.paypal.com" title="PayPal Sandbox"  target="_blank"&gt;песочнице&lt;/a&gt;, предварительно создав аккаунт продавца в разделе &lt;strong&gt;Test Accounts&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;После нажатия на кнопку на экране появляется activity, в которой можно произвести оплату:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mobile-developer.ru/wp-content/uploads/2010/09/paypal-android-3.png" &gt;&lt;img class="alignnone size-full wp-image-1404" src="http://mobile-developer.ru/wp-content/uploads/2010/09/paypal-android-3.png" alt="" width="320" height="480" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;E-mail отправителя платежа можно также получитьв &amp;#8220;песочнице&amp;#8221; после создания тестового аккаунта.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mobile-developer.ru/wp-content/uploads/2010/09/paypal-android-4.png" &gt;&lt;img class="alignnone size-full wp-image-1405" src="http://mobile-developer.ru/wp-content/uploads/2010/09/paypal-android-4.png" alt="" width="320" height="480" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;После завершения оплаты нам необходимо как-то узнать результат (оплата может быть отменена пользователем, может произойти ошибка отправки средств и т.д.). Для этого нам необходимо реализовать метод onActivityResult():&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    	String label = &amp;quot;&amp;quot;;
    	String transactionID = data.getStringExtra(PayPalActivity.EXTRA_TRANSACTION_ID);
    	switch(resultCode) {
    		case Activity.RESULT_OK:
    			label = &amp;quot;OK&amp;quot;;
    			break;
    		case Activity.RESULT_CANCELED:
    			label = &amp;quot;Cancelled&amp;quot;;
    			break;
    		case PayPalActivity.RESULT_FAILURE:
    			label = &amp;quot;Failure&amp;quot;;
    			break;
      	}
    	TextView resultLabelView = (TextView)findViewById(R.id.result_label);
    	resultLabelView.setText(label + &amp;quot;: &amp;quot; + transactionID);
}
&lt;/pre&gt;
&lt;p&gt;Вместе с SDK поставляется неплохая документация, так что все вопросы решаются довольно быстро. В принципе, работа с PayPal MPL оставила только положительные ощущения, все просто и понятно, не глючит. Примеры, которые идут в поставке тоже работают нормально. Видно что SDK &amp;#8211; цельный продукт.&lt;/p&gt;
&lt;p&gt;Ну вот, собственно и все.&lt;/p&gt;
&lt;p&gt;Напоследдок несколько ссылок:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel="nofollow" href="http://mobile-developer.ru/goto/http://x.com" title="PayPal Developer Network"  target="_blank"&gt;PayPal Developer Network&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel="nofollow" href="http://mobile-developer.ru/goto/http://developer.paypal.com" title="PayPal Sandbox"  target="_blank"&gt;PayPal Sandbox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel="nofollow" href="http://mobile-developer.ru/goto/https://www.x.com/community/ppx/sdks" title="Скачать PayPal SDK"  target="_blank"&gt;Страница загрузки SDK&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://mobile-developer.ru/wp-content/uploads/2010/09/PayPalTest.zip"  target="_blank"&gt;Исходные коды тестового приложения&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Post from: &lt;a href="http://mobile-developer.ru" &gt;Mobile-Developer.ru&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href="http://mobile-developer.ru/google-android/integriruem-oplatu-cherez-paypal-v-android-prilozhenie/" &gt;Интегрируем оплату через PayPal в Android-приложение&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DOsnqACrE99hdMub_3IBWSfmILY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DOsnqACrE99hdMub_3IBWSfmILY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DOsnqACrE99hdMub_3IBWSfmILY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DOsnqACrE99hdMub_3IBWSfmILY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=Hj_a7-zCF_4:UKereuKDDPk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=Hj_a7-zCF_4:UKereuKDDPk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=Hj_a7-zCF_4:UKereuKDDPk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=Hj_a7-zCF_4:UKereuKDDPk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=Hj_a7-zCF_4:UKereuKDDPk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=Hj_a7-zCF_4:UKereuKDDPk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=Hj_a7-zCF_4:UKereuKDDPk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://mobile-developer.ru/google-android/integriruem-oplatu-cherez-paypal-v-android-prilozhenie/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://mobile-developer.ru/google-android/integriruem-oplatu-cherez-paypal-v-android-prilozhenie/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://mobile-developer.ru/google-android/integriruem-oplatu-cherez-paypal-v-android-prilozhenie/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>T-Rex</name>
						<uri>http://mobile-developer.ru</uri>
					</author>
		<title type="html"><![CDATA[Работа с акселерометром в Android]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/mobile-developer/~3/MXyYkzd47Lo/" />
		<id>http://mobile-developer.ru/?p=1384</id>
		<updated>2010-09-05T20:40:00Z</updated>
		<published>2010-09-05T20:34:46Z</published>
		<category scheme="http://mobile-developer.ru" term="Google Android" /><category scheme="http://mobile-developer.ru" term="Без рубрики" />		<summary type="html"><![CDATA[Для одного из текущих проектов понадобилась поддержка акселерометра. Учитывая то, что еще месяц назад Android API я в глаза не видел, мне казалось что получение данных с акселерометра &#8211; это какой-то адский труд. Оказалось все намного проще. Для работы с различными датчиками в Android используется класс Sensor. Список датчиков можно получить через SensorManager. Например таким [...]<p>Post from: <a href="http://mobile-developer.ru">Mobile-Developer.ru</a><br/><br/><a href="http://mobile-developer.ru/uncategorized/rabota-s-akselerometrom-v-android-2/">Работа с акселерометром в Android</a></p>
]]></summary>
		<content type="html" xml:base="http://mobile-developer.ru/uncategorized/rabota-s-akselerometrom-v-android-2/">&lt;p&gt;Для одного из текущих проектов понадобилась поддержка акселерометра. Учитывая то, что еще месяц назад Android API я в глаза не видел, мне казалось что получение данных с акселерометра &amp;#8211; это какой-то адский труд. Оказалось все намного проще.&lt;/p&gt;
&lt;p&gt;Для работы с различными датчиками в Android используется класс &lt;code&gt;Sensor&lt;/code&gt;. Список датчиков можно получить через &lt;code&gt;SensorManager&lt;/code&gt;. Например таким вот образом при создании &lt;code&gt;Activity &lt;/code&gt;можно получить объект &lt;code&gt;Sensor&lt;/code&gt;, связанный с акселеромтером:&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
public class AccelerometerTest extends Activity {

	SensorManager mSensorManager;
	Sensor mAccelerometerSensor;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        List&amp;lt;Sensor&amp;gt; sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
        if(sensors.size() &amp;gt; 0)
        {
        	for (Sensor sensor : sensors) {
        		switch(sensor.getType())
        		{
        		case Sensor.TYPE_ACCELEROMETER:
        			if(mAccelerometerSensor == null) mAccelerometerSensor = sensor;
        			break;
        		default:
        			break;
        		}
		}
        }
    }
&lt;/pre&gt;
&lt;p&gt;&lt;span id="more-1384"&gt;&lt;/span&gt;&lt;br /&gt;
Для того, чтобы получать данные с акселерометра нам необходимо проделать еще несколько несложных операций:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Реализовать интерфейс &lt;code&gt;SensorEventListener&lt;/code&gt;&lt;/li&gt;
&lt;p&gt;, в частности нас интересует метод &lt;code&gt;onSensorChanged()&lt;/code&gt;&lt;/p&gt;
&lt;li&gt;Реализовать метод &lt;code&gt;onResume()&lt;/code&gt; где подписать &lt;code&gt;Activity&lt;/code&gt; на сообщения от акселеромтера&lt;/li&gt;
&lt;li&gt;Реализовать метод &lt;code&gt;onPause()&lt;/code&gt; где отписать &lt;code&gt;Activity&lt;/code&gt; от сообщений акселерометра&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
public class AccelerometerTest extends Activity implements SensorEventListener {
    @Override
    protected void onPause() {
    	mSensorManager.unregisterListener(this);
    	super.onPause();

    }

    @Override
    protected void onResume() {
    	super.onResume();
    	mSensorManager.registerListener(this, mAccelerometerSensor, SensorManager.SENSOR_DELAY_GAME);
    	mSensorManager.registerListener(this, mMagneticFieldSensor, SensorManager.SENSOR_DELAY_GAME);
    }

	@Override
	public void onAccuracyChanged(Sensor sensor, int accuracy) {
	}

	@Override
	public void onSensorChanged(SensorEvent event) {
		float [] values = event.values;
		switch(event.sensor.getType())
		{
		case Sensor.TYPE_ACCELEROMETER:
			{
				// Здесь можно обрабатывать данные от сенсора
			}
			break;
		}
	}
}
&lt;/pre&gt;
&lt;p&gt;Простейший пример отображения данных &amp;#8211; отображать их в &lt;code&gt;TextView&lt;/code&gt;&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
public class AccelerometerTest extends Activity implements SensorEventListener {
	SensorManager mSensorManager;
	Sensor mAccelerometerSensor;

	TextView mForceValueText;
	TextView mXValueText;
	TextView mYValueText;
	TextView mZValueText;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		...
		mForceValueText = (TextView)findViewById(R.id.value_force);
		mXValueText = (TextView)findViewById(R.id.value_x);
		mYValueText = (TextView)findViewById(R.id.value_y);
		mZValueText = (TextView)findViewById(R.id.value_z);
	}
	...
	@Override
	public void onSensorChanged(SensorEvent event) {
		float [] values = event.values;
		switch(event.sensor.getType())
		{
		case Sensor.TYPE_ACCELEROMETER:
			{
				mXValueText.setText(String.format(&amp;quot;%1.3f&amp;quot;,
					event.values[SensorManager.DATA_X]));
				mYValueText.setText(String.format(&amp;quot;%1.3f&amp;quot;,
					event.values[SensorManager.DATA_Y]));
				mZValueText.setText(String.format(&amp;quot;%1.3f&amp;quot;,
					event.values[SensorManager.DATA_Z]));

				double totalForce = 0.0f;
				totalForce += Math.pow(
					values[SensorManager.DATA_X]/SensorManager.GRAVITY_EARTH, 2.0);
				totalForce += Math.pow(
					values[SensorManager.DATA_Y]/SensorManager.GRAVITY_EARTH, 2.0);
				totalForce += Math.pow(
					values[SensorManager.DATA_Z]/SensorManager.GRAVITY_EARTH, 2.0);
				totalForce = Math.sqrt(totalForce);
				mForceValueText.setText(String.format(&amp;quot;%1.3f&amp;quot;, totalForce));
			}
			break;
		}
	}
}
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;res/layout/main.xml&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;TableLayout 	android:id=&amp;quot;@+id/TableLayout01&amp;quot;
				android:layout_width=&amp;quot;fill_parent&amp;quot;
				android:layout_height=&amp;quot;fill_parent&amp;quot;
				xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&amp;gt;
	&amp;lt;TableRow 	android:layout_width=&amp;quot;wrap_content&amp;quot;
				android:layout_height=&amp;quot;wrap_content&amp;quot;
				android:id=&amp;quot;@+id/row_force&amp;quot;
				android:layout_margin=&amp;quot;5dip&amp;quot;&amp;gt;
		&amp;lt;TextView 	android:layout_width=&amp;quot;wrap_content&amp;quot;
					android:layout_height=&amp;quot;wrap_content&amp;quot;
					android:id=&amp;quot;@+id/label_force&amp;quot;
					android:text=&amp;quot;Force:&amp;quot;
					android:gravity=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;/TextView&amp;gt;
		&amp;lt;TextView 	android:layout_height=&amp;quot;wrap_content&amp;quot;
					android:layout_width=&amp;quot;fill_parent&amp;quot;
					android:layout_weight=&amp;quot;1&amp;quot;
					android:id=&amp;quot;@+id/value_force&amp;quot;
					android:text=&amp;quot;-&amp;quot;
					android:layout_marginLeft=&amp;quot;5dip&amp;quot;&amp;gt;&amp;lt;/TextView&amp;gt;
	&amp;lt;/TableRow&amp;gt;
	&amp;lt;TableRow 	android:layout_height=&amp;quot;wrap_content&amp;quot;
				android:layout_width=&amp;quot;fill_parent&amp;quot;
				android:id=&amp;quot;@+id/row_x&amp;quot;
				android:layout_margin=&amp;quot;5dip&amp;quot;&amp;gt;
		&amp;lt;TextView 	android:layout_width=&amp;quot;wrap_content&amp;quot;
					android:layout_height=&amp;quot;wrap_content&amp;quot;
					android:text=&amp;quot;X:&amp;quot;
					android:id=&amp;quot;@+id/label_x&amp;quot;
					android:gravity=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;/TextView&amp;gt;
		&amp;lt;TextView	android:layout_height=&amp;quot;wrap_content&amp;quot;
					android:text=&amp;quot;-&amp;quot;
					android:layout_width=&amp;quot;fill_parent&amp;quot;
					android:layout_weight=&amp;quot;1&amp;quot;
					android:id=&amp;quot;@+id/value_x&amp;quot;
					android:layout_marginLeft=&amp;quot;5dip&amp;quot;&amp;gt;&amp;lt;/TextView&amp;gt;
	&amp;lt;/TableRow&amp;gt;
	&amp;lt;TableRow 	android:layout_height=&amp;quot;wrap_content&amp;quot;
				android:layout_width=&amp;quot;fill_parent&amp;quot;
				android:id=&amp;quot;@+id/row_y&amp;quot;
				android:layout_margin=&amp;quot;5dip&amp;quot;&amp;gt;
		&amp;lt;TextView 	android:layout_width=&amp;quot;wrap_content&amp;quot;
					android:layout_height=&amp;quot;wrap_content&amp;quot;
					android:text=&amp;quot;Y:&amp;quot;
					android:id=&amp;quot;@+id/label_y&amp;quot;
					android:gravity=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;/TextView&amp;gt;
		&amp;lt;TextView 	android:layout_height=&amp;quot;wrap_content&amp;quot;
					android:text=&amp;quot;-&amp;quot;
					android:layout_width=&amp;quot;fill_parent&amp;quot;
					android:layout_weight=&amp;quot;1&amp;quot;
					android:id=&amp;quot;@+id/value_y&amp;quot;
					android:layout_marginLeft=&amp;quot;5dip&amp;quot;&amp;gt;&amp;lt;/TextView&amp;gt;
	&amp;lt;/TableRow&amp;gt;
	&amp;lt;TableRow 	android:layout_height=&amp;quot;wrap_content&amp;quot;
				android:layout_width=&amp;quot;fill_parent&amp;quot;
				android:id=&amp;quot;@+id/row_z&amp;quot;
				android:layout_margin=&amp;quot;5dip&amp;quot;&amp;gt;
		&amp;lt;TextView	android:layout_width=&amp;quot;wrap_content&amp;quot;
					android:layout_height=&amp;quot;wrap_content&amp;quot;
					android:text=&amp;quot;Z:&amp;quot;
					android:id=&amp;quot;@+id/label_z&amp;quot;
					android:gravity=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;/TextView&amp;gt;
		&amp;lt;TextView 	android:layout_height=&amp;quot;wrap_content&amp;quot;
					android:text=&amp;quot;-&amp;quot;
					android:layout_width=&amp;quot;fill_parent&amp;quot;
					android:layout_weight=&amp;quot;1&amp;quot;
					android:id=&amp;quot;@+id/value_z&amp;quot;
					android:layout_marginLeft=&amp;quot;5dip&amp;quot;&amp;gt;&amp;lt;/TextView&amp;gt;
	&amp;lt;/TableRow&amp;gt;
&amp;lt;/TableLayout&amp;gt;
&lt;/pre&gt;
&lt;p&gt;В результате получим что-то подобное:&lt;br /&gt;
&lt;img class="alignnone size-full wp-image-1383" title="Работа с акселерометром в Android" src="http://mobile-developer.ru/wp-content/uploads/2010/09/android-accelerometer-1.png" alt="" width="320" height="480" /&gt;&lt;br /&gt;
Из примера можно увидеть что в классе &lt;code&gt;SensorManager &lt;/code&gt;есть константы &lt;code&gt;DATA_X&lt;/code&gt;, &lt;code&gt;DATA_Y&lt;/code&gt;, &lt;code&gt;DATA_Z&lt;/code&gt;, которые используются в качетсве индексов в массиве значений, возвращаемых акселерометром.&lt;br /&gt;
Отображение данных в &lt;code&gt;TextView &lt;/code&gt;- это, конечно, неплохо, но не дает общей картины изменений показаний акселерометра при изменении положения телефона. Для того, чтобы увидеть изменение показаний во времени, решил добавить отображение в виде графика.&lt;br /&gt;
Для создания графиков набрел на чудесную библиотеку &lt;a rel="nofollow" href="http://mobile-developer.ru/goto/http://code.google.com/p/achartengine/" &gt;AChartEngine&lt;/a&gt;. Библиотека бесплатная, доступна на Google Code.&lt;br /&gt;
Добавляем в layout пару кнопок &amp;#8211; для начала/останова записи показаний акселерометра и для открытия окна с графиком.&lt;/p&gt;
&lt;pre class="brush: xml; title: ; notranslate"&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;TableLayout 	android:id=&amp;quot;@+id/TableLayout01&amp;quot;
				android:layout_width=&amp;quot;fill_parent&amp;quot;
				android:layout_height=&amp;quot;fill_parent&amp;quot;
				xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&amp;gt;
...
&amp;lt;TableRow 	android:id=&amp;quot;@+id/TableRow01&amp;quot;
				android:layout_height=&amp;quot;wrap_content&amp;quot;
				android:layout_width=&amp;quot;fill_parent&amp;quot;&amp;gt;
		&amp;lt;ViewStub	android:id=&amp;quot;@+id/ViewStub01&amp;quot;
					android:layout_width=&amp;quot;wrap_content&amp;quot;
					android:layout_height=&amp;quot;wrap_content&amp;quot;&amp;gt;&amp;lt;/ViewStub&amp;gt;
		&amp;lt;LinearLayout 	android:id=&amp;quot;@+id/LinearLayout01&amp;quot;
						android:layout_height=&amp;quot;wrap_content&amp;quot;
						android:layout_width=&amp;quot;fill_parent&amp;quot;
						android:layout_weight=&amp;quot;1&amp;quot;&amp;gt;
			&amp;lt;Button 	android:layout_height=&amp;quot;wrap_content&amp;quot;
						android:layout_weight=&amp;quot;1&amp;quot;
						android:text=&amp;quot;Start recording&amp;quot;
						android:layout_width=&amp;quot;fill_parent&amp;quot;
						android:id=&amp;quot;@+id/button_start&amp;quot;&amp;gt;&amp;lt;/Button&amp;gt;
			&amp;lt;Button 	android:layout_height=&amp;quot;wrap_content&amp;quot;
						android:layout_weight=&amp;quot;1&amp;quot;
						android:text=&amp;quot;Show&amp;quot;
						android:layout_width=&amp;quot;fill_parent&amp;quot;
						android:id=&amp;quot;@+id/button_show&amp;quot;&amp;gt;&amp;lt;/Button&amp;gt;
		&amp;lt;/LinearLayout&amp;gt;
	&amp;lt;/TableRow&amp;gt;
&amp;lt;/TableLayout&amp;gt;
&lt;/pre&gt;
&lt;p&gt;В результате этих изменений получаем такой layout:&lt;br /&gt;
&lt;img class="alignnone size-full wp-image-1388" src="http://mobile-developer.ru/wp-content/uploads/2010/09/android-accelerometer-2.png" alt="" width="320" height="480" /&gt;&lt;br /&gt;
Теперь научим &lt;code&gt;Activity &lt;/code&gt;реагировать на нажания кнопок:&lt;/p&gt;
&lt;pre class="brush: java; title: ; notranslate"&gt;
package com.itdimension.accelerometertest;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

import org.achartengine.*;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

public class AccelerometerTest extends Activity implements SensorEventListener {
	...
	double margins[] = {0, 0};

	Button mStartButton;
	Button mShowButton;

	List&amp;lt;List&amp;lt;Double&amp;gt;&amp;gt; mValues;
	boolean mIsRecording = false;

	OnClickListener mStartButtonListener = new OnClickListener() {

		@Override
		public void onClick(View v) {
			mIsRecording = !mIsRecording;
			if(mIsRecording) {
				mValues.get(SensorManager.DATA_X).clear();
				mValues.get(SensorManager.DATA_Y).clear();
				mValues.get(SensorManager.DATA_Z).clear();
				margins[0] = 0;
				margins[1] = 0;
			}
		}
	};

	OnClickListener mShowButtonListener = new OnClickListener() {

		@Override
		public void onClick(View v) {
			try
			{
				Intent intent = getChartIntent();
				startActivity(intent);
			}
			catch (Exception e) {
				new AlertDialog.Builder(AccelerometerTest.this)
					.setTitle(&amp;quot;Error&amp;quot;)
					.setMessage(e.getMessage())
					.create()
					.show();
			}

		}
	};

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ...
        mValues = new ArrayList&amp;lt;List&amp;lt;Double&amp;gt;&amp;gt;();
        mValues.add(new ArrayList&amp;lt;Double&amp;gt;());
        mValues.add(new ArrayList&amp;lt;Double&amp;gt;());
        mValues.add(new ArrayList&amp;lt;Double&amp;gt;());
	...
        mStartButton = (Button)findViewById(R.id.button_start);
        mShowButton = (Button)findViewById(R.id.button_show);

        mStartButton.setOnClickListener(mStartButtonListener);
        mShowButton.setOnClickListener(mShowButtonListener);
    }
    ...

	@Override
	public void onSensorChanged(SensorEvent event) {
		float [] values = event.values;
		switch(event.sensor.getType())
		{
		case Sensor.TYPE_ACCELEROMETER:
			{
				if(mIsRecording)
				{
					recordSensorValue(event);
				}
				...
			}
			break;
		}
	}

	private void recordSensorValue(SensorEvent event) {
		double value;
		for(int i = SensorManager.DATA_X; i &amp;lt;= SensorManager.DATA_Z; i++)
		{
			value = (double)event.values[i];
			margins[0] = Math.min(margins[0], value);
			margins[1] = Math.max(margins[1], value);
			mValues.get(i).add(value);
		}
	}

	Intent getChartIntent() {
		int [] colors = new int[] {
		      Color.RED, Color.GREEN, Color.BLUE };
		PointStyle[] styles = new PointStyle[] {
		      PointStyle.POINT, PointStyle.POINT, PointStyle.POINT };
		XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);
		setChartSettings(renderer, &amp;quot;Sensor Values&amp;quot;, &amp;quot;Index&amp;quot;, &amp;quot;Value&amp;quot;,
	    		0,
	    		mValues.get(SensorManager.DATA_X).size(),
	    		margins[0] * 1.5,
	    		margins[1] * 1.5,
	        	Color.GRAY, Color.LTGRAY);
		return ChartFactory.getLineChartIntent(this, buildDataset(), renderer);
	}

	protected void setChartSettings(XYMultipleSeriesRenderer renderer,
		      String title, String xTitle,
		      String yTitle, double xMin,
		      double xMax, double yMin, double yMax,
		      int axesColor, int labelsColor) {
		    renderer.setChartTitle(title);
		    renderer.setXTitle(xTitle);
		    renderer.setYTitle(yTitle);
		    renderer.setXAxisMin(xMin);
		    renderer.setXAxisMax(xMax);
		    renderer.setYAxisMin(yMin);
		    renderer.setYAxisMax(yMax);
		    renderer.setAxesColor(axesColor);
		    renderer.setLabelsColor(labelsColor);
		  }

	protected XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles) {
	    XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
	    int length = colors.length;
	    for (int i = 0; i &amp;lt; length; i++) {
	      XYSeriesRenderer r = new XYSeriesRenderer();
	      r.setColor(colors[i]);
	      r.setPointStyle(styles[i]);
	      renderer.addSeriesRenderer(r);
	    }
	    return renderer;
	  }

	XYMultipleSeriesDataset buildDataset() {
		XYMultipleSeriesDataset result = new XYMultipleSeriesDataset();
		XYSeries xSeries = new XYSeries(&amp;quot;X&amp;quot;);
		XYSeries ySeries = new XYSeries(&amp;quot;Y&amp;quot;);
		XYSeries zSeries = new XYSeries(&amp;quot;Z&amp;quot;);

		int count = mValues.get(SensorManager.DATA_X).size();
		for(int i = 0; i &amp;lt; count; i++)
		{
			xSeries.add(i, mValues.get(SensorManager.DATA_X).get(i));
			ySeries.add(i, mValues.get(SensorManager.DATA_Y).get(i));
			zSeries.add(i, mValues.get(SensorManager.DATA_Z).get(i));
		}

		result.addSeries(xSeries);
		result.addSeries(ySeries);
		result.addSeries(zSeries);

		return result;
	}
}
&lt;/pre&gt;
&lt;p&gt;После всех этих манипуляций, при нажатии на кнопку &amp;#8220;Show&amp;#8221; получим приблизительно такой график:&lt;br /&gt;
&lt;img class="alignnone size-full wp-image-1389" src="http://mobile-developer.ru/wp-content/uploads/2010/09/android-accelerometer-3.png" alt="" width="320" height="480" /&gt;&lt;br /&gt;
&lt;img class="alignnone size-full wp-image-1390" src="http://mobile-developer.ru/wp-content/uploads/2010/09/android-accelerometer-4.jpg" alt="" width="240" height="320" /&gt;&lt;br /&gt;
Ну вот, на этом пока все.&lt;br /&gt;
&lt;a href="http://mobile-developer.ru/wp-content/uploads/2010/09/AccelerometerTest.zip" &gt;Скачать исходный код примера можно здесь&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Post from: &lt;a href="http://mobile-developer.ru" &gt;Mobile-Developer.ru&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href="http://mobile-developer.ru/uncategorized/rabota-s-akselerometrom-v-android-2/" &gt;Работа с акселерометром в Android&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/S3oHPgZQGucehVf-MK8UHSPvAPo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/S3oHPgZQGucehVf-MK8UHSPvAPo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/S3oHPgZQGucehVf-MK8UHSPvAPo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/S3oHPgZQGucehVf-MK8UHSPvAPo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=MXyYkzd47Lo:LfdW7wdkmYQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=MXyYkzd47Lo:LfdW7wdkmYQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=MXyYkzd47Lo:LfdW7wdkmYQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=MXyYkzd47Lo:LfdW7wdkmYQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=MXyYkzd47Lo:LfdW7wdkmYQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/mobile-developer?a=MXyYkzd47Lo:LfdW7wdkmYQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/mobile-developer?i=MXyYkzd47Lo:LfdW7wdkmYQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<link rel="replies" type="text/html" href="http://mobile-developer.ru/uncategorized/rabota-s-akselerometrom-v-android-2/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://mobile-developer.ru/uncategorized/rabota-s-akselerometrom-v-android-2/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://mobile-developer.ru/uncategorized/rabota-s-akselerometrom-v-android-2/</feedburner:origLink></entry>
	</feed>

