tag:blogger.com,1999:blog-88533100209052778542024-03-09T02:46:06.214+03:00Андроид Блог by SnowpardБлог компании Snowpard: обзоры разработанных игр, статьи о разработке и публикации игр и приложений для платформы AndroidSnowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.comBlogger39125tag:blogger.com,1999:blog-8853310020905277854.post-33427956002808631982017-11-03T10:28:00.001+03:002017-11-03T15:02:38.364+03:00Отображение SVG изображения в Android приложении<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-eAU3gWM2SFU/WfwZeoRWOLI/AAAAAAAABnE/78xFLf5ylQ8Wr1FMaqLN1qBRI6cFeEwJgCLcBGAs/s1600/article_2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="100" data-original-width="100" src="https://3.bp.blogspot.com/-eAU3gWM2SFU/WfwZeoRWOLI/AAAAAAAABnE/78xFLf5ylQ8Wr1FMaqLN1qBRI6cFeEwJgCLcBGAs/s1600/article_2.png" /></a></div>
<span id="docs-internal-guid-576d04e8-8094-2dd6-ab2d-839bae9b02fa"><span style="font-family: "arial"; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;">SVG - язык разметки </span><span style="background-color: white; color: #222222; font-family: "arial"; font-size: 10.5pt; vertical-align: baseline; white-space: pre-wrap;">масштабируемой векторной графики, предназначен для описания двумерной векторной графики в формате XML. В этой статье мы будем отображать на ImageView SVG изображение.</span></span><br />
<span style="background-color: white; color: #222222; font-family: "arial"; font-size: 10.5pt; vertical-align: baseline; white-space: pre-wrap;"><br /></span>
<br />
<a name='more'></a><span style="background-color: white; color: #222222; font-family: arial; font-size: 10.5pt; white-space: pre-wrap;">У этого формата много достоинств (можно прочитать в </span><a href="https://ru.wikipedia.org/wiki/SVG" style="background-color: white; font-family: arial; font-size: 10.5pt; white-space: pre-wrap;" target="_blank">Wiki</a><span style="background-color: white; color: #222222; font-family: arial; font-size: 10.5pt; white-space: pre-wrap;">). Но используя SVG в своем проекте, вы увидите, что: </span><br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #222222; font-family: "arial"; font-size: 10.5pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">- Теперь время разработки приложения сократилось, так как не требуется нарезать большое количество изображений для различных разрешений (как минимум для пяти: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi). </span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #222222; font-family: "arial"; font-size: 10.5pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">- К тому же вес приложения существенно уменьшается. Например, мое приложения Snowy: Контроль веса весит всего 3.3 Мб, а содержит более 50 различных иконок и изображений.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #222222; font-family: "arial"; font-size: 10.5pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<h2>
<span style="background-color: white; color: #222222; font-family: "arial"; white-space: pre-wrap;"><span style="font-size: small;">Как подготовить SVG изображения для Android-проекта?</span></span></h2>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #222222; font-family: "arial"; font-size: 10.5pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Вы можете либо нарисовать векторные изображения в графическом редакторе, который поддерживает SVG (например, </span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Sketch), либо скачать подходящие иконки. Но, чтобы использовать SVG в Android, файл необходимо переконвертировать в VectorDrawable.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Для этого можно воспользоваться следующим сервисом: </span><a href="http://inloop.github.io/svg2android/" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">http://inloop.github.io/svg2android/</span></a><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #222222; font-family: "arial"; font-size: 10.5pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">ВАЖНО: Если у вас используются сложные фигуры, повороты, флип, то при конвертации необходимо поставить галочку “Bake transforms into path (experimental)” </span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #222222; font-family: "arial"; font-size: 10.5pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<h2>
<span style="background-color: white; color: #222222; font-family: "arial"; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span style="font-size: small;">Как работать с SVG в Android?</span></span></h2>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #222222; font-family: "arial"; font-size: 10.5pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">1. Все cконвертированные xml изображения помещаем в папку res/drawable.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #222222; font-family: "arial"; font-size: 10.5pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">2. В gradle файле app модуля делаем следующие изменения: </span></div>
<pre class="brush: java">android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
dependencies {
compile 'com.android.support:appcompat-v7:27.0.0'
}
</pre>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #222222; font-family: "roboto"; font-size: 10.5pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Поддержка VectorDrawable доступна в Android Support Library 23.2 и выше, лучше использовать последнюю доступную версию библиотеки (на момент написания статьи - 27.0.0)</span></div>
<b id="docs-internal-guid-576d04e8-8095-2c7e-ce5c-198e8a6e7f35" style="font-weight: normal;"><br /></b>
<br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: white; color: #222222; font-family: "arial"; font-size: 10.5pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">3. Теперь просто отображаем наш drawable в android.support.v7.widget.AppCompatImageView (вместо ImageView), не забывая добавлять в корне макета xmlns:app="http://schemas.android.com/apk/res-auto":</span></div>
<pre style="background-color: white;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><<span style="color: navy;">android.support.v7.widget.AppCompatImageView</span></span></pre>
<pre style="background-color: white;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: blue;"> xmlns:app=</span><span style="color: green;">"http://schemas.android.com/apk/res-auto"</span></span></pre>
<pre style="background-color: white;"><span style="color: blue; font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: blue;">android:layout_width=</span><span style="color: green;">"wrap_content"</span></span></pre>
<pre style="background-color: white;"><span style="color: blue; font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: blue;">android:layout_height=</span><span style="color: green;">"wrap_content"</span></span></pre>
<pre style="background-color: white;"><span style="color: blue; font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: blue;">app:srcCompat=</span><span style="color: green;">"@drawable/ic_new_releases_24px"</span>/></span></pre>
Вы можете изменить цвет изображения с помощью свойства tint:<br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="color: #660e7a; font-family: "arial" , "helvetica" , sans-serif;">app</span><span style="color: blue; font-family: "arial" , "helvetica" , sans-serif;">:tint=</span><span style="color: green; font-family: "arial" , "helvetica" , sans-serif;">"@color/colorPrimary"</span><br />
<span style="color: green; font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<hr />
</div>
<span style="background-color: white; color: #222222; font-family: "arial"; font-size: 10.5pt; white-space: pre-wrap;">Все описанное успешно реализовано в моем приложение <a href="https://play.google.com/store/apps/details?id=org.snowpard.weightanalyzer" target="_blank">Snowy: Контроль веса</a>. Если вам не сложно, поддержите проект добрым отзывом и положительной оценкой! Спасибо!</span><br />
<div>
<span style="background-color: white; color: #222222; font-family: "arial"; font-size: 10.5pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-40430606555698330982017-11-02T12:44:00.002+03:002017-11-02T12:48:42.077+03:00Snowy: Контроль веса<div class="" style="clear: both; text-align: left;">
<a href="https://3.bp.blogspot.com/-JhrznsloxnY/WfrnYKgcVII/AAAAAAAABlk/RaUsSZTCVFww_neViE3U5S_DDEeXST2TQCEwYBhgL/s1600/article_3.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="100" data-original-width="100" src="https://3.bp.blogspot.com/-JhrznsloxnY/WfrnYKgcVII/AAAAAAAABlk/RaUsSZTCVFww_neViE3U5S_DDEeXST2TQCEwYBhgL/s1600/article_3.png" /></a>Snowy: Контроль веса - удобный дневник веса для контроля вашего тела!</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<a name='more'></a><br />
<br />
<div class="separator" style="clear: both;">
Устали записывать измерения в блокнот и теперь ищете удобный инструмент для контроля веса? Наш проект - это прекрасное решение в качестве дневника веса! </div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-9uXE393dcoY/WfroyDZJM2I/AAAAAAAABlw/zd1eGf6DT8Y-jeGb6qMnH6duX25jnNFSQCEwYBhgL/s1600/Google%2BPlay%2BBanner%2BRU%2B%25281024x500%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="245" data-original-width="500" height="156" src="https://1.bp.blogspot.com/-9uXE393dcoY/WfroyDZJM2I/AAAAAAAABlw/zd1eGf6DT8Y-jeGb6qMnH6duX25jnNFSQCEwYBhgL/s320/Google%2BPlay%2BBanner%2BRU%2B%25281024x500%2529.png" width="320" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
Вы просто добавляете свои измерения в программу, а она показывает все изменения в вашем весе, строит графики по каждому показателю (вес, водный баланс, содержание жира, масса костей и мышц, обхват талии). Приложение анализирует все измерения и помогает вам добиться идеального веса!</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<span style="font-size: large;">Дневник веса:</span></div>
<div class="separator" style="clear: both;">
Добавление веса - это часто используемая операция в приложении. И мы постарались сделать ее для вас максимально удобной - попробуйте! А если у вас есть весы с анализатором и сантиметровая лента, вы сможете добавлять параметры: массу костей и мышц, содержание воды и жира и обхват талии. Вы также можете добавлять заметки к своим записям</div>
<div class="separator" style="clear: both;">
Неправильно внесли данные или решили удалить запись - просто смахните ячейку вправо!</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<span style="font-size: large;">График веса:</span></div>
<div class="separator" style="clear: both;">
Мы так же позаботились о красивых и понятных графиках для всех ваших весовых показателей. Хотите увидеть само значение и произошедшие изменения - нажмите на любую вершину графика.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<span style="font-size: large;">Цели:</span></div>
<div class="separator" style="clear: both;">
Разве может быть контроль веса полноценным без целей, которые вы пытаетесь достичь? Приложение поможет вам как сбросить, так и набрать нужный вес, подскажет сколько вы уже сбросили/набрали килограмм, и сколько еще осталось. Все пройденные цели будут храниться в приложении и вы всегда сможете полюбоваться своими успехами!</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<span style="font-size: large;">Анализ данных:</span></div>
<div class="separator" style="clear: both;">
Обширный набор полезных инструментов и калькуляторов весовых показателей. Это и калькулятор ИМТ, и расчет идеального веса по разным индексам, и дневная норма калорий.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
И никакой рекламы! Вы можете спокойно работать с приложением не опасаясь появление навязчивых баннеров! </div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-INfU0iGoj9E/WfroyaNqdeI/AAAAAAAABl4/9PelO861LDQwzjX0pH__6tOJvZnEbEk_QCLcBGAs/s1600/Screen%2B2%2BRU.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="853" data-original-width="480" height="200" src="https://1.bp.blogspot.com/-INfU0iGoj9E/WfroyaNqdeI/AAAAAAAABl4/9PelO861LDQwzjX0pH__6tOJvZnEbEk_QCLcBGAs/s200/Screen%2B2%2BRU.png" width="112" /></a><a href="https://3.bp.blogspot.com/-NQZmgvaP80M/WfroycMdlCI/AAAAAAAABl0/JyQdf-5TeDIoWui1ulMyhNPDUApvPvnPwCLcBGAs/s1600/Screen%2B1%2BRU.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="853" data-original-width="480" height="200" src="https://3.bp.blogspot.com/-NQZmgvaP80M/WfroycMdlCI/AAAAAAAABl0/JyQdf-5TeDIoWui1ulMyhNPDUApvPvnPwCLcBGAs/s200/Screen%2B1%2BRU.png" width="112" /></a><a href="https://1.bp.blogspot.com/-HavuEW7RxwM/Wfroy1FVcJI/AAAAAAAABl8/O8sror5WgQwmPFlJAiAnqFx4tIPXJxXaQCLcBGAs/s1600/Screen%2B5%2BRU.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="853" data-original-width="480" height="200" src="https://1.bp.blogspot.com/-HavuEW7RxwM/Wfroy1FVcJI/AAAAAAAABl8/O8sror5WgQwmPFlJAiAnqFx4tIPXJxXaQCLcBGAs/s200/Screen%2B5%2BRU.png" width="112" /></a></div>
<br />
<br />
<div class="separator" style="clear: both;">
Если вам понравилось приложение, пожалуйста, поддержите нас - <a href="https://play.google.com/store/apps/details?id=org.snowpard.weightanalyzer" target="_blank">оставьте отзыв и положительную оценку</a>. Успехов вам в контроле за вашим телом!</div>
<div class="separator" style="clear: both;">
<br /></div>
<div style="text-align: center;">
<a href="https://play.google.com/store/apps/details?id=org.snowpard.weightanalyzer&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1" target="_blank"><img alt="Доступно в Google Play" border="0/" height="77" src="https://play.google.com/intl/en_us/badges/images/generic/ru_badge_web_generic.png" title="Доступно в Google Play" width="200" /></a></div>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-660254932481043012017-11-02T12:22:00.000+03:002017-11-02T12:49:38.185+03:00Этапы разработки проектов<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-Tq-2THHNAoI/WfrgQyIuemI/AAAAAAAABlI/rfeILVspFvs2mXlpUxFOS3-G1DzWOdGiQCLcBGAs/s1600/article_1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="100" data-original-width="100" src="https://2.bp.blogspot.com/-Tq-2THHNAoI/WfrgQyIuemI/AAAAAAAABlI/rfeILVspFvs2mXlpUxFOS3-G1DzWOdGiQCLcBGAs/s1600/article_1.png" /></a></div>
<span id="docs-internal-guid-576d04e8-7bf7-f9a0-8a13-fbd6ba8df0bd"><span style="font-family: "arial"; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;">В этой статье я опишу все стадии разработки проектов, через которые я прошел при создание своего приложения</span></span><br />
<br />
<h3 style="text-align: justify;">
<b><a name='more'></a></b></h3>
<div class="MsoNormal">
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><a href="https://play.google.com/store/apps/details?id=org.snowpard.weightanalyzer" target="_blank">Snowy: Контроль веса</a> - это дневник веса вашего тела. Я старался делать приложение удобным, функциональным, приятным - то есть для себя, так как сам теперь им пользуюсь и постоянно думаю над вопросом: “А как же еще улучшить мое приложение?”. </span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<h2>
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><b><span style="font-size: large;">Почему именно Контроль веса? </span></b></span></h2>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Не так давно у меня появились весы с анализатором тела. Мне стало интересно следить за изменениями в моем организме и тогда я завел табличку в Excel и начал записывать результаты взвешиваний. В итоге записей становилось все больше и больше и мне захотелось это все систематизировать. </span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Поэтому я скачал первый десяток популярных приложений для контроля веса, но часть мне показалось в использовании не очень удобной. И к моему огорчению, ни одно приложение не позволяло записывать мне данные из анализа (массу костей и мышц, процент жира и воды) - только вес. </span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">А почему бы не разработать приложение для себя? Ведь это в моих силах, сделать удобное и функциональное приложение под свои нужды и поделиться им со всем миром. Так и родилась идея первого приложения Snowy: Контроль веса.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<h2>
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><b><span style="font-size: large;">Этапы разработки:</span></b></span></h2>
<h3>
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">1. Поиск проблемы, которую необходимо решить</span></h3>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Допустим, вы нашли проблему, которую хотите решить. В большинстве случаев скорее всего эту проблему уже решили - причем несколько раз, так как в сторах появляются тысячи новых приложений каждый день. </span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Но все ли решения являются удобными? Как показывает практика -</span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><b> даже самое лучшее приложение можно сделать еще лучше</b></span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<h3>
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">2. Составление требований к приложению</span></h3>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">С чего начать разработку приложения? С разработки Технического задания. Но поскольку это был не коммерческий, а личный проект, то я упростил документ. </span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Сначала я набросал тезисно функционал и примеры окон на листке бумаги, затем перенес все в Google Документы. </span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><b>Если вы придумали какие-то интересные функции или элементы UI, перенесите мысли на бумагу - так вы их не забудете.</b></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<h3>
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">3. Разработка UI</span></h3>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">После формализации всех требований и определением общего виденья проекта пришло время разработать UI.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Очень подробные и понятные гайд-лайны по Material Design написали ребята из Google. (</span><a href="https://material.io/guidelines/" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">https://material.io/guidelines/</span></a><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">)</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Также Google предоставил очень большое количество бесплатных иконок (</span><a href="https://material.io/icons/" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">https://material.io/icons/</span></a><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">) и инструмент подбора цвета (</span><a href="https://material.io/color/" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">https://material.io/color/</span></a><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">)</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Разработку UI я решил делать в Sketch (</span><a href="https://www.sketchapp.com/" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">https://www.sketchapp.com</span></a><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">) - эта программа специально адаптирована под мобильную разработку и очень удобна для использования. Единственное, она доступна только для MacOS, но я думаю, что под Windows тоже можно найти стоящие графические редакторы.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Для тех, кто использует Sketch есть очень хороший ресурс с бесплатными исходниками - </span><a href="https://www.sketchappsources.com/" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">https://www.sketchappsources.com</span></a></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Так же вдохновение я черпал с сайта Dribbble - </span><span style="background-color: transparent; color: #1155cc; font-family: "arial"; font-size: 11pt; font-style: normal; font-weight: 400; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"><a href="https://dribbble.com/" style="text-decoration: none;">https://dribbble.com</a></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<br /></div>
<h3>
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">4. Архитектура проекта</span></h3>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Теперь настало время выбирать по какому пути разрабатывать свой проект. Для себя я выбрал MVP (Model - View - Presenter) - это шаблон проектирования, который используется в основном для построения </span><a href="https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D0%B9_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81" style="text-decoration: none;"><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">пользовательского интерфейса</span></a><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">.</span></div>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: #222222; font-family: Arial; font-size: 10.5pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; margin-left: 18pt; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 3pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Модель (</span><a href="https://ru.wikipedia.org/wiki/%D0%90%D0%BD%D0%B3%D0%BB%D0%B8%D0%B9%D1%81%D0%BA%D0%B8%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA" style="text-decoration: none;"><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">англ.</span></a><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> Model) — хранит в себе всю бизнес-логику, при необходимости получает данные из хранилища.</span></div>
</li>
<li dir="ltr" style="background-color: transparent; color: #222222; font-family: Arial; font-size: 10.5pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; margin-left: 18pt; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Представление (</span><a href="https://ru.wikipedia.org/wiki/%D0%90%D0%BD%D0%B3%D0%BB%D0%B8%D0%B9%D1%81%D0%BA%D0%B8%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA" style="text-decoration: none;"><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">англ.</span></a><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> View) — реализует отображение данных (из Модели), обращается к Presenter за обновлениями.</span></div>
</li>
<li dir="ltr" style="background-color: transparent; color: #222222; font-family: Arial; font-size: 10.5pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; margin-left: 18pt; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.38; margin-bottom: 1pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Представитель (</span><a href="https://ru.wikipedia.org/wiki/%D0%90%D0%BD%D0%B3%D0%BB%D0%B8%D0%B9%D1%81%D0%BA%D0%B8%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA" style="text-decoration: none;"><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">англ.</span></a><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> Presenter) — реализует взаимодействие между моделью и представлением.</span></div>
</li>
</ul>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 1pt; margin-top: 3pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">В качестве библиотеки для реализации такой архитектуры я использовал Moxy (</span><a href="https://github.com/Arello-Mobile/Moxy" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">https://github.com/Arello-Mobile/Moxy</span></a><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">)</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 1pt; margin-top: 3pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<h3>
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">5. Написания кода и разработка UI макетов</span></h3>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 6pt; margin-top: 6pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Собственно, на данном этапе мы начинаем претворять в жизнь нашу идею: реализуем структуры данных, разрабатываем макеты, думаем над логикой, пишем код. О более интересных моментах, которые я воплотил в своем проекте, я напишу в отдельных статьях.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 6pt; margin-top: 6pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">За все время разработки проекта я дополнительно использовал сервис управления проектами Teamwork (</span><a href="https://teamwork.com/" style="text-decoration: none;"><span style="background-color: transparent; color: #1155cc; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">https://teamwork.com</span></a><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">). Для небольшого количества проектов и участников данная платформа является бесплатной. С помощью нее вы сможете оформлять новые задачи, которые вам необходимо решить - чтобы в будущем о них не забыть. </span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 6pt; margin-top: 6pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 6pt; margin-top: 6pt;">
</div>
<h3>
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">6. Тестирование</span></h3>
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">После того как вы успешно разработали приложение, обязательно перед публикацией протестируйте приложение на различных версиях платформы и разрешениях. Без эмуляторов здесь будет никак не обойтись, конечно если у вас в наличие нет большого парка мобильных устройств. При этом Google снова приходит нам на помощь - после публикации приложения (например, при альфа или бета тестировании) через консоль разработчика вы можете посмотреть отчеты о тестирование на нескольких наиболее популярных устройствах.</span><br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 6pt; margin-top: 6pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">И обязательно, </span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><b>перед публикацией, проведите финальное тестирование с помощью третьих незаинтересованных лиц (родных или друзей), поскольку на этом этапе у вас уже будет замылен глаз однообразными операциями и вы можете что-то пропустить</b></span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 6pt; margin-top: 6pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<h3>
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">7. Монетизация</span></h3>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 6pt; margin-top: 6pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Про данный этап написана не одна сотня статей. Тут каждый сам решает, какой способ ему ближе. В своем приложении на первое время я отказался от рекламы в пользу удобства пользователям. Добавил только платный функционал. </span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 6pt; margin-top: 6pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<h2>
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span style="font-size: large;">Подводя итоги</span></span></h2>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 6pt; margin-top: 6pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">В итоге каждый сам выбирает удобный путь для решения поставленных задач. Эти этапы - это не наставлении на путь истинный. Это подсказки, которые вы можете принять при разработке своих проектов.</span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 6pt; margin-top: 6pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Моя цель - постараться сделать этот мир чуточку лучше, поэтому я решил часть доходов переводить в благотворительный фонд для помощи детям с онкологическими заболеваниями. И я был бы очень признателен за поддержку <a href="https://play.google.com/store/apps/details?id=org.snowpard.weightanalyzer" target="_blank">проекта</a>.</span></div>
<span id="docs-internal-guid-576d04e8-7bfc-be5d-f8a8-6dac554f14d3"></span><br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 6pt; margin-top: 6pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Я надеюсь, что данная статья будет для кого-нибудь полезной. </span></div>
</div>
<div>
<div>
<div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US"></span></div>
</div>
</div>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-33094255750654156942013-12-21T01:15:00.000+04:002013-12-21T01:15:28.517+04:00Игра: GeoVoyager<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-S3yF8OOEjss/UrSy11_jnpI/AAAAAAAAAo8/ahmfNVws5Dw/s1600/icon_72x72.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-S3yF8OOEjss/UrSy11_jnpI/AAAAAAAAAo8/ahmfNVws5Dw/s1600/icon_72x72.png" /></a></div>
Изобретатель Филеас Фогг совершил путешествие вокруг земного шара за 80 дней. Совершить такое путешествие теперь можно, не выходя из дома или стоя в очереди за хлебом! Узнать о самых необычных местах, изучить флаги и достопримечательности народов мира, а главное проверить свои знания – все это теперь возможно в новой увлекательной игре GeoVoyager.<br />
<br />
<h3 style="text-align: justify;">
<b><a name='more'></a></b></h3>
<div class="MsoNormal">
В игре вам будут доступны 8 разных локаций: Европа, Африка,
Северная и Южная Америка, Азия, Россия, Австралия и, конечно, Весь мир. В
каждой из локаций вы можете проверить себя на знания Флагов всех стран, либо их
Столиц. Несомненно, вы можете искать сами Страны. Хотите усложнить задание?
Выберите тип игры: Достопримечательности или Города, и для вас откроются все
тайные места нашей планеты. Для истинных географов существует Смешанная игра,
сочетающая в себе все типы игр.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Правила игры очень простые: 10 секунд на вопрос, 3-5 вопросов в уровне, 7
уровней. Дерзайте! Чем ближе будет ваш ответ к верному, тем больше очков вы
наберете. <o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Игра <span lang="EN-US">GeoVoyager</span><span lang="EN-US"> </span>сопровождается приятной расслабляющей музыкой, которая
затягивает вас в мир тайн и загадок нашей планеты на протяжении всей игры.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Изучайте географию, проверяйте свои знания в игре, делитесь
своими результатами с друзьями и учавствуйте в топе лучших игроков! И все это не выходя из дома, в пробке, в магазине,
везде, где хотите скоротать время! С <span lang="EN-US">GeoVoyager</span><span lang="EN-US"> </span>вы узнаете, где находится
Бермудский треугольник, какое место является самым древнейшем в Тайланде, и как
далеко от вас город Эсперанс. <o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
GeoVoyager - а как хорошо ты знаешь нашу планету?<div>
<br /><div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-I_Ol0iJaYgY/UrSzL5IkEzI/AAAAAAAAApE/xFQjcbzknRs/s1600/screen_geo_800x480_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Обзор: GeoVoyager - Скриншот из игры" border="0" height="120" src="http://2.bp.blogspot.com/-I_Ol0iJaYgY/UrSzL5IkEzI/AAAAAAAAApE/xFQjcbzknRs/s200/screen_geo_800x480_1.png" title="Обзор: GeoVoyager - Скриншот из игры" width="200" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-vAa9JTae3Y8/UrSzMFujgrI/AAAAAAAAApM/RUsPRjwSzbU/s1600/screen_geo_800x480_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Обзор: GeoVoyager - Скриншот из игры" border="0" height="120" src="http://3.bp.blogspot.com/-vAa9JTae3Y8/UrSzMFujgrI/AAAAAAAAApM/RUsPRjwSzbU/s200/screen_geo_800x480_3.png" title="Обзор: GeoVoyager - Скриншот из игры" width="200" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-lVSyD-e0F8s/UrSzMGmbJ6I/AAAAAAAAApI/DmDtoBBDt2I/s1600/screen_geo_800x480_4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Обзор: GeoVoyager - Скриншот из игры" border="0" height="120" src="http://2.bp.blogspot.com/-lVSyD-e0F8s/UrSzMGmbJ6I/AAAAAAAAApI/DmDtoBBDt2I/s200/screen_geo_800x480_4.png" title="Обзор: GeoVoyager - Скриншот из игры" width="200" /></a></div>
<div>
<br /><div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<h3>
<b>Ссылки</b></h3>
<span style="text-align: justify;">Сайт: </span><a href="http://snowpard.org/index.php?option=com_content&view=article&id=54&Itemid=90&lang=ru" style="text-align: justify;" target="_blank">Ссылка</a><br />
<div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US">Google Play: <a href="https://play.google.com/store/apps/details?id=org.snowpard.geovoyager" target="_blank">Ссылка</a></span></div>
</div>
</div>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-61393703354189188972013-06-13T08:22:00.000+04:002013-06-13T08:22:24.481+04:00Создание горизонтального меню для Android-приложений<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-EcuwCF_r5h0/UH2p2hJqBoI/AAAAAAAAAXo/fk2239rJthQ/s1600/icon.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-EcuwCF_r5h0/UH2p2hJqBoI/AAAAAAAAAXo/fk2239rJthQ/s1600/icon.png" /></a></div>
<div class="MsoNormal">
В этой статье я хочу поделиться одним из способов разработки
красивого анимированного меню или текстового горизонтального списка. </div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
</div>
<a name='more'></a><br />
<br />
<div class="MsoNormal">
<o:p></o:p></div>
<div class="MsoNormal">
<h3>
<b>Идея</b></h3>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-L3i_1FqrYTc/UblG-jZ69zI/AAAAAAAAAnc/G3Fwfjlupck/s1600/device-2013-06-11-223912.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Создание горизонтального меню для Android-приложений" border="0" height="200" src="http://1.bp.blogspot.com/-L3i_1FqrYTc/UblG-jZ69zI/AAAAAAAAAnc/G3Fwfjlupck/s200/device-2013-06-11-223912.png" title="Создание горизонтального меню для Android-приложений" width="120" /></a><a href="http://1.bp.blogspot.com/-sy2AYxBCW4Y/UblG-rVTv-I/AAAAAAAAAnY/5ywCMVCMsZY/s1600/device-2013-06-11-223938.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Создание горизонтального меню для Android-приложений" border="0" height="200" src="http://1.bp.blogspot.com/-sy2AYxBCW4Y/UblG-rVTv-I/AAAAAAAAAnY/5ywCMVCMsZY/s200/device-2013-06-11-223938.png" title="Создание горизонтального меню для Android-приложений" width="120" /></a></div>
<br />
<div class="MsoNormal">
Для реализации такого списка я использую элемент <span lang="EN-US">TextSwitcher</span>. Этот элемент
содержит в себе <span lang="EN-US">TextView</span>,
который мы можем кастомизировать по своему усмотрению. <span lang="EN-US">TextSwitcher</span> полезен для анимированной
смены текста. <o:p></o:p></div>
<div class="MsoNormal">
Мы будем использовать 3 <span lang="EN-US">TextSwitcher</span>. Основной <span lang="EN-US">Switcher</span> используется для
идентификации текущего элемента в списке, а боковые – для возможности навигации
и для отображения ближайших элементов.<o:p></o:p></div>
<div class="MsoNormal">
Для эффекта затенения мы создадим градиентный <span lang="EN-US">TextView</span> с переходом от
прозрачного до нужного нам цвета.<o:p></o:p></div>
<div class="MsoNormal">
<b><br /></b></div>
<div class="MsoNormal">
<h3>
<b>Подготовка ресурсов</b></h3>
</div>
<div class="MsoNormal">
Для начала разработаем анимацию смены текста слева направо и
справа налево.<o:p></o:p></div>
<div class="MsoNormal">
Исходный код <span lang="EN-US">anim/push_left_in.xml <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">set</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span>=<i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i>
<span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">translate</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:duration</span>=<i><span style="color: #2a00ff;">"300"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:fromXDelta</span>=<i><span style="color: #2a00ff;">"-100%p"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:toXDelta</span>=<i><span style="color: #2a00ff;">"0"</span></i> <span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">alpha</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:duration</span>=<i><span style="color: #2a00ff;">"300"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> </span><span style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">android:fromAlpha</span><span style="font-family: Consolas; font-size: 10pt;">=</span><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">"0.0"</span></i><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:toAlpha</span>=<i><span style="color: #2a00ff;">"1.0"</span></i>
<span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">set</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">><o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Исходный код <span lang="EN-US">anim/push_left_out.xml<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">set</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span>=<i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i>
<span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">translate</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:duration</span>=<i><span style="color: #2a00ff;">"300"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:fromXDelta</span>=<i><span style="color: #2a00ff;">"0"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:toXDelta</span>=<i><span style="color: #2a00ff;">"-100%p"</span></i> <span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">alpha</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:duration</span>=<i><span style="color: #2a00ff;">"300"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> </span><span style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">android:fromAlpha</span><span style="font-family: Consolas; font-size: 10pt;">=</span><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">"1.0"</span></i><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:toAlpha</span>=<i><span style="color: #2a00ff;">"0.0"</span></i>
<span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">set</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span> <span lang="EN-US"><o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Исходный код <span lang="EN-US">anim/push_right_in.xml<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">set</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span>=<i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i>
<span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">translate</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:duration</span>=<i><span style="color: #2a00ff;">"300"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:fromXDelta</span>=<i><span style="color: #2a00ff;">"100%p"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:toXDelta</span>=<i><span style="color: #2a00ff;">"0"</span></i> <span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">alpha</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:duration</span>=<i><span style="color: #2a00ff;">"300"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> </span><span style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">android:fromAlpha</span><span style="font-family: Consolas; font-size: 10pt;">=</span><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">"0.0"</span></i><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:toAlpha</span>=<i><span style="color: #2a00ff;">"1.0"</span></i>
<span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">set</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Исходный код <span lang="EN-US">anim/push_right_out.xml<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">set</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span>=<i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i>
<span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">translate</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:duration</span>=<i><span style="color: #2a00ff;">"300"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:fromXDelta</span>=<i><span style="color: #2a00ff;">"0"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:toXDelta</span>=<i><span style="color: #2a00ff;">"100%p"</span></i> <span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">alpha</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:duration</span>=<i><span style="color: #2a00ff;">"300"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> </span><span style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">android:fromAlpha</span><span style="font-family: Consolas; font-size: 10pt;">=</span><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">"1.0"</span></i><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:toAlpha</span>=<i><span style="color: #2a00ff;">"0.0"</span></i>
<span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">set</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Для градиентного <span lang="EN-US">TextView</span> необходимо описать его свойства:<o:p></o:p></div>
<div class="MsoNormal">
Исходный код <span lang="EN-US">values/attrs.xml<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">resources</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">declare-styleable</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span>=<i><span style="color: #2a00ff;">"GradientTextView"</span></i><span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">attr</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span>=<i><span style="color: #2a00ff;">"colorStartGradient"</span></i>
<span style="color: #7f007f;">format</span>=<i><span style="color: #2a00ff;">"integer"</span></i> <span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">attr</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span>=<i><span style="color: #2a00ff;">"colorEndGradient"</span></i>
<span style="color: #7f007f;">format</span>=<i><span style="color: #2a00ff;">"integer"</span></i> <span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">declare-styleable</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">></span><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">resources</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">><o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Так же добавим цвета для градиента:<o:p></o:p></div>
<div class="MsoNormal">
Исходный код <span lang="EN-US">values</span>/<span lang="EN-US">colors</span>.<span lang="EN-US">xml</span><o:p></o:p></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">resources</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">color</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span>=<i><span style="color: #2a00ff;">"textview_start_gradient"</span></i><span style="color: teal;">></span>#00ffffff<span style="color: teal;"></</span><span style="color: #3f7f7f;">color</span><span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">color</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span>=<i><span style="color: #2a00ff;">"textview_end_gradient"</span></i><span style="color: teal;">></span>#88ffffff<span style="color: teal;"></</span><span style="color: #3f7f7f;">color</span><span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">resources</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">><o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Разработаем основной макет окна, который будет содержать
наше анимированное меню:<o:p></o:p></div>
<div class="MsoNormal">
Исходный код <span lang="EN-US">layout</span>/<span lang="EN-US">main</span>.<span lang="EN-US">xml</span><o:p></o:p></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span>=<i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_width</span>=<i><span style="color: #2a00ff;">"match_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_height</span>=<i><span style="color: #2a00ff;">"wrap_content"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:orientation</span>=<i><span style="color: #2a00ff;">"horizontal"</span></i> <span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">TextSwitcher</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:id</span>=<i><span style="color: #2a00ff;">"@+id/scoreboard_location_left"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_width</span>=<i><span style="color: #2a00ff;">"0dp"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_height</span>=<i><span style="color: #2a00ff;">"match_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_weight</span>=<i><span style="color: #2a00ff;">"1"</span></i> <span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">TextSwitcher</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:id</span>=<i><span style="color: #2a00ff;">"@+id/scoreboard_location"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_width</span>=<i><span style="color: #2a00ff;">"0dp"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_height</span>=<i><span style="color: #2a00ff;">"match_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_weight</span>=<i><span style="color: #2a00ff;">"1"</span></i> <span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">TextSwitcher</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:id</span>=<i><span style="color: #2a00ff;">"@+id/scoreboard_location_right"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_width</span>=<i><span style="color: #2a00ff;">"0dp"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_height</span>=<i><span style="color: #2a00ff;">"match_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> </span><span style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">android:layout_weight</span><span style="font-family: Consolas; font-size: 10pt;">=</span><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">"1"</span></i><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"> <span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">LinearLayout</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US"><br /></span></div>
<div class="MsoNormal">
<span lang="EN-US">TextSwitcher</span>
содержит в себе <span lang="EN-US">TextView</span>.
В нашем проекте будут использоваться два вида текстовых элементов управления:
обычный (для центрального элемента) и градиентный (для боковых элементов).<o:p></o:p></div>
<div class="MsoNormal">
Исходный код<span lang="EN-US"> layout/central_textview.xml<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">TextView</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span>=<i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_width</span>=<i><span style="color: #2a00ff;">"match_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_height</span>=<i><span style="color: #2a00ff;">"match_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:gravity</span>=<i><span style="color: #2a00ff;">"center"</span></i><o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:id</span>=<i><span style="color: #2a00ff;">"@+id/textview"</span></i>
<span style="color: teal;">/></span></span><span lang="EN-US"><o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Исходный код<span lang="EN-US"> layout/gradient_textview.xml<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">org.snowpard.proects.twenty.GradientTextView</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span>=<i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:app</span>=<i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/org.snowpard.proects.twenty"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:id</span>=<i><span style="color: #2a00ff;">"@+id/textview"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_width</span>=<i><span style="color: #2a00ff;">"match_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_height</span>=<i><span style="color: #2a00ff;">"match_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:gravity</span>=<i><span style="color: #2a00ff;">"center"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">app:colorEndGradient</span>=<i><span style="color: #2a00ff;">"@color/textview_end_gradient"</span></i><o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"> </span><span style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">app:colorStartGradient</span><span style="font-family: Consolas; font-size: 10pt; line-height: 115%;">=</span><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">"@color/textview_start_gradient"</span></i><span style="font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"> <span style="color: teal;">/></span></span><o:p></o:p></div>
<div class="MsoNormal">
<b><br /></b></div>
<div class="MsoNormal">
<h3>
<b>Разработка приложения</b></h3>
</div>
<div class="MsoNormal">
<br />
<ul>
<li>Создание градиентного <span lang="EN-US">TextView</span></li>
</ul>
</div>
<pre class="brush: java">public class GradientTextView extends TextView {
private int colorStartGradient, colorEndGradient;
private boolean direction;
private LinearGradient gradient;
public GradientTextView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.GradientTextView);
colorStartGradient = a.getColor(R.styleable.GradientTextView_colorStartGradient, -2);
colorEndGradient = a.getColor(R.styleable.GradientTextView_colorEndGradient, -2);
direction = false;
}
public void setDirection(boolean direction)
{
this.direction = direction;
}
@Override
protected void onDraw(Canvas canvas) {
if (colorStartGradient != -2 && colorEndGradient != -2)
{
gradient = new LinearGradient(direction ? getWidth() : 0, 0, direction ? 0 : getWidth(), 0, colorStartGradient,
colorEndGradient, TileMode.CLAMP);
getPaint().setShader(gradient);
}
super.onDraw(canvas);
}
}</pre>
<div class="MsoNormal">
<br />
<ul>
<li>Разработка основного класса <span lang="EN-US">MainActivity</span>, работа с горизонтальным
меню.</li>
</ul>
<o:p></o:p></div>
<div class="MsoNormal">
Добавим в класс константы, которые будут отвечать за
направления анимации.</div>
<pre class="brush: java">public static final int DIRECTION_NONE = 0;
public static final int DIRECTION_LEFT = 1;
public static final int DIRECTION_RIGHT = 2;
private int current_direction = DIRECTION_RIGHT;</pre>
<div class="MsoNormal">
<br />
Опишем элементы управления и анимацию, которые будем
использовать для работы с меню:</div>
<pre class="brush: java">private TextSwitcher switcher, switcher_left, switcher_right;
private Animation in_left, in_right, out_left, out_right;</pre>
<div class="MsoNormal">
<br />
И добавим в атрибуты класса массив айтемов для
горизонтального меню и индекс для идентификации текущего айтема:</div>
<pre class="brush: java">private String[] locations = {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5"};
private int current_index;</pre>
<div class="MsoNormal">
<br />
Разработаем методы для работы с горизонтальным меню:<o:p></o:p></div>
<div class="MsoNormal">
- setAnimation: для установки нужной анимации для смены
текста</div>
<pre class="brush: java">private void setAnimation(TextSwitcher switcher, Animation in, Animation out)
{
switcher.setInAnimation(in);
switcher.setOutAnimation(out);
}</pre>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
- initSwitch: инициализация <span lang="EN-US">TextSwitcher</span></div>
<pre class="brush: java">private void initSwitch(TextSwitcher switcher, final int place, Animation in, Animation out, final Context context)
{
switcher.setFactory(new ViewFactory() {
@Override
public View makeView() {
TextView view = (TextView)LayoutInflater.from(context).inflate((place == 0) ? R.layout.central_textview: R.layout.gradient_textview, null).findViewById(R.id.textview);
if (view instanceof GradientTextView)
((GradientTextView)view).setDirection(place != 1);
return view;
}
});
setAnimation(switcher, in, out);
}</pre>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
- setSwitch: смена айтема в горизонтальном меню</div>
<pre class="brush: java">private void setSwitch(int direction)
{
boolean isUpdate = false;
if (direction == DIRECTION_LEFT && current_index > 0)
{
isUpdate = true;
current_index--;
}
else if (direction == DIRECTION_RIGHT && current_index < locations.length - 1)
{
isUpdate = true;
current_index++;
} else if (direction == DIRECTION_NONE)
isUpdate = true;
if (isUpdate)
{
if (direction != current_direction && direction != DIRECTION_NONE)
{
current_direction = direction;
if (current_direction == DIRECTION_RIGHT)
{
setAnimation(switcher_left, in_right, out_left);
setAnimation(switcher, in_right, out_left);
setAnimation(switcher_right, in_right, out_left);
} else
{
setAnimation(switcher_left, in_left, out_right);
setAnimation(switcher, in_left, out_right);
setAnimation(switcher_right, in_left, out_right);
}
}
if (current_index - 1 >= 0)
switcher_left.setText(locations[current_index - 1]);
else
switcher_left.setText("");
switcher.setText(locations[current_index]);
if (current_index + 1 <= locations.length - 1)
switcher_right.setText(locations[current_index + 1]);
else
switcher_right.setText("");
}
}</pre>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Теперь необходимо все инициализироваться в методе <span lang="EN-US">onCreate</span>() нашего <span lang="EN-US">Activity</span>:</div>
<pre class="brush: java">protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
in_left = AnimationUtils.loadAnimation(this,
R.anim.push_left_in);
in_right = AnimationUtils.loadAnimation(this,
R.anim.push_right_in);
out_right = AnimationUtils.loadAnimation(this,
R.anim.push_right_out);
out_left = AnimationUtils.loadAnimation(this,
R.anim.push_left_out);
switcher = (TextSwitcher) findViewById(R.id.scoreboard_location);
switcher_left = (TextSwitcher) findViewById(R.id.scoreboard_location_left);
switcher_right = (TextSwitcher) findViewById(R.id.scoreboard_location_right);
initSwitch(switcher, 0, in_right, out_left, this);
initSwitch(switcher_left, 1, in_right, out_left, this);
initSwitch(switcher_right, 2, in_right, out_left, this);
switcher_left.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setSwitch(DIRECTION_LEFT);
}
});
switcher_right.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setSwitch(DIRECTION_RIGHT);
}
});
setSwitch(DIRECTION_NONE);
}</pre>
<div class="MsoNormal">
<h3>
<b>Ссылки</b></h3>
</div>
<div class="MsoNormal">
<br />
<ul>
<li>Исходные коды данного проекта можно скачать отсюда: <a href="http://snowpard.org/examples/article_b19/MenuSwitchExample.zip"><span lang="EN-US">zip</span> </a></li>
</ul>
</div>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-41408562352516247002013-03-31T15:51:00.000+04:002013-03-31T15:53:48.059+04:00Программная смена языка в Android-приложении<a href="http://4.bp.blogspot.com/-EcuwCF_r5h0/UH2p2hJqBoI/AAAAAAAAAXo/fk2239rJthQ/s1600/icon.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="Программная смена языка в Android-приложении" border="0" src="http://4.bp.blogspot.com/-EcuwCF_r5h0/UH2p2hJqBoI/AAAAAAAAAXo/fk2239rJthQ/s1600/icon.png" title="Программная смена языка в Android-приложении" /></a>
<br />
<div class="MsoNormal">
Иногда необходимо в приложении давать возможность
пользователю самому менять язык приложения независимо от локали устройства. В
этой статье я покажу, как это сделать.</div>
<a name='more'></a><div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-2fB06w-DvQU/UVghXutRTnI/AAAAAAAAAmI/hS8xlmj4nME/s1600/device-2013-03-26-231005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="192" src="http://3.bp.blogspot.com/-2fB06w-DvQU/UVghXutRTnI/AAAAAAAAAmI/hS8xlmj4nME/s320/device-2013-03-26-231005.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-VGSREM0VrW8/UVghXtTWEbI/AAAAAAAAAmM/K1-2D5151TE/s1600/device-2013-03-26-230943.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="192" src="http://4.bp.blogspot.com/-VGSREM0VrW8/UVghXtTWEbI/AAAAAAAAAmM/K1-2D5151TE/s320/device-2013-03-26-230943.png" width="320" /></a></div>
<h4>
<b style="mso-bidi-font-weight: normal;">Подготовка ресурсов</b></h4>
<div class="MsoNormal">
Создадим строковые ресурсы для 4 языков: Английский,
Русский, Французский и Немецкий.</div>
<div class="MsoNormal">
Исходный код <span lang="EN-US" style="mso-ansi-language: EN-US;">values</span>/<span lang="EN-US" style="mso-ansi-language: EN-US;">strings</span>.<span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span> (Английский, По умолчанию)</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">resources</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"app_name"</span></i><span style="color: teal;">></span><span style="color: black;">ChangeLocaleExample</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"hello_world"</span></i><span style="color: teal;">></span><span style="color: black;">Hello World</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"btn_en"</span></i><span style="color: teal;">></span><span style="color: black;">English</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"btn_ru"</span></i><span style="color: teal;">></span><span style="color: black;">Russian</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"btn_de"</span></i><span style="color: teal;">></span><span style="color: black;">German</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"btn_fr"</span></i><span style="color: teal;">></span><span style="color: black;">French</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">resources</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
<br />
Исходный код <span lang="EN-US" style="mso-ansi-language: EN-US;">values</span>-<span lang="EN-US" style="mso-ansi-language: EN-US;">ru</span>/<span lang="EN-US" style="mso-ansi-language: EN-US;">strings</span>.<span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span> (Русский)</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">resources</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"hello_world"</span></i><span style="color: teal;">></span></span><span style="color: black; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">Привет</span><span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">, </span><span style="color: black; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">Мир</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"btn_en"</span></i><span style="color: teal;">></span></span><span style="color: black; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">Английский</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"btn_ru"</span></i><span style="color: teal;">></span></span><span style="color: black; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">Русский</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"btn_de"</span></i><span style="color: teal;">></span></span><span style="color: black; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">Немецкий</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"btn_fr"</span></i><span style="color: teal;">></span></span><span style="color: black; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">Французский</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">resources</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
<br />
Исходный<span style="mso-ansi-language: EN-US;"> </span>код<span style="mso-ansi-language: EN-US;"> <span lang="EN-US">values-fr/strings.xml (</span></span>Французский<span lang="EN-US" style="mso-ansi-language: EN-US;">)</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">resources</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span><span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"hello_world"</span></i><span style="color: teal;">></span><span style="color: black;">Bonjour monde</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"btn_en"</span></i><span style="color: teal;">></span><span style="color: black;">Anglais</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"btn_ru"</span></i><span style="color: teal;">></span><span style="color: black;">Russie</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"btn_de"</span></i><span style="color: teal;">></span><span style="color: black;">Allemand</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"btn_fr"</span></i><span style="color: teal;">></span><span style="color: black;">Français</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">resources</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
<br />
Исходный<span style="mso-ansi-language: EN-US;"> </span>код<span style="mso-ansi-language: EN-US;"> <span lang="EN-US">values-de/strings.xml (</span></span>Немецкий<span lang="EN-US" style="mso-ansi-language: EN-US;">)</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">resources</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span><span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"hello_world"</span></i><span style="color: teal;">></span><span style="color: black;">Hallo Welt</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"btn_en"</span></i><span style="color: teal;">></span><span style="color: black;">Englisch</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"btn_ru"</span></i><span style="color: teal;">></span><span style="color: black;">Russisch</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"btn_de"</span></i><span style="color: teal;">></span><span style="color: black;">Deutsch</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"btn_fr"</span></i><span style="color: teal;">></span><span style="color: black;">Französisch</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">resources</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
<br />
Макет приложения будет состоять из 4 кнопок, которые меняют
язык приложения и текстового поля для отображения строки приветствия:</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">android:orientation</span><span style="color: black; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">=</span><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">"vertical"</span></i><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="color: black; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"><</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">TextView</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/txt_hello"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android:layout_width</span><span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">=</span><i><span lang="EN-US" style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">"match_parent"</span></i></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_weight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:gravity</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"center"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:text</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/hello_world"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_weight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:orientation</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"horizontal"</span></i> </span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:gravity</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"center"</span></i><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">Button</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/btn_en"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_weight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:text</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"</span><span style="color: black;">@string/btn_en</span><span style="color: #2a00ff;">" </span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">Button</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/btn_ru"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_weight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:text</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/btn_ru"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">Button</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/btn_de"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_weight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:text</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/btn_de"</span></i>
<span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">Button</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/btn_fr"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_weight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:text</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/btn_fr"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">LinearLayout</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">LinearLayout</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;"><br /></b></div>
<h4>
<b style="mso-bidi-font-weight: normal;">Разработка приложения</b></h4>
<div class="MsoNormal">
Добавим атрибуты для нашей <span lang="EN-US" style="mso-ansi-language: EN-US;">Activity</span>.</div>
<div class="MsoNormal">
<ul>
<li>UI элементы:</li>
</ul>
</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<b><span lang="EN-US" style="color: #7f0055; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">private</span></b><span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> TextView </span><span lang="EN-US" style="color: #0000c0; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">txt_hello</span><span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">;</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<b><span lang="EN-US" style="color: #7f0055; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">private</span></b><span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> Button </span><span lang="EN-US" style="color: #0000c0; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">btn_en</span><span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">, </span><span lang="EN-US" style="color: #0000c0; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">btn_ru</span><span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">, </span><span lang="EN-US" style="color: #0000c0; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">btn_fr</span><span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">, </span><span lang="EN-US" style="color: #0000c0; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">btn_de</span><span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">;</span></div>
<div class="MsoNormal">
<ul>
<li>Текущая локаль приложения:</li>
</ul>
</div>
<div class="MsoNormal">
<b><span style="color: #7f0055; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">private</span></b><span style="color: black; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"> Locale </span><span style="color: #0000c0; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">myLocale</span><span style="color: black; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">;</span></div>
<div class="MsoNormal">
Разработаем необходимые методы для смены языка в приложении.</div>
<div class="MsoNormal">
<ul>
<li>Смена<span style="mso-ansi-language: EN-US;"> </span>языка<span style="mso-ansi-language: EN-US;"> </span>в<span style="mso-ansi-language: EN-US;"> </span>приложении:</li>
</ul>
</div>
<pre class="brush: java">public void changeLang(String lang)
{
if (lang.equalsIgnoreCase(""))
return;
myLocale = new Locale(lang);
saveLocale(lang);
Locale.setDefault(myLocale);
android.content.res.Configuration config = new android.content.res.Configuration();
config.locale = myLocale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
updateTexts();
}</pre>
<br />
<div class="MsoNormal">
<ul>
<li>Сохранение<span style="mso-ansi-language: EN-US;"> </span>текущей<span style="mso-ansi-language: EN-US;"> </span>локали:</li>
</ul>
</div>
<pre class="brush: java">public void saveLocale(String lang)
{
String langPref = "Language";
SharedPreferences prefs = getSharedPreferences("CommonPrefs", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(langPref, lang);
editor.commit();
}</pre>
<br />
<div class="MsoNormal">
<ul>
<li>Загрузка ранее сохраненной локали:</li>
</ul>
</div>
<pre class="brush: java">public void loadLocale()
{
String langPref = "Language";
SharedPreferences prefs = getSharedPreferences("CommonPrefs", Activity.MODE_PRIVATE);
String language = prefs.getString(langPref, "");
changeLang(language);
}</pre>
<br />
<div class="MsoNormal">
<ul>
<li>Обновление <span lang="EN-US" style="mso-ansi-language: EN-US;">UI</span><span lang="EN-US"> </span>элементов текущего окна (обновлять необходимо только окно, в
котором происходит смена локали): </li>
</ul>
</div>
<pre class="brush: java">private void updateTexts()
{
txt_hello.setText(R.string.hello_world);
btn_en.setText(R.string.btn_en);
btn_ru.setText(R.string.btn_ru);
btn_fr.setText(R.string.btn_fr);
btn_de.setText(R.string.btn_de);
}</pre>
<br />
<div class="MsoNormal">
Добавим события на нажатие кнопок. Для этого имплементируем
интерфейс <span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">OnClickListener</span>
для нашей Activity (<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">implements</span><span lang="EN-US"> </span><span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">OnClickListener</span>). И
реализуем метод <span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">onClick</span>().</div>
<pre class="brush: java">public void onClick(View v) {
String lang = "en";
switch (v.getId()) {
case R.id.btn_en:
lang = "en";
break;
case R.id.btn_ru:
lang = "ru";
break;
case R.id.btn_de:
lang = "de";
break;
case R.id.btn_fr:
lang = "fr";
break;
default:
break;
}
changeLang(lang);
}</pre>
<br />
<div class="MsoNormal">
В завершение совместим всю работу со сменой языка в методе <span lang="EN-US" style="mso-ansi-language: EN-US;">onCreate</span>() нашей <span lang="EN-US" style="mso-ansi-language: EN-US;">Activity</span>:</div>
<pre class="brush: java">protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.txt_hello = (TextView)findViewById(R.id.txt_hello);
this.btn_en = (Button)findViewById(R.id.btn_en);
this.btn_ru = (Button)findViewById(R.id.btn_ru);
this.btn_fr = (Button)findViewById(R.id.btn_fr);
this.btn_de = (Button)findViewById(R.id.btn_de);
this.btn_en.setOnClickListener(this);
this.btn_ru.setOnClickListener(this);
this.btn_fr.setOnClickListener(this);
this.btn_de.setOnClickListener(this);
loadLocale();
}</pre>
<br />
<h4>
Ссылки</h4>
<div class="MsoNormal">
<ul>
<li>Исходные коды данного проекта можно скачать отсюда: <span lang="EN-US" style="mso-ansi-language: EN-US;"><a href="http://snowpard.org/examples/article_b18/ChangeLocaleExample.zip">zip</a></span></li>
</ul>
</div>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-44735339430321358512013-03-29T12:14:00.000+04:002013-03-29T12:14:12.278+04:00Галерея с помощью ViewFlipper<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-EcuwCF_r5h0/UH2p2hJqBoI/AAAAAAAAAXo/fk2239rJthQ/s1600/icon.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="Галерея с помощью ViewFlipper" border="0" src="http://4.bp.blogspot.com/-EcuwCF_r5h0/UH2p2hJqBoI/AAAAAAAAAXo/fk2239rJthQ/s1600/icon.png" title="Галерея с помощью ViewFlipper" /></a></div>
<div class="MsoNormal">
Часто при разработке галереи в мобильных приложениях
разработчик сталкивается с проблемой нехватки памяти при работе с большим
количеством изображений. В этой статье мы разработаем галерею, которая поможет
предотвратить появление сообщений вида <span lang="EN-US" style="mso-ansi-language: EN-US;">OutOfMemoryError</span> или <span lang="EN-US" style="mso-ansi-language: EN-US;">OutOfMemoryException</span>.<br />
<br />
<a name='more'></a></div>
<h4>
<b style="mso-bidi-font-weight: normal;">Особенности галереи</b></h4>
<ul>
<li><div class="MsoNormal">
При большом количестве изображений приложение будет
работать стабильно без <span lang="EN-US" style="mso-ansi-language: EN-US;">OutOfMemoryError</span>;</div>
</li>
<li><div class="MsoNormal">
Анимированные переходы между изображениями;</div>
</li>
<li><div class="MsoNormal">
Возможность зациклить галерею<span lang="EN-US" style="mso-ansi-language: EN-US;">.</span></div>
</li>
</ul>
<div class="MsoNormal">
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-Dl7RjpEtykE/UVVMHlUlsdI/AAAAAAAAAlk/BJeI4bdYZPA/s1600/device-2013-03-26-230806.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://1.bp.blogspot.com/-Dl7RjpEtykE/UVVMHlUlsdI/AAAAAAAAAlk/BJeI4bdYZPA/s320/device-2013-03-26-230806.png" width="192" /></a></div>
<b style="mso-bidi-font-weight: normal;"><br /></b></div>
<h4>
<b style="mso-bidi-font-weight: normal;">Подготовка ресурсов</b></h4>
<div class="MsoNormal">
Исходный<span style="mso-ansi-language: EN-US;"> </span>код<span style="mso-ansi-language: EN-US;"> <span lang="EN-US">strings.xml</span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">resources</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"app_name"</span></i><span style="color: teal;">></span><span style="color: black;">ViewFlipperExample</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"str_loop"</span></i><span style="color: teal;">></span><span style="color: black;">Looped</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"str_pages"</span></i><span style="color: teal;">></span><span style="color: black;">%1$s/%2$s</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal">
<span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">resources</span><span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
<br />
Отсюда можно скачать необходимые изображения для галереи.</div>
<div class="MsoNormal">
Так же создадим файлы анимации для переходов между
картинками.</div>
<div class="MsoNormal">
Исходный<span style="mso-ansi-language: EN-US;"> </span>код<span lang="EN-US" style="mso-ansi-language: EN-US;">: anim/go_next_in.xml</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><?</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">xml</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">version</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i> <span style="color: #7f007f;">encoding</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"utf-8"</span></i><span style="color: teal;">?></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">set</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">translate</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:fromXDelta</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"100%p"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:toXDelta</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"0"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:duration</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"400"</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">alpha</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:fromAlpha</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:toAlpha</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:duration</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"400"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">set</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
<br />
Исходный<span style="mso-ansi-language: EN-US;"> </span>код<span lang="EN-US" style="mso-ansi-language: EN-US;">: anim/go_next_out.xml</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><?</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">xml</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">version</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i> <span style="color: #7f007f;">encoding</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"utf-8"</span></i><span style="color: teal;">?></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">set</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">translate</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:fromXDelta</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"0"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:toXDelta</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"-100%p"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:duration</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"400"</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">alpha</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:fromAlpha</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:toAlpha</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:duration</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"400"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">set</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
<br />
Исходный<span style="mso-ansi-language: EN-US;"> </span>код<span lang="EN-US" style="mso-ansi-language: EN-US;">: anim/go_prev_in.xml</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><?</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">xml</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">version</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i> <span style="color: #7f007f;">encoding</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"utf-8"</span></i><span style="color: teal;">?></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">set</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">translate</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="mso-tab-count: 1;"> </span><span style="color: #7f007f;">android:fromXDelta</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"-100%p"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:toXDelta</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"0"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:duration</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"400"</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">alpha</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> </span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="mso-tab-count: 1;"> </span><span style="color: #7f007f;">android:fromAlpha</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:toAlpha</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:duration</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"400"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">set</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
<br />
Исходный<span style="mso-ansi-language: EN-US;"> </span>код<span lang="EN-US" style="mso-ansi-language: EN-US;">: anim/go_prev_out.xml</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><?</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">xml</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">version</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i> <span style="color: #7f007f;">encoding</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"utf-8"</span></i><span style="color: teal;">?></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">set</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">translate</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="mso-tab-count: 1;"> </span><span style="color: #7f007f;">android:fromXDelta</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"0"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:toXDelta</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"100%p"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:duration</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"400"</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">alpha</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> </span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:fromAlpha</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:toAlpha</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:duration</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"400"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">set</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
<br />
И сам макет приложения. Он будет состоять из <span lang="EN-US" style="mso-ansi-language: EN-US;">ViewFlipper</span>, <span lang="EN-US" style="mso-ansi-language: EN-US;">TextView</span> для отображения
текущей страницы и <span lang="EN-US" style="mso-ansi-language: EN-US;">CheckBox</span>
для возможности зациклить галерею.</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:orientation</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"vertical"</span></i> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">ViewFlipper</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/gallery"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_weight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:orientation</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"horizontal"</span></i> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">CheckBox</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/checkBoxLoop"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:text</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/str_loop"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">TextView</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/txtPages"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_weight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1"</span></i> </span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:gravity</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"center"</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
<br />
Исходный код<span lang="EN-US" style="mso-ansi-language: EN-US;">
gallery_item.xml:</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">ImageView</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/gallery_item"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">android:scaleType</span><span style="color: black; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">=</span><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">"centerInside"</span></i><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"> <span style="color: teal;">></span></span></div>
<div class="MsoNormal">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">ImageView</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
<br /></div>
<h4>
<b style="mso-bidi-font-weight: normal;">Разработка</b></h4>
<div class="MsoNormal">
Идея галереи заключается в том, чтобы хранить в памяти
только одно <span lang="EN-US" style="mso-ansi-language: EN-US;">View</span><span lang="EN-US"> </span>с текущим изображением. При переходе к очередному
изображению добавить новое <span lang="EN-US" style="mso-ansi-language: EN-US;">View</span><span lang="EN-US"> </span>к <span lang="EN-US" style="mso-ansi-language: EN-US;">ViewFlipper</span>,
а текущее удалить. Таким образом, память приложения не увеличивается и во время
освобождается. </div>
<div class="MsoNormal">
Разрабатывать гелерею будет в основной <span lang="EN-US" style="mso-ansi-language: EN-US;">Activity</span> (<span lang="EN-US" style="mso-ansi-language: EN-US;">MainActivity</span>).</div>
<div class="MsoNormal">
Нам потребуются следующие атрибуты:</div>
<div class="MsoNormal">
<ul>
<li><span lang="EN-US" style="mso-ansi-language: EN-US;">UI</span><span lang="EN-US"> </span>элементы</li>
</ul>
</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">private</span></b><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> ViewFlipper </span><span lang="EN-US" style="color: #0000c0; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">gallery</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">;</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">private</span></b><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> TextView </span><span lang="EN-US" style="color: #0000c0; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">txtPages</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">;</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">private</span></b><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> CheckBox </span><span lang="EN-US" style="color: #0000c0; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">checkBoxLoop</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">;</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">private</span></b><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> LayoutInflater </span><span lang="EN-US" style="color: #0000c0; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">inflater</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> = </span><b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">null;</span></b></div>
<div class="MsoNormal">
<ul>
<li>Координата X в момент нажатия на ViewFlipper</li>
</ul>
</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">private</span></b><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> </span><b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">float</span></b><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> </span><span lang="EN-US" style="color: #0000c0; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">fromPosition</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">;</span></div>
<div class="MsoNormal">
<ul>
<li>Индекс текущего изображения</li>
</ul>
</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">private</span></b><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> </span><b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">int</span></b><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> </span><span lang="EN-US" style="color: #0000c0; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">count</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">;</span></div>
<div class="MsoNormal">
<ul>
<li>Список изображений</li>
</ul>
</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">private</span></b><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> List<Bitmap> </span><span lang="EN-US" style="color: #0000c0; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">items</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">;</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal">
Разработаем основные методы для галереи:</div>
<div class="MsoNormal">
<ul>
<li>Подготовка <span lang="EN-US" style="mso-ansi-language: EN-US;">View</span>
с изображением</li>
</ul>
</div>
<pre class="brush: java">private View addImage(Bitmap bitmap)
{
ImageView view = (ImageView)inflater.inflate(R.layout.gallery_item, null);
view.setImageBitmap(bitmap);
return view;
}</pre>
<br />
<div class="MsoNormal">
<ul>
<li>Удаление изображения из галереи</li>
</ul>
</div>
<pre class="brush: java">private void removeImages()
{
if (gallery.getChildCount() > 2)
{
gallery.removeViewAt(0);
System.gc();
}
}</pre>
<br />
<div class="MsoNormal">
<ul>
<li>Добавление изображения в галерею в зависимости от
направления</li>
</ul>
</div>
<pre class="brush: java">private void addNextImage(int position, boolean isLeft)
{
if (isLeft)
{
if (position >= 0)
{
gallery.addView(addImage(items.get(position)));
}
} else
{
if (position < items.size())
gallery.addView(addImage(items.get(position)));
}
}</pre>
<br />
<div class="MsoNormal">
<ul>
<li>Обновление <span lang="EN-US" style="mso-ansi-language: EN-US;">UI
</span>элементов </li>
</ul>
</div>
<pre class="brush: java">private void updateTextView()
{
String pages = String.format(getString(R.string.str_pages), (count + 1), items.size());
txtPages.setText(pages);
}</pre>
<br />
<div class="MsoNormal">
<ul>
<li>Переход к следующему изображению</li>
</ul>
</div>
<pre class="brush: java">public void next()
{
if (count >= items.size() - 1 && !checkBoxLoop.isChecked())
return;
else if (count >= items.size() - 1 && checkBoxLoop.isChecked())
count = -1;
count++;
addNextImage(count, false);
gallery.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.go_next_in));
gallery.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.go_next_out));
gallery.showNext();
removeImages();
updateTextView();
}</pre>
<br />
<div class="MsoNormal">
<ul>
<li>Переход<span style="mso-ansi-language: EN-US;"> </span>к<span style="mso-ansi-language: EN-US;">
</span>предыдущему<span style="mso-ansi-language: EN-US;"> </span>изображению</li>
</ul>
</div>
<pre class="brush: java">public void previous()
{
if (count <= 0 && !checkBoxLoop.isChecked())
return;
else if (count <= 0 && checkBoxLoop.isChecked())
count = items.size();
count--;
addNextImage(count, true);
gallery.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.go_prev_in));
gallery.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.go_prev_out));
gallery.showNext();
removeImages();
updateTextView();
}</pre>
<br />
<div class="MsoNormal">
<ul>
<li>Инициализация списка с изображениями</li>
</ul>
</div>
<pre class="brush: java">private void initList()
{
items = new ArrayList<bitmap>();
items.add(BitmapFactory.decodeResource(getResources(), R.drawable.sample_0));
items.add(BitmapFactory.decodeResource(getResources(), R.drawable.sample_1));
items.add(BitmapFactory.decodeResource(getResources(), R.drawable.sample_2));
items.add(BitmapFactory.decodeResource(getResources(), R.drawable.sample_3));
items.add(BitmapFactory.decodeResource(getResources(), R.drawable.sample_4));
items.add(BitmapFactory.decodeResource(getResources(), R.drawable.sample_5));
items.add(BitmapFactory.decodeResource(getResources(), R.drawable.sample_6));
items.add(BitmapFactory.decodeResource(getResources(), R.drawable.sample_7));
}</bitmap></pre>
<br />
<div class="MsoNormal">
В завершение совместим всю работу с галерей в методе <span lang="EN-US" style="mso-ansi-language: EN-US;">onCreate</span> нашей <span lang="EN-US" style="mso-ansi-language: EN-US;">Activity</span>:</div>
<pre class="brush: java">protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initList();
inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.txtPages = (TextView)findViewById(R.id.txtPages);
this.checkBoxLoop = (CheckBox)findViewById(R.id.checkBoxLoop);
this.gallery = (ViewFlipper)findViewById(R.id.gallery);
this.gallery.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
fromPosition = event.getX();
break;
case MotionEvent.ACTION_UP:
float toPosition = event.getX();
if (fromPosition > toPosition + 20)
{
next();
return true;
}
else if (fromPosition < toPosition - 20)
{
previous();
return true;
}
default:
break;
}
return true;
}
});
gallery.addView(addImage(items.get(0)));
updateTextView();
}</pre>
<br />
<h4>
<b style="mso-bidi-font-weight: normal;">Ссылки</b></h4>
<ul>
<li class="MsoNormal">Исходные коды данного проекта можно скачать отсюда: <span lang="EN-US" style="mso-ansi-language: EN-US;"><a href="http://snowpard.org/examples/article_b17/ViewFlipperExample.zip">zip</a></span></li>
</ul>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-78948678661784736322013-03-27T22:25:00.001+04:002013-03-27T22:25:35.509+04:00Самопечатающий TextView<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-m8H9sTR1Bhw/UHXCg_6y0tI/AAAAAAAAAU4/4l0Rgm7a-H0/s1600/icon.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="Самопечатающий TextView" border="0" src="http://4.bp.blogspot.com/-m8H9sTR1Bhw/UHXCg_6y0tI/AAAAAAAAAU4/4l0Rgm7a-H0/s1600/icon.png" title="Самопечатающий TextView" /></a></div>
<div class="MsoNormal">
Сегодня мы разработаем элемент, который будет посимвольно
печатать заданный текст на экран.</div>
<div class="MsoNormal">
<o:p></o:p></div>
<div class="MsoNormal">
<b><br /></b></div>
<div class="MsoNormal">
<b></b></div>
<a name='more'></a><b><br /></b>
<div class="MsoNormal">
<b><br /></b>
<b><br /></b></div>
<div class="MsoNormal">
<h4>
<b>Разработка</b><b><span lang="EN-US"> TypewriterTextView<o:p></o:p></span></b></h4>
</div>
<div class="MsoNormal">
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-jOGgKEiwxuw/UVM5OpV4OtI/AAAAAAAAAk8/GKtuQTPZWT8/s1600/device-2013-03-26-230626.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://2.bp.blogspot.com/-jOGgKEiwxuw/UVM5OpV4OtI/AAAAAAAAAk8/GKtuQTPZWT8/s320/device-2013-03-26-230626.png" width="192" /></a></div>
<br />
В основе нашего класса будет обычный TextView. Создадим
новый класс TypewriterTextView и унаследуем его от TextView.<o:p></o:p></div>
<pre class="brush: java">public class TypewriterTextView extends TextView {
public TypewriterTextView(Context context) {
super(context);
}
public TypewriterTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TypewriterTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
}</pre>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Добавим нашему классу следующие атрибуты:<o:p></o:p></div>
<div class="MsoNormal">
- Время отображения одного символа<o:p></o:p></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">private</span></b><span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">final</span></b><span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">static</span></b><span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">float</span></b><span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><i><span lang="EN-US" style="color: #0000c0; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">TEXT_CHARACTER_DELAY</span></i><span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> = 0.1f;</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">private</span></b><span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">final</span></b><span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">static</span></b><span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">int</span></b><span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><i><span lang="EN-US" style="color: #0000c0; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">TEXT_CHARACTER_DELAY_MS</span></i><span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> = (</span><b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">int</span></b><span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;">)(</span><i><span lang="EN-US" style="color: #0000c0; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">TEXT_CHARACTER_DELAY</span></i><span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> * 1000);</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US">- </span>индекс текущего символа<span lang="EN-US"> <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">private</span></b><span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">int</span></b><span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><span lang="EN-US" style="color: #0000c0; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">mCurrentCharacter</span><span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;">;<o:p></o:p></span></div>
<div class="MsoNormal">
- время, прошедшее с момента отображения последнего символа<o:p></o:p></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">private</span></b><span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">long</span></b><span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><span lang="EN-US" style="color: #0000c0; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">mLastTime</span><span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;">;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US">- </span>отображаемый текст<span lang="EN-US"><o:p></o:p></span></div>
<div class="MsoNormal">
<b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">private</span></b><span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt; line-height: 115%;"> CharSequence </span><span lang="EN-US" style="color: #0000c0; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">mText</span><span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt; line-height: 115%;">;</span><span lang="EN-US"><o:p></o:p></span></div>
<div class="MsoNormal">
Переопределим метод отрисовки <span lang="EN-US">onDraw</span> для отображения текста
посимвольно.<o:p></o:p></div>
<pre class="brush: java">public void onDraw(Canvas canvas) {
final long time = SystemClock.uptimeMillis();
final long delta = time - mLastTime;
if (delta > TEXT_CHARACTER_DELAY_MS) {
if (mText != null) {
if (mCurrentCharacter <= mText.length()) {
CharSequence subtext = mText.subSequence(0, mCurrentCharacter);
setText(subtext, TextView.BufferType.SPANNABLE);
mCurrentCharacter++;
postInvalidateDelayed(TEXT_CHARACTER_DELAY_MS);
}
}
}
super.onDraw(canvas);
}</pre>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Добавим метод для задания нового текста<o:p></o:p></div>
<pre class="brush: java">public void setTypewriterText(CharSequence text) {
mText = text;
mCurrentCharacter = 0;
mLastTime = 0;
postInvalidate();
}</pre>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
И метод для отображения всего текста целиком<o:p></o:p></div>
<pre class="brush: java">public void snapToEnd() {
mCurrentCharacter = mText.length() - 1;
}</pre>
<div class="MsoNormal">
<b><br /></b></div>
<div class="MsoNormal">
<h4>
<b>Подготовка</b><b> ресурсов</b></h4>
</div>
<div class="MsoNormal">
Исходный код строковых ресурсов (<span lang="EN-US">values</span>/<span lang="EN-US">strings</span>)<o:p></o:p></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">resources</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span>=<i><span style="color: #2a00ff;">"app_name"</span></i><span style="color: teal;">></span>TypewriterTextView<span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span>=<i><span style="color: #2a00ff;">"btn_txt"</span></i><span style="color: teal;">></span></span><span style="font-family: 'Courier New'; font-size: 10pt;">Напечатать</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span>=<i><span style="color: #2a00ff;">"sample_text"</span></i><span style="color: teal;">></span>Android powers hundreds of millions
of mobile devices in more than 190 countries around the world. It\'s the
largest installed base of any mobile platform and growing fast—every day
another million users power up their Android devices for the first time and
start looking for apps, games, and other digital content.<span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"> </</span><span style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">resources</span><span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span><o:p></o:p></div>
<div class="MsoNormal">
Макет приложения будет состоять из поля для ввода текста,
кнопки и самопечатающего <span lang="EN-US">TextView</span>.<o:p></o:p></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span>=<i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_width</span>=<i><span style="color: #2a00ff;">"match_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_height</span>=<i><span style="color: #2a00ff;">"match_parent"</span></i> <o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:orientation</span>=<i><span style="color: #2a00ff;">"vertical"</span></i><span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">EditText</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:id</span>=<i><span style="color: #2a00ff;">"@+id/typeEd"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_width</span>=<i><span style="color: #2a00ff;">"match_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_height</span>=<i><span style="color: #2a00ff;">"wrap_content"</span></i> <span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">Button</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:id</span>=<i><span style="color: #2a00ff;">"@+id/typeBtn"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_width</span>=<i><span style="color: #2a00ff;">"match_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_height</span>=<i><span style="color: #2a00ff;">"wrap_content"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:text</span>=<i><span style="color: #2a00ff;">"@string/btn_txt"</span></i> <span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">org.snowpard.proects.seventeen.TypewriterTextView</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:id</span>=<i><span style="color: #2a00ff;">"@+id/typeTxt"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_width</span>=<i><span style="color: #2a00ff;">"match_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_height</span>=<i><span style="color: #2a00ff;">"wrap_content"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_weight</span>=<i><span style="color: #2a00ff;">"1"</span></i> <span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"> </</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span><span lang="EN-US"><o:p></o:p></span></div>
<div class="MsoNormal">
<b><span lang="EN-US"><br /></span></b></div>
<div class="MsoNormal">
<h4>
<b><span lang="EN-US">MainActivity</span></b></h4>
</div>
<div class="MsoNormal">
Исходный код основной <span lang="EN-US">Activity<o:p></o:p></span></div>
<pre class="brush: java">public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TypewriterTextView ttv = (TypewriterTextView)findViewById(R.id.typeTxt);
ttv.setTypewriterText(getString(R.string.sample_text));
ttv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ttv.snapToEnd();
}
});
final EditText et = (EditText)findViewById(R.id.typeEd);
Button btn = (Button)findViewById(R.id.typeBtn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ttv.setTypewriterText(et.getText());
}
});
}
}</pre>
<br />
<div class="MsoNormal">
<h4>
<b>Ссылки</b></h4>
</div>
<div class="MsoNormal">
<br />
<ul>
<li>Исходные коды данного проекта можно скачать отсюда: <span lang="EN-US"><a href="http://snowpard.org/examples/article_b16/TypewriterTextView.zip">zip</a></span></li>
</ul>
</div>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-14163810955853634752013-03-07T22:23:00.003+04:002013-03-27T22:41:15.144+04:00Обзор: AppSurfer<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-XocWFvecvlA/UTjanfNtgWI/AAAAAAAAAkU/dgye2hasvvE/s1600/appsurfer.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="Обзор: AppSurfer" border="0" src="http://1.bp.blogspot.com/-XocWFvecvlA/UTjanfNtgWI/AAAAAAAAAkU/dgye2hasvvE/s1600/appsurfer.png" title="Обзор: AppSurfer" /></a></div>
Интересный сервис, позволяющий протестировать <span lang="EN-US" style="mso-ansi-language: EN-US;">Android</span>-приложения прямо в
браузере перед установкой его на девайс.<br />
<br />
<a name='more'></a><br />
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b>Особенности:</b></div>
<ul>
<li><div class="MsoNormal">
Приложения и игры работают в браузере</div>
</li>
<li><div class="MsoNormal">
Сервис работает везде, будт то <span lang="EN-US" style="mso-ansi-language: EN-US;">Ipad</span>, смартфон, компьютер</div>
</li>
<li><div class="MsoNormal">
Виджеты с приложением можно встраивать в блогах и на
сайтах</div>
</li>
<li><div class="MsoNormal">
Абсолютно бесплатно </div>
</li>
</ul>
<div class="MsoNormal">
AppSurfer, индийский стартап, сервис развивающий принцип
«Попробуй, прежде чем купить» для <span lang="EN-US" style="mso-ansi-language: EN-US;">Android</span><span lang="EN-US"> </span>приложений. Этот сервис позволяет
пользователям протестировать приложения и игры, преждем, чем их скачать (а в
дальнейшем и купить) для своего смартфона или планшета.</div>
<div class="MsoNormal">
<br />
Разработчики могут встраивать браузерные приложения на свои
сайты, блоги, делиться ими в сети <span lang="EN-US" style="mso-ansi-language: EN-US;">Facebook</span>.<span style="mso-spacerun: yes;"> </span></div>
<div class="MsoNormal">
<br />
Пример виджета для игры <span lang="EN-US" style="mso-ansi-language: EN-US;">BrainLand</span>:</div>
<iframe allowtransparency="true" frameborder:="" none="" src="https://www.appsurfer.com/widget/c75adc60-2380-0130-fe42-1231381fff99?phone_align=left&scroll=false&tour=true&action=embedwidget&controller=publisher%2Fapps&id=17179-brain-land&referrer=https://publisher.appsurfer.com/apps/17179-brain-land" style="border: none; height: 620px; width: 620px;"></iframe>
<br />
<div class="MsoNormal">
<br /></div>
<h4>
<span lang="EN-US" style="mso-ansi-language: EN-US;"><o:p>Ссылки</o:p></span></h4>
<ul>
<li><div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">AppSurfer:</span>
<span lang="EN-US" style="mso-ansi-language: EN-US;"><a href="http://appsurfer.com/">http://appsurfer.com</a></span>
</div>
</li>
<li><div class="MsoNormal">
Ссылка на игру <a href="http://www.appsurfer.com/apps/17175-tower-of-masters">Башня Мастеров</a></div>
</li>
<li><div class="MsoNormal">
Ссылка на игру <a href="http://www.appsurfer.com/apps/17181-tarabanya-talking-pet-free">Тарабаня</a></div>
</li>
</ul>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-25171823445674303232013-02-24T23:04:00.001+04:002013-03-01T10:15:03.211+04:00Кастомизация интерфейса: Градиентный TextView<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-m8H9sTR1Bhw/UHXCg_6y0tI/AAAAAAAAAU4/4l0Rgm7a-H0/s1600/icon.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="Кастомизация интерфейса: Градиентный TextView" border="0" src="http://4.bp.blogspot.com/-m8H9sTR1Bhw/UHXCg_6y0tI/AAAAAAAAAU4/4l0Rgm7a-H0/s1600/icon.png" title="Кастомизация интерфейса: Градиентный TextView" /></a></div>
<div class="MsoNormal">
Сегодня мы посмотрим как можно добавлять к элементам новые
свойства на примере <span lang="EN-US" style="mso-ansi-language: EN-US;">TextView</span>,
покрасив его в градиент.<br />
<a name='more'></a><br />
<br />
<br /></div>
<h4>
<b style="mso-bidi-font-weight: normal;">Практика</b></h4>
<div class="MsoNormal">
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-KxSsHnTDMBs/USpjj4qmK8I/AAAAAAAAAjc/Jst0NpA3yEM/s1600/device-2013-02-22-081417.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://2.bp.blogspot.com/-KxSsHnTDMBs/USpjj4qmK8I/AAAAAAAAAjc/Jst0NpA3yEM/s320/device-2013-02-22-081417.png" width="192" /></a></div>
<br />
Чтобы добавить новые свойства к элементу, необходимо их
описать как атрибуты в <span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span>-файле
<span lang="EN-US" style="mso-ansi-language: EN-US;">values</span>/attrs.xml.</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><?</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">xml</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">version</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i>
<span style="color: #7f007f;">encoding</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"utf-8"</span></i><span style="color: teal;">?></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">resources</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">declare-styleable</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"GradientTextView"</span></i><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">attr</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"colorStartGradient"</span></i>
<span style="color: #7f007f;">format</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"integer"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">attr</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"colorEndGradient"</span></i>
<span style="color: #7f007f;">format</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"integer"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">declare-styleable</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">resources</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
<br />
Опишем цвета для нашего градиента (<span lang="EN-US" style="mso-ansi-language: EN-US;">colors</span>.<span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span>):</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><?</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">xml</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">version</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i>
<span style="color: #7f007f;">encoding</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"utf-8"</span></i><span style="color: teal;">?></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">resources</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span><span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-tab-count: 1;"> </span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-tab-count: 1;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">color</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"textview_start_gradient"</span></i><span style="color: teal;">></span><span style="color: black;">#ffcccccc</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">color</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-tab-count: 1;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">color</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"textview_end_gradient"</span></i><span style="color: teal;">></span><span style="color: black;">#ff56a9c7</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">color</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">resources</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
<br />
Теперь разработаем новый класс для нашего элемента. В
качестве атрибутов этого класса выступают начальный и конечный цвет градиента.
В конструкторе класса получим атрибуты из <span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span>-файла. Градиент устанавливается с помощью метода <span lang="EN-US" style="mso-ansi-language: EN-US;">setShader</span>(). В качестве
градиента добавим линейный градиент.</div>
<div class="MsoNormal">
Source code (GradientTextView.java)<span lang="EN-US" style="mso-ansi-language: EN-US;">:</span></div>
<pre class="brush: java">public class GradientTextView extends TextView {
private int colorStartGradient, colorEndGradient;
public GradientTextView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.GradientTextView);
colorStartGradient = a.getColor(R.styleable.GradientTextView_colorStartGradient, -2);
colorEndGradient = a.getColor(R.styleable.GradientTextView_colorEndGradient, -2);
}
@Override
protected void onDraw(Canvas canvas) {
if (colorStartGradient != -2 && colorEndGradient != -2)
{
getPaint().setShader(
new LinearGradient(0, 0, 0, getHeight(), colorStartGradient,
colorEndGradient, TileMode.MIRROR));
}
super.onDraw(canvas);
}
}</pre>
<div class="MsoNormal">
<br />
Теперь добавим наш элемент в main.xml. Чтобы добавить новые свойства,
необходимо прописать следующую строку:<span style="color: black; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"> </span><span lang="EN-US" style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">xmlns</span><span style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">:</span><span lang="EN-US" style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">app</span><span style="color: black; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">=</span><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">"</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">http</span></i><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">://</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">schemas</span></i><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">.</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">android</span></i><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">.</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">com</span></i><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">/</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">apk</span></i><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">/</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">res</span></i><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">/</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">org</span></i><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">.</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">snowpard</span></i><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">.</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">proects</span></i><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">.</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">sixteen</span></i><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">"</span></i>.</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><br /></span>
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">RelativeLayout</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">xmlns:app</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/org.snowpard.proects.sixteen"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:gravity</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"center"</span></i> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">org.snowpard.proects.sixteen.GradientTextView</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/gradient_textview"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:gravity</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"center"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:text</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/app_name"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:textSize</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"35sp"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">app:colorEndGradient</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@color/textview_end_gradient"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">app:colorStartGradient</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@color/textview_start_gradient"</span></i>
<span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">RelativeLayout</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span><br />
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></span><br />
<h4>
Тень</h4>
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">
</span><br />
Если для TextView необходимо добавить тень, то обычный способ (свойства в xml) даст неправильный результат, так как setShader изменит цвет всего элемента TextView. Таким образом, установленный цвет тени в xml не отобразится. Чтобы добавить тень к нашему элементу, необходимо выполнить следующие действия:<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"> </span></div>
<div class="MsoNormal">
<ul>
<li>Добавить новый цвет в color.xml:</li>
</ul>
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"><div class="MsoNormal">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">color</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span>=<i><span style="color: #2a00ff;">"textview_shadow"</span></i><span style="color: teal;">></span>#ff674125<span style="color: teal;"></</span><span style="color: #3f7f7f;">color</span><span style="color: teal;">></span></span><span lang="EN-US"><o:p></o:p></span></div>
</span><ul>
<li>Описать новое свойство для GradientTextView в attrs.xml:</li>
</ul>
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"><div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">attr</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span>=<i><span style="color: #2a00ff;">"colorShadowGradient"</span></i> <span style="color: #7f007f;">format</span>=<i><span style="color: #2a00ff;">"integer"</span></i> <span style="color: teal;">/></span><o:p></o:p></span></div>
</span><ul>
<li>Добавить свойство тени в main.xml</li>
</ul>
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"><div class="MsoNormal">
<span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">app:colorShadowGradient</span><span style="font-family: 'Courier New'; font-size: 10pt; line-height: 115%;">=</span><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">"@color/textview_shadow"</span></i></div>
</span><ul>
<li>Изменить класс GradientTextView для работы с тенью. Идея заключается в том, чтобы отрисовать элемент частями: сначала тень, затем сам элемент.</li>
</ul>
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"><pre class="brush: java">public class GradientTextView extends TextView {
private int colorStartGradient, colorEndGradient, colorShadow;
public GradientTextView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.GradientTextView);
colorShadow = a.getColor(R.styleable.GradientTextView_colorShadowGradient, -2);
colorStartGradient = a.getColor(R.styleable.GradientTextView_colorStartGradient, -2);
colorEndGradient = a.getColor(R.styleable.GradientTextView_colorEndGradient, -2);
}
@Override
protected void onDraw(Canvas canvas) {
if (colorShadow != -2)
{
getPaint().setShadowLayer(3, 3, 5, colorShadow);
getPaint().setShader(null);
super.onDraw(canvas);
}
if (colorStartGradient != -2 && colorEndGradient != -2)
{
getPaint().clearShadowLayer();
getPaint().setShader(
new LinearGradient(0, 0, 0, getHeight(), colorStartGradient,
colorEndGradient, TileMode.MIRROR));
}
super.onDraw(canvas);
}
}</pre>
</span></div>
<h4>
<b style="mso-bidi-font-weight: normal;">Ссылки</b></h4>
<ul>
<li><span style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; line-height: 115%; mso-ansi-language: RU; mso-bidi-font-family: "Times New Roman"; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US;">Исходные
коды данного проекта можно скачать отсюда: </span><span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: "Times New Roman"; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US;"><a href="http://snowpard.org/examples/article_b15/GradientTextView.zip">zip</a></span></li>
</ul>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com4tag:blogger.com,1999:blog-8853310020905277854.post-7431676258337805282013-02-21T22:16:00.000+04:002013-02-21T22:16:06.499+04:00Кастомизация интерфейса: Toast (Часть 2)<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-EcuwCF_r5h0/UH2p2hJqBoI/AAAAAAAAAXo/fk2239rJthQ/s1600/icon.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a></div>
<div>
<a href="http://4.bp.blogspot.com/-EcuwCF_r5h0/UH2p2hJqBoI/AAAAAAAAAXo/fk2239rJthQ/s1600/icon.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="Кастомизация интерфейса: Toast (Часть 2)" border="0" src="http://4.bp.blogspot.com/-EcuwCF_r5h0/UH2p2hJqBoI/AAAAAAAAAXo/fk2239rJthQ/s1600/icon.png" title="Кастомизация интерфейса: Toast (Часть 2)" /></a></div>
<div class="MsoNormal">
В прошлой статье я рассказывал о том, как изменить интерфейс <span lang="EN-US" style="mso-ansi-language: EN-US;">Toast</span> и регулировать
время отображения его на экране. Сегодня я расскажу, как закрывать <span lang="EN-US" style="mso-ansi-language: EN-US;">Toast</span> по нажатию.<br />
<br />
<br />
<br />
<a name='more'></a></div>
<h4>
<b style="mso-bidi-font-weight: normal;">Практика</b></h4>
<div class="MsoNormal">
К сожалению, отследить клик у самого элемента <span lang="EN-US" style="mso-ansi-language: EN-US;">Toast</span> никак не получится, так
как он не активен для пользовательского взаимодействия. Мы прибегнем к
хитрости, и вместо <span lang="EN-US" style="mso-ansi-language: EN-US;">Toast</span><span lang="EN-US"> </span>будем использовать <span lang="EN-US" style="mso-ansi-language: EN-US;">PopupWindow</span>. Это всплывающее окно можно кастомизировать так же
как <span lang="EN-US" style="mso-ansi-language: EN-US;">Toast</span>, но в отличие
от него, <span lang="EN-US" style="mso-ansi-language: EN-US;">PopupWindow</span>
может отлавливать пользовательские нажатия.</div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">PopupWindow</span><span style="mso-spacerun: yes;"> </span>имеет несколько вариантов отображения:</div>
<ul>
<li><div class="MsoNormal">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">showAtLocation(View
parent, </span><b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">int</span></b><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"> gravity, </span><b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">int</span></b><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"> x, </span><b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">int</span></b><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"> y)</span>: отображается в указанных координатах.</div>
</li>
<li><div class="MsoNormal">
<span style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">showAsDropDown(View anchor)</span>:
отображается как выпадающий список в левом нижнем углу заданного View.</div>
</li>
<li><div class="MsoNormal">
<span style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">showAsDropDown(View anchor, </span><b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">int</span></b><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"> </span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">xoff</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">, </span><b><span lang="EN-US" style="color: #7f0055; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">int</span></b><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"> </span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">yoff</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">)</span>: отображается как выпадающий список в левом
нижнем углу заданного View со смещением в велечину указанных координат.</div>
</li>
</ul>
<div class="MsoNormal">
В качестве рабочего проекта будем использовать проект,
созданный в предыдущей <a href="http://snowpard-android-ru.blogspot.ru/2013/02/toast-1.html">статье</a>.</div>
<div class="MsoNormal">
Изменим класс CustomToast для работы с <span lang="EN-US" style="mso-ansi-language: EN-US;">PopupMenu</span>.</div>
<div class="MsoNormal">
Добавим статический атрибут, который указывает: отображается
или нет <span lang="EN-US" style="mso-ansi-language: EN-US;">PopupWindow</span>.</div>
<pre class="brush: java">private static boolean isShow = false;</pre>
<div class="MsoNormal">
Также добавим <span lang="EN-US" style="mso-ansi-language: EN-US;">Listener</span><span lang="EN-US"> </span>при срабатывании которого
происходит закрытие <span lang="EN-US" style="mso-ansi-language: EN-US;">PopupWIndow</span>.</div>
<pre class="brush: java">private static OnClickListener listner = new OnClickListener() {
@Override
public void onClick(View v) {
isShow = false;
}
};</pre>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal">
Изменим методы makeToast. Для PopupWindow необходим View,
относительного которого он будет отображаться. </div>
<pre class="brush: java">public static void makeToast(Context context, View contentView, String msg, long duration) {
if (isShow)
return;
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.layout_toast, null);
view.setOnClickListener(listner);
((TextView) view.findViewById(R.id.text)).setText(msg);
showToast(context, contentView, view, duration);
}
public static void makeToast(Context context, View contentView, int msg, long duration) {
if (isShow)
return;
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.layout_toast, null);
((TextView) view.findViewById(R.id.text)).setText(msg);
view.setOnClickListener(listner);
showToast(context, contentView, view, duration);
}</pre>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal">
Полностью изменим метод showToast, который будет создавать
наш PopupWindow. Чтобы наше всплывающее окно растягивалась по ширине на всю
область окна, а по высоте подстраивалось под <span lang="EN-US" style="mso-ansi-language: EN-US;">TextView</span>, используем константы<span style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"> </span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">ViewGroup</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">.</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">LayoutParams</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">.</span><i><span lang="EN-US" style="color: #0000c0; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">MATCH</span></i><i><span style="color: #0000c0; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">_</span></i><i><span lang="EN-US" style="color: #0000c0; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">PARENT</span></i><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"> </span>и <span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">ViewGroup</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">.</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">LayoutParams</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">.</span><i><span lang="EN-US" style="color: #0000c0; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">WRAP</span></i><i><span style="color: #0000c0; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">_</span></i><i><span lang="EN-US" style="color: #0000c0; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">CONTENT</span></i>.</div>
<pre class="brush: java">private static void showToast(Context context, View contentView, View view, long duration) {
PopupWindow window = new PopupWindow(view, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, false);
show(context, contentView, duration * 1000, window);
}</pre>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
Изменем метод для
отображения PopupWindow. Чтобы отобразить всплывающее окно в нижней части
экрана используется константа<span style="font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"> </span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">Gravity</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">.</span><i><span lang="EN-US" style="color: #0000c0; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">BOTTOM</span></i>.</div>
<pre class="brush: java">private static void show(Context context, final View contentView, final long durationInMilliseconds,
final PopupWindow window) {
window.showAtLocation(contentView, Gravity.BOTTOM, 0, 0);
Thread t = new Thread() {
long timeElapsed = 0l;
public void run() {
try {
isShow = true;
while (timeElapsed <= durationInMilliseconds && isShow) {
long start = System.currentTimeMillis();
sleep(250);
timeElapsed += System.currentTimeMillis() - start;
}
isShow = false;
window.dismiss();
} catch (InterruptedException e) {
}
}
};
t.start();
}</pre>
<div class="MsoNormal">
Теперь немного изменим макет для основного окна. Добавим
идентификатор для главного <span lang="EN-US" style="mso-ansi-language: EN-US;">Layout</span>
окна, чтобы <span lang="EN-US" style="mso-ansi-language: EN-US;">PopupWindow</span>
отображался относительного него.</div>
<div class="MsoNormal">
Исходный код (main.xml)</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"><</span><span style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">LinearLayout</span><span style="font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/toast_layout_root"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android:layout_width</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">=</span><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">"fill_parent"</span></i></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:background</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/toast"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:orientation</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"horizontal"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:padding</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"8dp"</span></i> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">TextView</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/text"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_marginBottom</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"5dp"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:gravity</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"center"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:padding</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"8dp"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:textColor</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"#FFF"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">android:textSize</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">=</span><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">"14sp"</span></i><span style="font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal">
<span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">LinearLayout</span><span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span> </div>
<div class="MsoNormal">
Исходный код основного <span lang="EN-US" style="mso-ansi-language: EN-US;">Activity</span> с изменениями.</div>
<pre class="brush: java">private EditText ed_txt, ed_time;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ed_time = (EditText)findViewById(R.id.ed_time);
ed_txt = (EditText)findViewById(R.id.ed_txt);
final Context context = this;
final View contentView = findViewById(R.id.main);
findViewById(R.id.btn_show).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int duration = 1;
try
{
duration = Integer.parseInt(ed_time.getText().toString());
} catch (Exception e) {
}
CustomToast.makeToast(context, contentView, ed_txt.getText().toString(), duration);
}
});
}</pre>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;">Ссылки</b></div>
<div class="MsoNormal">
<ul>
<li>Исходные коды данного проекта можно скачать отсюда: <span lang="EN-US" style="mso-ansi-language: EN-US;"><a href="http://snowpard.org/examples/article_b14/part2/CustomToast2.zip">zip</a></span></li>
</ul>
</div>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-28539407752616946652013-02-20T15:57:00.000+04:002013-02-20T15:57:20.993+04:00Кастомизация интерфейса: Toast (Часть 1)<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-EcuwCF_r5h0/UH2p2hJqBoI/AAAAAAAAAXo/fk2239rJthQ/s1600/icon.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="Кастомизация интерфейса: Toast (Часть 1)" border="0" src="http://4.bp.blogspot.com/-EcuwCF_r5h0/UH2p2hJqBoI/AAAAAAAAAXo/fk2239rJthQ/s1600/icon.png" title="Кастомизация интерфейса: Toast (Часть 1)" /></a></div>
Сегодня мы поговорим о всплывающих подсказках – <span lang="EN-US">Toast</span>. Важным ограничением
этого элемента является его время отображения, которое никак не регулируется. В
этой статье я покажу как можно выводить <span lang="EN-US">Toast</span><span lang="EN-US"> </span>с заданным временем.<br />
<a name='more'></a><br />
<br />
<h4>
<b>Практика</b></h4>
<div class="MsoNormal">
Эта статья будет решать два вопрос:</div>
<div class="MsoNormal">
<br />
<ul>
<li>кастомизация;</li>
<li>регулирование времени отображения.</li>
</ul>
</div>
<div class="MsoNormal">
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-sne4TxZT7lk/USS5noR1FqI/AAAAAAAAAiw/rVns5NbzFM8/s1600/device-2013-02-20-081458.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Кастомизация интерфейса: Toast (Часть 1)" border="0" height="320" src="http://2.bp.blogspot.com/-sne4TxZT7lk/USS5noR1FqI/AAAAAAAAAiw/rVns5NbzFM8/s320/device-2013-02-20-081458.png" title="Кастомизация интерфейса: Toast (Часть 1)" width="192" /></a></div>
<br />
Нам потребуются следующие строковые ресурсы:</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><?</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">xml</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> </span><span lang="EN-US" style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">version</span><span style="font-family: Consolas; font-size: 10pt;">=</span><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">"1.0"</span></i><span style="font-family: Consolas; font-size: 10.0pt; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> </span><span lang="EN-US" style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">encoding</span><span style="font-family: Consolas; font-size: 10pt;">=</span><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">"</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">utf</span></i><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">-8"</span></i><span style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">?></span><span style="font-family: Consolas; font-size: 10.0pt; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">resources</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">></span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span>=<i><span style="color: #2a00ff;">"app_name"</span></i><span style="color: teal;">></span>CustomToast<span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span>=<i><span style="color: #2a00ff;">"placeholder_txt"</span></i><span style="color: teal;">></span></span><span style="font-family: Consolas; font-size: 10pt;">Введите</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="font-family: Consolas; font-size: 10pt;">текст</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="font-family: Consolas; font-size: 10pt;">сообщения</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">string</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">></span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span>=<i><span style="color: #2a00ff;">"placeholder_time"</span></i><span style="color: teal;">></span></span><span style="font-family: Consolas; font-size: 10pt;">Введите</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="font-family: Consolas; font-size: 10pt;">время</span><span style="font-family: Consolas; font-size: 10pt;"> </span><span style="font-family: Consolas; font-size: 10pt;">отображения</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">string</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">></span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span>=<i><span style="color: #2a00ff;">"btn_show"</span></i><span style="color: teal;">></span></span><span style="font-family: Consolas; font-size: 10pt;">Показать</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">string</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">></span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">resources</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">></span><b><span lang="EN-US"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Чтобы изменить интерфейс Toast, разработаем новый макет,
используя в качестве фона следующее изображение:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-nVD1E3cUDeQ/USS5wBrRaMI/AAAAAAAAAi4/SUF37jVsMjg/s1600/toast.9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-nVD1E3cUDeQ/USS5wBrRaMI/AAAAAAAAAi4/SUF37jVsMjg/s1600/toast.9.png" /></a></div>
<br /></div>
<div class="MsoNormal">
Наш <span lang="EN-US">Toast</span><span lang="EN-US"> </span>будет выглядеть как стандартный, но вы можете оперировать
интерфейсом как пожелаете.<br />
<br /></div>
<div class="MsoNormal">
Исходный код (layout_toast.xml)</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span>=<i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:id</span>=<i><span style="color: #2a00ff;">"@+id/toast_layout_root"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_width</span>=<i><span style="color: #2a00ff;">"fill_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_height</span>=<i><span style="color: #2a00ff;">"fill_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:background</span>=<i><span style="color: #2a00ff;">"@drawable/toast"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:orientation</span>=<i><span style="color: #2a00ff;">"horizontal"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:padding</span>=<i><span style="color: #2a00ff;">"8dp"</span></i>
<span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">TextView</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:id</span>=<i><span style="color: #2a00ff;">"@+id/text"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_width</span>=<i><span style="color: #2a00ff;">"fill_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_height</span>=<i><span style="color: #2a00ff;">"fill_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_marginBottom</span>=<i><span style="color: #2a00ff;">"5dp"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:gravity</span>=<i><span style="color: #2a00ff;">"center"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:padding</span>=<i><span style="color: #2a00ff;">"8dp"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:textColor</span>=<i><span style="color: #2a00ff;">"#FFF"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:textSize</span>=<i><span style="color: #2a00ff;">"14sp"</span></i>
<span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">></span><b><span lang="EN-US"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<br />
Разработаем новый класс, который будет регулировать время
отображения Toast: CustomToast.<span lang="EN-US"><o:p></o:p></span></div>
<pre class="brush: java">private static void show(final long durationInMilliseconds,
final Toast toast) {
Thread t = new Thread() {
long timeElapsed = 0l;
public void run() {
try {
while (timeElapsed <= durationInMilliseconds) {
long start = System.currentTimeMillis();
toast.show();
sleep(250);
timeElapsed += System.currentTimeMillis() - start;
}
} catch (InterruptedException e) {
}
}
};
t.start();
}</pre>
<div class="MsoNormal">
<br />
Также нам потребуется статический метод, который будет
создавать Toast с нужным макетом.</div>
<pre class="brush: java">private static void showToast(Context context, View view, long duration) {
Toast toast = new Toast(context);
toast.setView(view);
toast.setDuration(Toast.LENGTH_SHORT);
show(duration * 1000, toast);
}</pre>
<div class="MsoNormal">
<br />
Завершающей частью разработки нового класса являются методы,
которые будут создавать и отображать кастомизированный Toast с заданным текстом
и временем.</div>
<div class="MsoNormal">
В качестве параметров указывается:</div>
<div class="MsoNormal">
<br />
<ul>
<li>сообщение (может быть как строка (<span lang="EN-US">String</span>), либо идентификатор строкого
ресурса (<span lang="EN-US">int</span>));</li>
<li>время отображения <span lang="EN-US">Toast</span><span lang="EN-US"> </span>(в секундах).</li>
</ul>
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<pre class="brush: java">public static void makeToast(Context context, String msg, long duration) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.layout_toast, null);
((TextView) view.findViewById(R.id.text)).setText(msg);
showToast(context, view, duration);
}
public static void makeToast(Context context, int msg, long duration) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.layout_toast, null);
((TextView) view.findViewById(R.id.text)).setText(msg);
showToast(context, view, duration);
}</pre>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Теперь разработаем макет для основного окна, чтобы
протестировать созданый класс. Интерфейс окна будет состоять из двух полей для
ввода (ввод выводимого сообщения и времени отображения) и кнопки для
отображения <span lang="EN-US">Toast</span>.</div>
<div class="MsoNormal">
Исходный код (main.xml)</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span>=<i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_width</span>=<i><span style="color: #2a00ff;">"match_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_height</span>=<i><span style="color: #2a00ff;">"match_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:orientation</span>=<i><span style="color: #2a00ff;">"vertical"</span></i>
<span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">EditText</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:id</span>=<i><span style="color: #2a00ff;">"@+id/ed_txt"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_width</span>=<i><span style="color: #2a00ff;">"match_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_height</span>=<i><span style="color: #2a00ff;">"wrap_content"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:hint</span>=<i><span style="color: #2a00ff;">"@string/placeholder_txt"</span></i>
<span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">EditText</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:id</span>=<i><span style="color: #2a00ff;">"@+id/ed_time"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_width</span>=<i><span style="color: #2a00ff;">"match_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_height</span>=<i><span style="color: #2a00ff;">"wrap_content"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:hint</span>=<i><span style="color: #2a00ff;">"@string/placeholder_time"</span></i>
<span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">Button</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:id</span>=<i><span style="color: #2a00ff;">"@+id/btn_show"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_width</span>=<i><span style="color: #2a00ff;">"match_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_height</span>=<i><span style="color: #2a00ff;">"wrap_content"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:hint</span>=<i><span style="color: #2a00ff;">"@string/btn_show"</span></i>
<span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">LinearLayout</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">></span><b><span lang="EN-US"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<br />
Исходный код основного Activity</div>
<pre class="brush: java">private EditText ed_txt, ed_time;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ed_time = (EditText)findViewById(R.id.ed_time);
ed_txt = (EditText)findViewById(R.id.ed_txt);
final Context context = this;
findViewById(R.id.btn_show).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int duration = 1;
try
{
duration = Integer.parseInt(ed_time.getText().toString());
} catch (Exception e) {
}
CustomToast.makeToast(context, ed_txt.getText().toString(), duration);
}
});
}</pre>
<div class="MsoNormal">
<br /></div>
<h4>
<b>Ссылки</b></h4>
<div class="MsoNormal">
</div>
<ul>
<li>Исходные коды данного проекта можно скачать отсюда: <span lang="EN-US"><a href="http://snowpard.org/examples/article_b14/part1/CustomToast1.zip">zip</a></span></li>
</ul>
<br />Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-54451451736609633822013-02-13T15:37:00.001+04:002013-02-13T15:37:48.753+04:00Кастомизация интерфейса: Progress Bar<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-m8H9sTR1Bhw/UHXCg_6y0tI/AAAAAAAAAU4/4l0Rgm7a-H0/s1600/icon.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="Кастомизация интерфейса: Progress Bar" border="0" src="http://4.bp.blogspot.com/-m8H9sTR1Bhw/UHXCg_6y0tI/AAAAAAAAAU4/4l0Rgm7a-H0/s1600/icon.png" title="Кастомизация интерфейса: Progress Bar" /></a></div>
<div class="MsoNormal">
Сегодня мы будем кастомизировать элемент «<span lang="EN-US">Spinning</span><span lang="EN-US"> </span><span lang="EN-US">Wheel</span>», или «барашек». В этой
статье будут раскрыты 3 способа изменения этого элемента.</div>
<div class="MsoNormal">
<b></b></div>
<a name='more'></a><br />
<div class="MsoNormal">
<b><br /></b></div>
<h4>
<b>Практика</b></h4>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
Для одного из способов
кастомизации потребуются ресурсы. Создайте <span lang="EN-US">xml</span><span lang="EN-US"> </span>файл для цвета. Эти ресурсы будут
задавать градиент для нашего «барашка».</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
Исходный код (<span lang="EN-US">colors</span>.<span lang="EN-US">xml</span>)</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">resources</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">></span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">color</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span>=<i><span style="color: #2a00ff;">"color_preloader_start"</span></i><span style="color: teal;">></span>#000000<span style="color: teal;"></</span><span style="color: #3f7f7f;">color</span><span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">color</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span>=<i><span style="color: #2a00ff;">"color_preloader_center"</span></i><span style="color: teal;">></span>#000000<span style="color: teal;"></</span><span style="color: #3f7f7f;">color</span><span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">color</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span>=<i><span style="color: #2a00ff;">"color_preloader_end"</span></i><span style="color: teal;">></span>#ff56a9c7<span style="color: teal;"></</span><span style="color: #3f7f7f;">color</span><span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">resources</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">></span><span lang="EN-US"><o:p></o:p></span></div>
<div class="MsoNormal">
</div>
<ul>
<li><b>Первый способ<span lang="EN-US">. </span>С помощью <span lang="EN-US">Shape</span></b></li>
</ul>
<br />
<div class="MsoNormal">
Создание форм для вращения ограничивается только вашей
фантазией. В этой статье будут расмотрены только две формы: овал и кольцо</div>
<div class="MsoNormal">
1. Овальный «барашек»:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-Zy21JV8b3LY/URt5udAoSnI/AAAAAAAAAgU/-7QhHjAyxOs/s1600/screen_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Кастомизация интерфейса: Progress Bar" border="0" height="320" src="http://1.bp.blogspot.com/-Zy21JV8b3LY/URt5udAoSnI/AAAAAAAAAgU/-7QhHjAyxOs/s320/screen_2.png" title="Кастомизация интерфейса: Progress Bar" width="192" /></a></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
Исходный код (<span lang="EN-US">loader</span>_0_1.<span lang="EN-US">xml</span>)</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">rotate</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span>=<i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:fromDegrees</span>=<i><span style="color: #2a00ff;">"0"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:pivotX</span>=<i><span style="color: #2a00ff;">"50%"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:pivotY</span>=<i><span style="color: #2a00ff;">"50%"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:toDegrees</span>=<i><span style="color: #2a00ff;">"360"</span></i> <span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">shape</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:shape</span>=<i><span style="color: #2a00ff;">"oval"</span></i> <span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">gradient</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:centerColor</span>=<i><span style="color: #2a00ff;">"@color/color_preloader_center"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:centerY</span>=<i><span style="color: #2a00ff;">"0.50"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:endColor</span>=<i><span style="color: #2a00ff;">"@color/color_preloader_end"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:startColor</span>=<i><span style="color: #2a00ff;">"@color/color_preloader_start"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:type</span>=<i><span style="color: #2a00ff;">"sweep"</span></i> <span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">shape</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">rotate</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span><b><span lang="EN-US"><o:p></o:p></span></b></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">rotate</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"> </span>позволяет
нашей форме вращаться от 0 до 360 градусов с точкой вращения в центре фигуры.
Наша фигура заливается развернутым градиентом (<span lang="EN-US">sweep</span><span lang="EN-US"> </span><span lang="EN-US">gradient</span>). Градиент задается
тремя цветами и начинает заливаться в центре фигуры.</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
2. «Барашек» в виде
кольца:</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-aB8PSTOb8O0/URt51VmoO9I/AAAAAAAAAgc/W9w2L4L9u-c/s1600/screen_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Кастомизация интерфейса: Progress Bar" border="0" height="320" src="http://3.bp.blogspot.com/-aB8PSTOb8O0/URt51VmoO9I/AAAAAAAAAgc/W9w2L4L9u-c/s320/screen_1.png" title="Кастомизация интерфейса: Progress Bar" width="192" /></a></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
Исходный код<span lang="EN-US"> (loader_0.xml)<o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">rotate</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span>=<i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:fromDegrees</span>=<i><span style="color: #2a00ff;">"0"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:pivotX</span>=<i><span style="color: #2a00ff;">"50%"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:pivotY</span>=<i><span style="color: #2a00ff;">"50%"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:toDegrees</span>=<i><span style="color: #2a00ff;">"360"</span></i> <span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">shape</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:innerRadiusRatio</span>=<i><span style="color: #2a00ff;">"3"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:shape</span>=<i><span style="color: #2a00ff;">"ring"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:thicknessRatio</span>=<i><span style="color: #2a00ff;">"8"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:useLevel</span>=<i><span style="color: #2a00ff;">"false"</span></i> <span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">gradient</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:centerColor</span>=<i><span style="color: #2a00ff;">"@color/color_preloader_center"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:centerY</span>=<i><span style="color: #2a00ff;">"0.50"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:endColor</span>=<i><span style="color: #2a00ff;">"@color/color_preloader_end"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:startColor</span>=<i><span style="color: #2a00ff;">"@color/color_preloader_start"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:type</span>=<i><span style="color: #2a00ff;">"sweep"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:useLevel</span>=<i><span style="color: #2a00ff;">"false"</span></i> <span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"> </span><span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">shape</span><span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">></span><span style="font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">rotate</span><span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
Для кольца необходимо
задать следующие параметры:</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android</span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">:</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">innerRadiusRatio</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"> </span>– внутренний радиус кольца<span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android</span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">:</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">thicknessRatio</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"> </span>– толщина кольца</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android</span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">:</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">useLevel</span><span style="font-family: 'Courier New'; font-size: 10pt;">=</span><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">"</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">false</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">" </span></i>–
исключить влияние изображения на отрисовку градиента.</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
</div>
<ul>
<li><b>Второй способ: Вращение
изображения</b></li>
</ul>
<br />
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
Данный способ использует
подготовленное заранее изображение для его вращения.</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-kOp-R6cP9Ig/URt6F2G1MnI/AAAAAAAAAgk/3hz06FdllPU/s1600/screen_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Кастомизация интерфейса: Progress Bar" border="0" height="320" src="http://1.bp.blogspot.com/-kOp-R6cP9Ig/URt6F2G1MnI/AAAAAAAAAgk/3hz06FdllPU/s320/screen_3.png" title="Кастомизация интерфейса: Progress Bar" width="192" /></a></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="text-align: justify;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="text-align: justify;">Пример изображений (<a href="http://www.snowpard.org/examples/article_b13/images.zip">скачать</a></span><span style="text-align: justify;">):</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-jfcxxHxhEDs/URt6PtDWGyI/AAAAAAAAAgs/qBInA5jZOS4/s1600/preloader_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-jfcxxHxhEDs/URt6PtDWGyI/AAAAAAAAAgs/qBInA5jZOS4/s1600/preloader_3.png" /></a><a href="http://3.bp.blogspot.com/-7laywMIOR8w/URt6PhNFhCI/AAAAAAAAAgw/nS3NtmT8_8s/s1600/preloader_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-7laywMIOR8w/URt6PhNFhCI/AAAAAAAAAgw/nS3NtmT8_8s/s1600/preloader_2.png" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-F8xh21tqhmI/URt6PstE2NI/AAAAAAAAAg0/Uepnj8PC-4E/s1600/preloader_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-F8xh21tqhmI/URt6PstE2NI/AAAAAAAAAg0/Uepnj8PC-4E/s1600/preloader_1.png" /></a><a href="http://4.bp.blogspot.com/-OzXYBZtHvsA/URt6P3iBYRI/AAAAAAAAAg4/uqZN-WKPdTI/s1600/preloader_4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-OzXYBZtHvsA/URt6P3iBYRI/AAAAAAAAAg4/uqZN-WKPdTI/s1600/preloader_4.png" /></a></div>
<br />
Исходный код (<span lang="EN-US">loader</span>_1.<span lang="EN-US">xml</span>)<br />
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">animated-rotate</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span>=<i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:drawable</span>=<i><span style="color: #2a00ff;">"@drawable/preloader"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:pivotX</span>=<i><span style="color: #2a00ff;">"50%"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> </span><span style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">android:pivotY</span><span style="font-family: Consolas; font-size: 10pt;">=</span><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">"50%"</span></i><span style="font-family: Consolas; font-size: 10.0pt; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: teal;">/></span></span> </div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
</div>
<ul>
<li><b>Третий способ:
Покадровая анимация</b></li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-ra8_qKwMGcs/URt6f3aahDI/AAAAAAAAAhM/BgEHByM9Rro/s1600/screen_4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Кастомизация интерфейса: Progress Bar" border="0" height="320" src="http://2.bp.blogspot.com/-ra8_qKwMGcs/URt6f3aahDI/AAAAAAAAAhM/BgEHByM9Rro/s320/screen_4.png" title="Кастомизация интерфейса: Progress Bar" width="192" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="text-align: justify;">Пример изображений (<a href="http://www.snowpard.org/examples/article_b13/images.zip">скачать</a></span><span style="text-align: justify;">):</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-dTm1JelYiKc/URt6nYUaqUI/AAAAAAAAAhU/ktnjbBNomFU/s1600/progress_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-dTm1JelYiKc/URt6nYUaqUI/AAAAAAAAAhU/ktnjbBNomFU/s1600/progress_2.png" /></a><a href="http://1.bp.blogspot.com/-1mxC9JSBm4A/URt6nQVfHOI/AAAAAAAAAhY/WS7XdVs1YI4/s1600/progress_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-1mxC9JSBm4A/URt6nQVfHOI/AAAAAAAAAhY/WS7XdVs1YI4/s1600/progress_3.png" /></a><a href="http://2.bp.blogspot.com/-PnnE8om8CTE/URt6nZz_nNI/AAAAAAAAAhc/RtPjWTPahPI/s1600/progress_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-PnnE8om8CTE/URt6nZz_nNI/AAAAAAAAAhc/RtPjWTPahPI/s1600/progress_1.png" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-rOMwsDmkjZg/URt6ntBBmvI/AAAAAAAAAhg/pipImLdXtBk/s1600/progress_4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-rOMwsDmkjZg/URt6ntBBmvI/AAAAAAAAAhg/pipImLdXtBk/s1600/progress_4.png" /></a><a href="http://1.bp.blogspot.com/-1tWb42rOIDM/URt6nwyT7nI/AAAAAAAAAho/F6FVMd1vnes/s1600/progress_5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-1tWb42rOIDM/URt6nwyT7nI/AAAAAAAAAho/F6FVMd1vnes/s1600/progress_5.png" /></a></div>
В том случае, когда наш
«барашек» невозможно анимировать с помощью вращения, можно использовать
покадровую анимацию.<br />
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<b>Замечание</b>: размер
элемента должен быть равен или больше используемых изображений.</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
Исходный код (<span lang="EN-US">loader</span>_2.<span lang="EN-US">xml</span>)</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">animation-list</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span>=<i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i>
<span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">item</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:drawable</span>=<i><span style="color: #2a00ff;">"@drawable/progress_1"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:duration</span>=<i><span style="color: #2a00ff;">"200"</span></i><span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">item</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:drawable</span>=<i><span style="color: #2a00ff;">"@drawable/progress_2"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:duration</span>=<i><span style="color: #2a00ff;">"200"</span></i><span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">item</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:drawable</span>=<i><span style="color: #2a00ff;">"@drawable/progress_3"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:duration</span>=<i><span style="color: #2a00ff;">"200"</span></i><span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">item</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:drawable</span>=<i><span style="color: #2a00ff;">"@drawable/progress_4"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:duration</span>=<i><span style="color: #2a00ff;">"200"</span></i><span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">item</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:drawable</span>=<i><span style="color: #2a00ff;">"@drawable/progress_5"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:duration</span>=<i><span style="color: #2a00ff;">"200"</span></i><span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">animation-list</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">></span><b><span lang="EN-US"><o:p></o:p></span></b></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">android:duration</span><span lang="EN-US" style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> </span>– время отображения
текущего кадра.<span style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
Теперь разместим все
наши элементы на экране. Чтобы кастомизировать <span lang="EN-US">ProgressBar</span>, необходимо использовать атрибут <span lang="EN-US" style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">android</span><span style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">:</span><span lang="EN-US" style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">indeterminateDrawable</span><span style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">.</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
Исходный код (<span lang="EN-US">main</span>.<span lang="EN-US">xml</span>)</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span>=<i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_width</span>=<i><span style="color: #2a00ff;">"match_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_height</span>=<i><span style="color: #2a00ff;">"match_parent"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:orientation</span>=<i><span style="color: #2a00ff;">"vertical"</span></i>
<span style="color: teal;">></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">ProgressBar</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_width</span>=<i><span style="color: #2a00ff;">"100dp"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_height</span>=<i><span style="color: #2a00ff;">"100dp"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:indeterminateDrawable</span>=<i><span style="color: #2a00ff;">"@drawable/loader_0"</span></i>
<span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">ProgressBar</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_width</span>=<i><span style="color: #2a00ff;">"100dp"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_height</span>=<i><span style="color: #2a00ff;">"100dp"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:indeterminateDrawable</span>=<i><span style="color: #2a00ff;">"@drawable/loader_0_1"</span></i>
<span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">ProgressBar</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_width</span>=<i><span style="color: #2a00ff;">"100dp"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_height</span>=<i><span style="color: #2a00ff;">"100dp"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:indeterminateDrawable</span>=<i><span style="color: #2a00ff;">"@drawable/loader_1"</span></i>
<span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10pt;"> </span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">ProgressBar</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_width</span>=<i><span style="color: #2a00ff;">"119dp"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:layout_height</span>=<i><span style="color: #2a00ff;">"119dp"</span></i><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:indeterminateDrawable</span>=<i><span style="color: #2a00ff;">"@drawable/loader_2"</span></i>
<span style="color: teal;">/></span><o:p></o:p></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-bidi-font-family: Consolas; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">LinearLayout</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-bidi-font-family: Consolas; mso-fareast-language: RU;">></span><b><o:p></o:p></b></div>
<div class="MsoNormal">
<br /></div>
<h4>
<b>Ссылки по теме</b></h4>
<div class="MsoNormal">
</div>
<ul>
<li>Исходные коды данного проекта можно скачать отсюда: <span lang="EN-US"><a href="http://www.snowpard.org/examples/article_b13/CustomProgressDialog.zip">zip</a></span></li>
</ul>
<br />
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-49577096784160309412013-01-21T22:38:00.000+04:002013-01-21T22:38:20.705+04:00Планирование дел: Летающие ячейки<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-fdMl9aHtjNw/UPbYawiYhUI/AAAAAAAAAbE/vpL7KLM0HaA/s1600/icon.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="Планирование дел: Летающие ячейки" border="0" src="http://2.bp.blogspot.com/-fdMl9aHtjNw/UPbYawiYhUI/AAAAAAAAAbE/vpL7KLM0HaA/s1600/icon.png" title="Планирование дел: Летающие ячейки" /></a></div>
Последняя статья из цикла по кастомизации <span lang="EN-US" style="mso-ansi-language: EN-US;">ListView</span>. На этот раз анимируем
изменение состояния выбранного элемента. В этой статье мы будем разрабатывать
летающие ячейки. <br />
<br />
<a name='more'></a><b style="mso-bidi-font-weight: normal;"><br /></b>
<h3>
<b style="mso-bidi-font-weight: normal;">Практика</b></h3>
<div class="MsoNormal">
Заметка: Для того чтобы комментарии в скаченном проекте были
читаемы (русский язык), необходимо поменять кодировку проекта на <span lang="EN-US" style="mso-ansi-language: EN-US;">UTF</span>-8 (<span lang="EN-US" style="mso-ansi-language: EN-US;">Project</span> –> <span lang="EN-US" style="mso-ansi-language: EN-US;">Properties</span> –> <span lang="EN-US" style="mso-ansi-language: EN-US;">Resource</span> –> <span lang="EN-US" style="mso-ansi-language: EN-US;">Text</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">file</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">incoding</span>).</div>
<div class="MsoNormal">
Для анимации летающих ячеек необходимо изменить макет <span lang="EN-US" style="mso-ansi-language: EN-US;">main</span>.<span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span>, в котором находиться наш <span lang="EN-US" style="mso-ansi-language: EN-US;">ListView</span>. Добавим в него <span lang="EN-US" style="mso-ansi-language: EN-US;">ImageVIew</span>, который будет
выступать в качестве летающей ячейки. Мы будем использовать данную идею по той
причине, что анимировать <span lang="EN-US" style="mso-ansi-language: EN-US;">View</span>
самого элемента, как мы это делали в предыдущей статье, у нас не получится.
Потому что каждая ячейка списка распологается друг под другом, и при
перемещении верхних ячеек вниз, их будут перекрывать нижнии ячейки. </div>
<div class="MsoNormal">
Исходный код (<span lang="EN-US" style="mso-ansi-language: EN-US;">main.xml)</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">FrameLayout</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:background</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@android:color/white"</span></i> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">ListView</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/listview"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:cacheColorHint</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@android:color/transparent"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">ImageView</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/flyingCell"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">android:visibility</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">=</span><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">"gone"</span></i><span style="font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal">
<span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">FrameLayout</span><span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
Добавим необходимые атрибуты в <span lang="EN-US" style="mso-ansi-language: EN-US;">Activity</span>.</div>
<pre class="brush: java">// Сообщения для Handler'а
public static final int MSG_ANIMATION_FLY = 3;
// Хранит размеры экрана
private DisplayMetrics dm = new DisplayMetrics();
// Летающая ячейка
private ImageView flying_cell;</pre>
<div class="MsoNormal">
<br />
В<span style="mso-ansi-language: EN-US;"> </span>методе<span style="mso-ansi-language: EN-US;"> <span lang="EN-US">onCreate() </span></span>добавим<span style="mso-ansi-language: EN-US;"> </span>инициализацию<span style="mso-ansi-language: EN-US;"> <span lang="EN-US">ImageView </span></span>и<span style="mso-ansi-language: EN-US;"> <span lang="EN-US">DisplayMetrics.</span></span></div>
<pre class="brush: java">flying_cell = (ImageView)findViewById(R.id.flyingCell);
getWindowManager().getDefaultDisplay().getMetrics(dm);</pre>
<div class="MsoNormal">
<br />
Разработаем метод в нашем Activity, который будет выполнять
перемещение выделенного элемента от его текущего положения к заданному.</div>
<pre class="brush: java"> /**
* Запуск анимации летающей ячейки
*/
private void startFly(Bitmap cellBitmap, Point start, Point end, ToDoItem item)
{
flying_cell.setVisibility(View.VISIBLE);
flying_cell.setImageBitmap(cellBitmap);
TranslateAnimation translateAnimation = new TranslateAnimation(start.x, end.x, start.y, end.y);
translateAnimation.setStartOffset(100);
translateAnimation.setDuration(800);
translateAnimation.setInterpolator(AnimationUtils.loadInterpolator(this,
android.R.anim.accelerate_decelerate_interpolator));
/*
Здесь используется AnimationSet, чтобы можно было добавить еще какую-нибудь
анимацию (например, сначала увеличить ячейку, потом переместить и уменьшить до
нормального размера)
*/
AnimationSet spriteAnimation = new AnimationSet(true);
spriteAnimation.addAnimation(translateAnimation);
spriteAnimation.setAnimationListener(new FlyAnimationListenter());
flying_cell.startAnimation(spriteAnimation);
}</pre>
<div class="MsoNormal">
<br />
Нашей задачей также является отследить окончание анимации,
после чего выполнить обновление списка.</div>
<pre class="brush: java"> /**
* Listenter служит для обновления списка после того, как ячейка прилетела в нужную позицию
*/
public class FlyAnimationListenter implements Animation.AnimationListener
{
@Override
public void onAnimationEnd(Animation arg0)
{
getHandler().sendEmptyMessage(MSG_CHANGE_ITEM);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationStart(Animation animation) {
}
}</pre>
<div class="MsoNormal">
<br />
Так же добавим метод, который позволяет определить, запущена
ли анимация или нет. Это необходимо для того, чтобы одновременно можно было
выполнить только одну анимацию.</div>
<pre class="brush: java"> /**
* Запущена ли анимация или нет
*/
public boolean isAnimationStarted()
{
return flying_cell.isShown();
}</pre>
<div class="MsoNormal">
<br />
В <span lang="EN-US" style="mso-ansi-language: EN-US;">Handler</span><span lang="EN-US"> </span>добавляем дополнительный <span lang="EN-US" style="mso-ansi-language: EN-US;">case</span>. Идея летающих ячеек заключается в следующем алгоритме. При
выборе ячейки мы получаем ее изображение (<span lang="EN-US" style="mso-ansi-language: EN-US;">Bitmap</span>). Далее расчитываем начальное положение ячейки, как
верхняя координата списка + высота заголовка + общий размер всех ячеек, которые
предшествуют выбранной ячейке. Затем надо отсортировать список и расчитать по
той же формуле конечное положение. После откорректировать конечную точку с
учетом размера экрана и выполнить анимацию.</div>
<pre class="brush: java"> ...
case MSG_CHANGE_ITEM: // Завершение анимации с летающими ячейками
flying_cell.setVisibility(View.GONE);
adapter.notifyDataSetChanged();
setCountPurchaseProduct();
break;
...
case MSG_ANIMATION_FLY: // Старт анимации летающих ячеек
Bitmap cellBitmap = (Bitmap)msg.obj;
ToDoItem item = list.get(msg.arg1);
item.setCheck(!item.isCheck());
Point startPoint, endPoint;
/*
Нам необходимы следующие значения для поиска позиции:
height = Высота одной ячейка
header_height = Высота Header'a листа (так же это высота первой ячейки в листе)
listTop = Верхняя точка нашего списка - размер проскроллированной области
*/
int height = listview.getChildAt(1).getHeight();
int header_height = listview.getChildAt(0).getBottom();
int listTop = listview.getTop() - height * listview.getFirstVisiblePosition();
/*
Поиск начальной и конечной точки происходит по следующему алгоритму:
1. Находим начальную точку: верхняя точка листа + высота первой ячейки + общая высота всех ячеек, которые предшествуют выбранной ячейки
2. Сортируем список с учетом новой позиции выбранной ячейки
3. Находим конечную точку: верхняя точка листа + высота первой ячейки + общая высота всех ячеек, которые предшествуют выбранной ячейки
*/
startPoint = new Point(0, listTop + header_height + height * getPositionInList(item.getIndex()));
Utils.sorting(list, 0);
saveList();
endPoint = new Point(0, listTop + header_height + height * getPositionInList(item.getIndex()));
// Откорректируем конечную точку с учетом размеров экрана
if (endPoint.y > dm.heightPixels)
endPoint.y = dm.heightPixels;
else if (endPoint.y < -1*height)
endPoint.y = -1*height;
// Если ячейка меняет позицию, то запускаем анимацию
if (endPoint.y != startPoint.y)
startFly(cellBitmap, startPoint, endPoint, item);
else
handler.sendEmptyMessage(MSG_CHANGE_ITEM);
break;</pre>
<div class="MsoNormal">
<br />
Теперь необходимо изменить все методы, которые используются
для выбора элемента в соответствии с новыми изменениями:</div>
<ul>
<li class="MsoNormal">метод<span lang="EN-US" style="mso-ansi-language: EN-US;"> OnItemClickListener() </span>для<span lang="EN-US" style="mso-ansi-language: EN-US;"> Listview:</span></li>
</ul>
<pre class="brush: java">listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view, int position,
long id) {
// Если произошло нажатие по Header или Footer или анимация уже запущена, то ничего не делаем
if (position == 0 || position == list.size() + 1 || isAnimationStarted())
return;
Message msg = new Message();
msg.arg1 = position - 1;
// Если был обнаружен свайп, то удаляем айтем
if (swipeDetector.swipeDetected()){
if (swipeDetector.getAction() == SwipeDetector.Action.LR ||
swipeDetector.getAction() == SwipeDetector.Action.RL)
{
msg.what = MSG_ANIMATION_REMOVE;
msg.arg2 = swipeDetector.getAction() == SwipeDetector.Action.LR ? 1 : 0;
msg.obj = view;
}
}
// Иначе выбираем айтем
else
{
view.setDrawingCacheEnabled(true);
Bitmap cellBitmap = view.getDrawingCache().copy(Config.ARGB_8888, false);
view.setVisibility(View.INVISIBLE);
msg.obj = cellBitmap;
msg.what = MSG_ANIMATION_FLY;
}
handler.sendMessage(msg);
}
});</pre>
<br />
<ul>
<li class="MsoNormal">метод OnClickListener () для CheckBox в классе
CustomListAdapter:</li>
</ul>
<pre class="brush: java">final View tmp = v;
listitem_check.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (((MainActivity)context).isAnimationStarted())
return;
tmp.setDrawingCacheEnabled(true);
Bitmap cellBitmap = tmp.getDrawingCache().copy(Config.ARGB_8888, false);
tmp.setVisibility(View.INVISIBLE);
Message msg = new Message();
msg.obj = cellBitmap;
msg.arg1 = position;
msg.what = MainActivity.MSG_ANIMATION_FLY;
((MainActivity)context).getHandler().sendMessage(msg);
}
});</pre>
<div class="MsoNormal">
<br /></div>
<br />
<h3>
<b style="mso-bidi-font-weight: normal;">Ссылки</b></h3>
<br />
<ul>
<li class="MsoNormal">Исходные коды данного проекта: <span lang="EN-US" style="mso-ansi-language: EN-US;"><a href="http://www.snowpard.org/examples/article_b12/parts/p4/ru/CustomListViewP4.zip">zip</a></span></li>
<li>Планирование дел: <a href="http://snowpard-android-ru.blogspot.ru/2013/01/listview.html">Часть 1</a>, <a href="http://snowpard-android-ru.blogspot.ru/2013/01/blog-post_17.html">Часть 2</a>, <a href="http://snowpard-android-ru.blogspot.ru/2013/01/blog-post_20.html">Часть 3</a></li>
<li>Готовый проект: <span lang="EN-US"><a href="http://www.snowpard.org/examples/article_b12/CustomListView.apk">apk</a></span></li>
</ul>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-82593874798762718722013-01-20T00:17:00.000+04:002013-01-21T22:47:51.381+04:00Планирование дел: Свайп. Анимация удаления элементов<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-fdMl9aHtjNw/UPbYawiYhUI/AAAAAAAAAbE/vpL7KLM0HaA/s1600/icon.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="Планирование дел: Свайп. Анимация удаления элементов" border="0" src="http://2.bp.blogspot.com/-fdMl9aHtjNw/UPbYawiYhUI/AAAAAAAAAbE/vpL7KLM0HaA/s1600/icon.png" title="Планирование дел: Свайп. Анимация удаления элементов" /></a></div>
<div class="MsoNormal">
Продолжаем цикл статей по разработке приложения для
планирования дел. Сегодня мы улучшим юзабилити нашего листа за счет удобного и
анимированного удаления элементов.</div>
<div class="MsoNormal">
<br />
<br /></div>
<div class="MsoNormal">
</div>
<a name='more'></a><h3>
<b>Практика</b></h3>
<div class="MsoNormal">
Заметка: Для того чтобы комментарии в скаченном проекте были
читаемы (русский язык), необходимо поменять кодировку проекта на <span lang="EN-US">UTF</span>-8 (<span lang="EN-US">Project</span> –> <span lang="EN-US">Properties</span> –> <span lang="EN-US">Resource</span> –> <span lang="EN-US">Text</span><span lang="EN-US"> </span><span lang="EN-US">file</span><span lang="EN-US"> </span><span lang="EN-US">incoding</span>).<span lang="EN-US"><o:p></o:p></span></div>
<div class="MsoNormal">
В сегодняшней статье мы решим две проблемы:<o:p></o:p></div>
<div class="MsoNormal">
</div>
<ul>
<li>обнаружение свайпа по элементу;</li>
<li>анимирование <span lang="EN-US">View</span>.</li>
</ul>
<o:p></o:p><br />
<div class="MsoNormal">
<o:p></o:p></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-vduJQVogHqA/UPr-Km3MjJI/AAAAAAAAAdQ/g0noQYHNbEo/s1600/device-2013-01-19-115212.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="http://1.bp.blogspot.com/-vduJQVogHqA/UPr-Km3MjJI/AAAAAAAAAdQ/g0noQYHNbEo/s200/device-2013-01-19-115212.png" width="132" /></a><a href="http://2.bp.blogspot.com/-BfpDd8QwCyo/UPr-Ko1xwaI/AAAAAAAAAdU/hO91ozKOSuY/s1600/device-2013-01-19-115156.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="http://2.bp.blogspot.com/-BfpDd8QwCyo/UPr-Ko1xwaI/AAAAAAAAAdU/hO91ozKOSuY/s200/device-2013-01-19-115156.png" width="132" /></a></div>
<br />
1. Обнаружение свайпа.<br />
<div class="MsoNormal">
<o:p></o:p></div>
<div class="MsoNormal">
Для того чтобы определить какое движение совершил
пользователь на <span lang="EN-US">View</span>,
разработаем класс <span lang="EN-US">SwipeDetector</span>,
который будет реализовывать интерфейс View.OnTouchListener. Этот класс будет
универсальным, то есть позволять определять свайп во все четыре направления
(сверху вниз, снизу вверх, слева направо, справа налево). <o:p></o:p></div>
<div class="MsoNormal">
Минимальное расстояние для свайпа установим следующее:<o:p></o:p></div>
<div class="MsoNormal">
</div>
<ul>
<li>горизонтальный свайп: 100 <span lang="EN-US">px</span>;</li>
<li>вертикальный свайп: 80 <span lang="EN-US">px</span>.</li>
</ul>
Все идея заключается в определение разности начальной и
конечной координаты и в сравнении ее с минимальным расстоянием.<o:p></o:p><br />
<div class="MsoNormal">
<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Исходный код<span lang="EN-US"> (SwipeDetector):<o:p></o:p></span></div>
<pre class="brush: java">import android.view.MotionEvent;
import android.view.View;
/**
* Класс для обнаружения свайпа на View
*/
public class SwipeDetector implements View.OnTouchListener {
public static enum Action {
LR, // Слева направо
RL, // Справа налево
TB, // Сверху вниз
BT, // Снизу вверх
None // не обнаружено действий
}
private static final int HORIZONTAL_MIN_DISTANCE = 100; // Минимальное расстояние для свайпа по горизонтали
private static final int VERTICAL_MIN_DISTANCE = 80; // Минимальное расстояние для свайпа по вертикали
private float downX, downY, upX, upY; // Координаты
private Action mSwipeDetected = Action.None; // Последнее дейтсвие
public boolean swipeDetected() {
return mSwipeDetected != Action.None;
}
public Action getAction() {
return mSwipeDetected;
}
/**
* Определение свайпа
*/
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
downX = event.getX();
downY = event.getY();
mSwipeDetected = Action.None;
return false;
}
case MotionEvent.ACTION_MOVE: {
upX = event.getX();
upY = event.getY();
float deltaX = downX - upX;
float deltaY = downY - upY;
// Обнаружение горизонтального свайпа
if (Math.abs(deltaX) > HORIZONTAL_MIN_DISTANCE) {
// Слева направо
if (deltaX < 0) {
mSwipeDetected = Action.LR;
return true;
}
// Справа налево
if (deltaX > 0) {
mSwipeDetected = Action.RL;
return true;
}
} else
// Обнаружение вертикального свайпа
if (Math.abs(deltaY) > VERTICAL_MIN_DISTANCE) {
// Сверху вниз
if (deltaY < 0) {
mSwipeDetected = Action.TB;
return false;
}
// Снизу вверх
if (deltaY > 0) {
mSwipeDetected = Action.BT;
return false;
}
}
return true;
}
}
return false;
}
}</pre>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<br /></div>
<div class="MsoNormal">
После разработки класса необходимо данный <span lang="EN-US">Listener</span><span lang="EN-US"> </span>установить
для <span lang="EN-US">ListView</span>.<o:p></o:p></div>
<pre class="brush: java">final SwipeDetector swipeDetector = new SwipeDetector();
listview.setOnTouchListener(swipeDetector);</pre>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
2. Анимация удаления элемента<o:p></o:p></div>
<div class="MsoNormal">
Для анимации мы будем использовать класс Animation (android.view.animation.
Animation). Данный класс позволяет анимировать <span lang="EN-US">View</span>, используя различную информацию,
такую как: начальная и конечная позиции элемента, размер, поворот и другое.<o:p></o:p></div>
<div class="MsoNormal">
Разработаем метод в нашем Activity, который будет выполнять
перемещение нашего элемента от его текущего положения за края экрана. Класс TranslateAnimation
позволяет выполнять анимацию перемещения от одной точки до другой.</div>
<pre class="brush: java"> /**
* Запуск анимации удаления
*/
private Animation getDeleteAnimation(float fromX, float toX, int position)
{
Animation animation = new TranslateAnimation(fromX, toX, 0, 0);
animation.setStartOffset(100);
animation.setDuration(800);
animation.setAnimationListener(new DeleteAnimationListenter(position));
animation.setInterpolator(AnimationUtils.loadInterpolator(this,
android.R.anim.anticipate_overshoot_interpolator));
return animation;
}</pre>
<div class="MsoNormal">
Нашей задачей также является отследить окончание анимации,
после чего выполнить удаление элемента и обновление списка. Для этого используется
интерфейс Animation.AnimationListener.
Он позволяет отследить начало, окончание и повтор анимации.<o:p></o:p></div>
<div class="MsoNormal">
Добавим следующий код в наше <span lang="EN-US">Activity</span>. Атрибут <span lang="EN-US">position</span><span lang="EN-US"> </span>служит
для хранения позиции удаляемого элемента.<o:p></o:p></div>
<pre class="brush: java"> /**
* Listenter служит для удаления айтема после того, как анимация удаления завершилась
*/
public class DeleteAnimationListenter implements Animation.AnimationListener
{
private int position;
public DeleteAnimationListenter(int position)
{
this.position = position;
}
@Override
public void onAnimationEnd(Animation arg0) {
removeItem(position);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationStart(Animation animation) {
}
}</pre>
<div class="MsoNormal">
<span lang="EN-US">Теперь
добавим основную логику для анимации удаления элемента в нашем Activity.<o:p></o:p></span></div>
<div class="MsoNormal">
Добавляем дополнительный статический атрибут – сообщение для
<span lang="EN-US">Handler</span>’<span lang="EN-US">a</span>:<o:p></o:p></div>
<pre class="brush: java">public static final int MSG_ANIMATION_REMOVE = 2;</pre>
<div class="MsoNormal">
В <span lang="EN-US">Handler</span><span lang="EN-US"> </span>добавляем дополнительный <span lang="EN-US">case</span> (<span lang="EN-US">msg</span>.<span lang="EN-US">arg</span>2 показывает в какую
сторону необходимо анимировать <span lang="EN-US">View</span>):<o:p></o:p></div>
<pre class="brush: java"> case MSG_ANIMATION_REMOVE: // Старт анимации удаления
View view = (View)msg.obj;
view.startAnimation(getDeleteAnimation(0, (msg.arg2 == 0) ? -view.getWidth() : 2 * view.getWidth(), msg.arg1));
break;</pre>
<div class="MsoNormal">
Расширим метод<span lang="EN-US"> OnItemClickListener() </span>для<span lang="EN-US"> Listview. </span>Если был
произведен свайп, то происходит удаление элемента, иначе его выбор:<o:p></o:p></div>
<pre class="brush: java"> listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view, int position,
long id) {
// Если произошло нажатие по Header или Footer, то ничего не делаем
if (position == 0 || position == list.size() + 1)
return;
Message msg = new Message();
msg.arg1 = position - 1;
// Если был обнаружен свайп, то удаляем айтем
if (swipeDetector.swipeDetected()){
if (swipeDetector.getAction() == SwipeDetector.Action.LR ||
swipeDetector.getAction() == SwipeDetector.Action.RL)
{
msg.what = MSG_ANIMATION_REMOVE;
msg.arg2 = swipeDetector.getAction() == SwipeDetector.Action.LR ? 1 : 0;
msg.obj = view;
}
}
// Иначе выбираем айтем
else
msg.what = MSG_CHANGE_ITEM;
handler.sendMessage(msg);
}
});</pre>
<div class="MsoNormal">
Так же не забываем о контекстном меню. При удалении элемента
через контекстное меню направление, в котором <span lang="EN-US">View</span><span lang="EN-US"> </span>должно
будет перемещаться, задается случайным образом:<o:p></o:p></div>
<pre class="brush: java"> case MSG_REMOVE_ITEM: // Удалить айтем
Message msg = new Message();
msg.arg1 = index;
msg.arg2 = (new Random()).nextInt(2);
msg.obj = listview.getChildAt(index + 1);
msg.what = MSG_ANIMATION_REMOVE;
getHandler().sendMessage(msg);
//removeItem(index);
return true;</pre>
<div class="MsoNormal">
<h3>
<b>Ссылки</b></h3>
</div>
<div class="MsoNormal">
</div>
<ul>
<li>Исходные коды данного проекта: <span lang="EN-US"><a href="http://www.snowpard.org/examples/article_b12/parts/p3/ru/CustomListViewP3.zip">zip</a></span></li>
<li>Планирование дел: <a href="http://snowpard-android-ru.blogspot.ru/2013/01/listview.html">Часть 1</a>, <a href="http://snowpard-android-ru.blogspot.ru/2013/01/blog-post_17.html">Часть 2</a>, <a href="http://snowpard-android-ru.blogspot.ru/2013/01/blog-post_21.html">Часть 4</a></li>
<li>Готовый проект: <span lang="EN-US"><a href="http://www.snowpard.org/examples/article_b12/CustomListView.apk">apk</a></span></li>
</ul>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-62336571418430176662013-01-17T23:02:00.000+04:002013-01-21T22:47:45.695+04:00Планирование дел: Сохранение и загрузка списка. Расширение функционала<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-fdMl9aHtjNw/UPbYawiYhUI/AAAAAAAAAbE/vpL7KLM0HaA/s1600/icon.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="Планирование дел: Сохранение и загрузка списк. Расширение функционала" border="0" src="http://2.bp.blogspot.com/-fdMl9aHtjNw/UPbYawiYhUI/AAAAAAAAAbE/vpL7KLM0HaA/s1600/icon.png" title="Планирование дел: Сохранение и загрузка списк. Расширение функционала" /></a></div>
<div class="MsoNormal">
В прошлой статье мы разработали кастомный <span lang="EN-US" style="mso-ansi-language: EN-US;">ListView</span>, который заполнялся локальными
данными. В этой статье мы расширем функционал нашего приложения и реализуем
возможность сохранения и загрузки данных.<br />
<br />
<br /></div>
<a name='more'></a><h3>
<b style="mso-bidi-font-weight: normal;">Практика</b></h3>
Заметка: Для того чтобы комментарии в скаченном проекте были
читаемы (русский язык), необходимо поменять кодировку проекта на <span lang="EN-US" style="mso-ansi-language: EN-US;">UTF</span>-8 (<span lang="EN-US" style="mso-ansi-language: EN-US;">Project</span> –> <span lang="EN-US" style="mso-ansi-language: EN-US;">Properties</span> –> <span lang="EN-US" style="mso-ansi-language: EN-US;">Resource</span> –> <span lang="EN-US" style="mso-ansi-language: EN-US;">Text</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">file</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">incoding</span>).<br />
<div class="MsoNormal">
В этой статье я покажу вам, как работать с файлами на <span lang="EN-US" style="mso-ansi-language: EN-US;">sd</span>-карте (сохранение и
загрузка). А так же мы расширим возможные действия с нашим списком с помощью
основного и контекстного меню. Результат программы вы можете посмотреть на
скриншотах, представленных ниже.</div>
<div style="text-align: center;">
<a href="http://3.bp.blogspot.com/-l5kIH6NNXEE/UPhEDP1oNXI/AAAAAAAAAcM/-ypveQD-iqc/s1600/device-2013-01-17-215307.png" imageanchor="1"><img border="0" height="200" src="http://3.bp.blogspot.com/-l5kIH6NNXEE/UPhEDP1oNXI/AAAAAAAAAcM/-ypveQD-iqc/s200/device-2013-01-17-215307.png" width="131" /></a>
<a href="http://2.bp.blogspot.com/-QQDDqKyjXBs/UPhEDNIzAVI/AAAAAAAAAcI/iRYokmVU2Zk/s1600/device-2013-01-17-215330.png" imageanchor="1"><img border="0" height="200" src="http://2.bp.blogspot.com/-QQDDqKyjXBs/UPhEDNIzAVI/AAAAAAAAAcI/iRYokmVU2Zk/s200/device-2013-01-17-215330.png" width="131" /></a> <a href="http://4.bp.blogspot.com/-K0hgXBywSQM/UPhEDK-CO1I/AAAAAAAAAcQ/SLoOFCncCX8/s1600/device-2013-01-17-215321.png" imageanchor="1"><img border="0" height="200" src="http://4.bp.blogspot.com/-K0hgXBywSQM/UPhEDK-CO1I/AAAAAAAAAcQ/SLoOFCncCX8/s200/device-2013-01-17-215321.png" width="132" /></a></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Перейдем сразу к практике. </div>
<div class="MsoNormal">
<br />
1. Сохранение/Загрузка списка</div>
<div class="MsoNormal">
Для получения доступа к SD-карте используется класс Environment.
Этот класс предоставляет доступ к переменным среды. Используем метод getExternalStorageDirectory().getAbsolutePath()
для получения пути к SD-карте устройства.</div>
<div class="MsoNormal">
В классе <span lang="EN-US" style="mso-ansi-language: EN-US;">Utils</span>
добавим строчку:</div>
<pre class="brush: java"> // Директория на SD-карте, где храниться список
public static File cacheDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/customlistview");
</pre>
<div class="MsoNormal">
Для сохранения и загрузки листа используется следующая идея:
сохранять объект (ArrayList) целиком в бинарный файл. Для правильной работы мы
в предыдущей статье добавили интерфейс Serializable для класса ToDoItem.<br />
<pre class="brush: java"> /**
* Сохранить список на SD-карте
*/
private synchronized void saveList() {
try {
File infoFile = new File(Utils.cacheDir, "cache");
infoFile.createNewFile();
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(infoFile));
out.writeObject(list);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Загрузить список с SD-карты
*/
@SuppressWarnings("unchecked")
public boolean loadList() {
try {
Utils.cacheDir.mkdir();
File infoFile = new File(Utils.cacheDir, "cache");
infoFile.createNewFile();
ObjectInputStream in = new ObjectInputStream(new FileInputStream(infoFile));
list = (List<ToDoItem>) in.readObject();
in.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
</pre>
</div>
<div class="MsoNormal">
<br />
Внесем изменения в существующие алгоритмы:</div>
<div class="MsoNormal">
В методе onCreate() вместо initList() будем использовать
loadList(). </div>
<div class="MsoNormal">
Так же необходимо добавить сохранение списка при смене
статуса элемента.<span style="mso-spacerun: yes;"> </span>Это<span style="mso-ansi-language: EN-US;"> </span>происходит<span style="mso-ansi-language: EN-US;"> </span>в<span style="mso-ansi-language: EN-US;"> <span lang="EN-US">Handler’</span></span>е<span lang="EN-US" style="mso-ansi-language: EN-US;">.</span></div>
<pre class="brush: java"> private Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what)
{
...
case MSG_CHANGE_ITEM: // Сделано / Не сделано дело
ToDoItem item = list.get(msg.arg1);
item.setCheck(!item.isCheck());
Utils.sorting(list, 0);
saveList();
adapter.notifyDataSetChanged();
setCountPurchaseProduct();
break;
}
}
};</pre>
<div class="MsoNormal">
<br />
2. Разработка основного меню</div>
<div class="MsoNormal">
Основное меню появляется в приложении при нажатии на кнопку
меню на девайсе.</div>
<div class="MsoNormal">
С помощью основного меню наше приложение сможет выполнять
следующие функции:</div>
<div class="MsoNormal">
<ul>
<li>добавить элемент;</li>
<li>удалить все элементы;</li>
<li>отметить все элементы;</li>
<li>убрать отметки со всех элементов.</li>
</ul>
</div>
<div class="MsoNormal">
Сначала добавим все необходимые строковые ресурсы в файл <span lang="EN-US" style="mso-ansi-language: EN-US;">strings</span>.<span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"><span style="mso-tab-count: 1;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"menu_item_add"</span></i><span style="color: teal;">></span></span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">Добавить</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-tab-count: 1;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"menu_item_remove"</span></i><span style="color: teal;">></span></span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">Удалить</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-tab-count: 1;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"menu_item_rename"</span></i><span style="color: teal;">></span></span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">Переименовать</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-tab-count: 1;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"menu_item_remove_all"</span></i><span style="color: teal;">></span></span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">Удалить</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> </span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">все</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-tab-count: 1;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"menu_item_check_all"</span></i><span style="color: teal;">></span></span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">Сделано</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> </span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">все</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-tab-count: 1;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"menu_item_uncheck_all"</span></i><span style="color: teal;">></span></span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">Ничего</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> </span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">не</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> </span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">сделано</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-tab-count: 1;"> </span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-tab-count: 1;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"btn_yes"</span></i><span style="color: teal;">></span></span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">Да</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-tab-count: 1;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"btn_no"</span></i><span style="color: teal;">></span></span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">Нет</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-tab-count: 1;"> </span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-tab-count: 1;"> </span></span><span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"><</span><span style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">string</span><span style="font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"msg_empty"</span></i><span style="color: teal;">></span><span style="color: black;">Название не может быть пустым</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal">
Теперь разработает макет для меню. Необходимо в папке <span lang="EN-US" style="mso-ansi-language: EN-US;">res</span> создать директорию <span lang="EN-US" style="mso-ansi-language: EN-US;">menu</span>. В ней создать файл <span lang="EN-US" style="mso-ansi-language: EN-US;">menu.xml</span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Исходный код файла <span lang="EN-US" style="mso-ansi-language: EN-US;">menu</span>.<span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span>:</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">menu</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i>
<span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">item</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/menu_item_add"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:title</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/menu_item_add"</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">item</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/menu_item_remove_all"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:title</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/menu_item_remove_all"</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">item</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/menu_item_check_all"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:title</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/menu_item_check_all"</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">item</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/menu_item_uncheck_all"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:title</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/menu_item_uncheck_all"</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal">
<span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">menu</span><span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Теперь необходимо разработать методы, которые будут
выполняться при выборе пунктов меню.</div>
<div class="MsoNormal">
<ul>
<li>Добавить элемент (showAddToDoItemDialog)</li>
</ul>
</div>
<div class="MsoNormal">
Данный метод будет создавать диалоговое окно с полем для
ввода названия. После нажатия на кнопку «Да», в список добавится новый элемент.<br />
<pre class="brush: java"> /**
* Открыть диалоговое окно для добавления айтема
*/
private void showAddToDoItemDialog()
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getString(R.string.menu_item_add));
final Context context = this;
final EditText input = new EditText(this);
builder.setView(input);
builder.setPositiveButton(getString(R.string.btn_yes), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int whichButton) {
String value = input.getText().toString();
if (value.equals(""))
Toast.makeText(context, getString(R.string.msg_empty), Toast.LENGTH_SHORT).show();
else
{
list.add(new ToDoItem(value, getIndexFromList() + 1));
Utils.sorting(list, 0);
saveList();
getHandler().sendEmptyMessage(MainActivity.MSG_UPDATE_ADAPTER);
}
}
});
builder.setNegativeButton(getString(R.string.btn_no), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
return;
}
});
AlertDialog alert = builder.create();
alert.show();
}</pre>
</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<ul>
<li>Удалить все элементы (removeAll)</li>
</ul>
</div>
<div class="MsoNormal">
Данный метод будет полностью очищать список.<br />
<pre class="brush: java"> /**
* Удаление всех айтемов из списка
*/
private void removeAll() {
list.clear();
saveList();
getHandler().sendEmptyMessage(MainActivity.MSG_UPDATE_ADAPTER);
}</pre>
</div>
<div class="MsoNormal">
<br />
<ul>
<li>Отметить/Убрать отметки со всех элементов (setCheckAll)</li>
</ul>
</div>
<div class="MsoNormal">
Данный метод, в зависимости от параметра, устанавливает/убирает
отметку с каждого элемента в списке.<br />
<pre class="brush: java"> /**
* Сделать/Не сделать все дела
*/
private void setCheckAll(boolean check)
{
Iterator<ToDoItem> it = list.iterator();
while (it.hasNext())
{
ToDoItem item = it.next();
item.setCheck(check);
}
Utils.sorting(list, 0);
saveList();
getHandler().sendEmptyMessage(MainActivity.MSG_UPDATE_ADAPTER);
}</pre>
</div>
<div class="MsoNormal">
<br />
<ul>
<li>Получение последнего индекса в списке (getIndexFromList)</li>
</ul>
</div>
<div class="MsoNormal">
Данный метод возвращает<span style="mso-spacerun: yes;">
</span>последний максимальный индекс в списке.<br />
<pre class="brush: java"> /**
* Получение последнего индекса в списке
*/
private int getIndexFromList()
{
int index = 0;
Iterator<ToDoItem> it = list.iterator();
while (it.hasNext())
{
ToDoItem item = it.next();
if (item.getIndex() > index)
index = item.getIndex();
}
return index;
}</pre>
</div>
<div class="MsoNormal">
<br />
Теперь добавим меню в <span lang="EN-US" style="mso-ansi-language: EN-US;">Activity</span>.<br />
<pre class="brush: java"> /**
* Создание основного меню
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
/**
* Обработка нажатия на айтем основного меню
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id)
{
case R.id.menu_item_add: // Добавление айтема
showAddToDoItemDialog();
return true;
case R.id.menu_item_remove_all: // Удаление всех айтемов
removeAll();
return true;
case R.id.menu_item_check_all: // Сделать все дела
setCheckAll(true);
return true;
case R.id.menu_item_uncheck_all: // Вернуть лист в начальное состояние
setCheckAll(false);
return true;
default:
return super.onOptionsItemSelected(item);
}
}</pre>
</div>
<div class="MsoNormal">
<br />
3. Разработка контекстного меню</div>
<div class="MsoNormal">
Контекстное меню для <span lang="EN-US" style="mso-ansi-language: EN-US;">ListView</span> появляется при долгом нажатии на элемент. Регистрируется
с помощью метода registerForContextMenu(). </div>
<div class="MsoNormal">
С помощью контекстного меню наше приложение сможет выполнять
следующие функции:</div>
<div class="MsoNormal">
<ul>
<li>удалить элемент;</li>
<li>переименовать элемент.</li>
</ul>
</div>
<div class="MsoNormal">
Сначала разработаем используемые методы для контекстного
меню.</div>
<div class="MsoNormal">
<ul>
<li>Удалить выбранный элемент (removeItem)</li>
</ul>
</div>
<div class="MsoNormal">
Удаляет указанный элемент из списка. После удаления
происходит переиндексирование списка.<br />
<pre class="brush: java"> /**
* Удаление айтема из списка
*/
private void removeItem(int index) {
list.remove(index);
reindexList();
saveList();
getHandler().sendEmptyMessage(MainActivity.MSG_UPDATE_ADAPTER);
}</pre>
</div>
<div class="MsoNormal">
<br />
<ul>
<li>Переименовать выбранный элемент (showRenameDialog<span style="color: black; font-family: "Courier New"; font-size: 10pt; line-height: 115%;">)</span></li>
</ul>
</div>
<div class="MsoNormal">
Данный метод будет создавать диалоговое окно с полем для
изменения названия элемента.<br />
<pre class="brush: java"> /**
* Открыть диалоговое окно для переименования айтема
*/
private void showRenameDialog(final int index)
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getString(R.string.menu_item_rename));
final Context context = this;
final EditText input = new EditText(this);
input.setText(list.get(index).getName());
builder.setView(input);
builder.setPositiveButton(getString(R.string.btn_yes), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int whichButton) {
String value = input.getText().toString();
if (value.equals(""))
Toast.makeText(context, getString(R.string.msg_empty), Toast.LENGTH_SHORT).show();
else
{
list.get(index).setName(value);
saveList();
getHandler().sendEmptyMessage(MainActivity.MSG_UPDATE_ADAPTER);
}
}
});
builder.setNegativeButton(getString(R.string.btn_no), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
return;
}
});
AlertDialog alert = builder.create();
alert.show();
}</pre>
</div>
<div class="MsoNormal">
<br />
<ul>
<li>Переиндексирование списка (reindexList)</li>
</ul>
</div>
<div class="MsoNormal">
Данный метод упорядочивает индексы в списке после удаления
элемента.<br />
<pre class="brush: java"> /**
* Перераспределить индексы для айтемов в списке
*/
private void reindexList()
{
int index = 1;
Utils.sorting(list, 1);
Iterator<ToDoItem> it = list.iterator();
while (it.hasNext())
{
ToDoItem item = it.next();
item.setIndex(index);
index++;
}
Utils.sorting(list, 0);
}</pre>
</div>
<div class="MsoNormal">
<br />
Теперь добавим контекстное меню в <span lang="EN-US" style="mso-ansi-language: EN-US;">Activity</span>.</div>
<div class="MsoNormal">
Зарегистрируем меню для <span lang="EN-US" style="mso-ansi-language: EN-US;">ListView</span><span lang="EN-US"> </span>в методе <span lang="EN-US" style="mso-ansi-language: EN-US;">onCreate</span>():</div>
<pre class="brush: java">registerForContextMenu(listview); // Регистрация контекстного меню для ListView)</pre>
<div class="MsoNormal">
<br />
Добавим методы в Activity:</div>
<pre class="brush: java"> /**
* Создание контекстного меню для ListView
*/
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
int index = ((AdapterView.AdapterContextMenuInfo)menuInfo).position;
if (index == list.size() + 1 || index == 0)
return;
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(0, MSG_REMOVE_ITEM, Menu.NONE, R.string.menu_item_remove);
menu.add(0, MSG_RENAME_ITEM, Menu.NONE, R.string.menu_item_rename);
}
/**
* Обработка нажатия на айтем контекстного меню
*/
@Override
public boolean onContextItemSelected(MenuItem item) {
super.onContextItemSelected(item);
AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
int index = menuInfo.position - 1;
switch (item.getItemId())
{
case MSG_REMOVE_ITEM: // Удалить айтем
removeItem(index);
return true;
case MSG_RENAME_ITEM: // Переименовать айтем
showRenameDialog(index);
return true;
}
return false;
}</pre>
<div class="MsoNormal">
<h3>
<b style="mso-bidi-font-weight: normal;">Ссылки</b></h3>
</div>
<div class="MsoNormal">
<ul>
<li>Исходные коды данного проекта<span lang="EN-US">: <a href="http://www.snowpard.org/examples/article_b12/parts/p2/ru/CustomListViewP2.zip">zip</a></span></li>
<li>Планирование дел: <a href="http://snowpard-android-ru.blogspot.ru/2013/01/listview.html">Часть 1</a>, <a href="http://snowpard-android-ru.blogspot.ru/2013/01/blog-post_20.html">Часть 3</a>, <a href="http://snowpard-android-ru.blogspot.ru/2013/01/blog-post_21.html">Часть 4</a>
</li>
<li>Готовый проект:
<span lang="EN-US"><a href="http://www.snowpard.org/examples/article_b12/CustomListView.apk">apk</a></span></li>
</ul>
</div>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-80372043193159010462013-01-16T21:19:00.000+04:002013-01-21T22:47:39.563+04:00Планирование дел: Кастомизация ListView. Постановка задачи<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-fdMl9aHtjNw/UPbYawiYhUI/AAAAAAAAAbE/vpL7KLM0HaA/s1600/icon.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="Планирование дел: Кастомизация ListView. Постановка задачи" border="0" src="http://2.bp.blogspot.com/-fdMl9aHtjNw/UPbYawiYhUI/AAAAAAAAAbE/vpL7KLM0HaA/s1600/icon.png" title="Планирование дел: Кастомизация ListView. Постановка задачи" /></a></div>
С этой статьи начинается небольшой цикл статей о
кастомизации списков (<span lang="EN-US" style="mso-ansi-language: EN-US;">ListView</span>).
Мы напишим небольшое приложение по планированию своих дел. В первой части я
затрону моменту по созданию <span lang="EN-US" style="mso-ansi-language: EN-US;">ListView</span>,
его кастомизации, добавлению дополнительных элементов (<span lang="EN-US" style="mso-ansi-language: EN-US;">Header</span>, <span lang="EN-US" style="mso-ansi-language: EN-US;">Footer</span>) и заполнению списка.<br />
<div class="MsoNormal">
<a name='more'></a></div>
<h3>
<b style="mso-bidi-font-weight: normal;">Постановка задачи</b></h3>
<div class="MsoNormal">
По окончанию цикла статей наше приложение должно будет
выполнять следующие функции:</div>
<ol>
<li><div class="MsoNormal">
Добавление/Удаление/Выбор/Переименование запланированного
дела.</div>
</li>
<li><div class="MsoNormal">
Удаление всех запланированных дел.</div>
</li>
<li><div class="MsoNormal">
Выбор/Отмена выбора всех запланированных дел.</div>
</li>
<li><div class="MsoNormal">
Сохранение/Загрузка запланированных дел на карте памяти.</div>
</li>
<li><div class="MsoNormal">
Анимация удаления запланированного дела.</div>
</li>
<li><div class="MsoNormal">
Анимация летающих ячеек.</div>
</li>
</ol>
<h3>
<b style="mso-bidi-font-weight: normal;">Немного теории</b></h3>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">ListView</span><span lang="EN-US"> </span>– это специальное <span lang="EN-US" style="mso-ansi-language: EN-US;">View</span>, которое отображает список прокручиваемых элементов. Эти
элементы списка автоматически формируются с помощью адаптера, который берет
содержимое из различных источников, например массив или база данных, и
преобразует каждый элемент во <span lang="EN-US" style="mso-ansi-language: EN-US;">View</span>,
которое помещается в лист.</div>
<div class="MsoNormal">
Основной алгоритм разработки и кастомизации <span lang="EN-US" style="mso-ansi-language: EN-US;">ListView</span><span lang="EN-US"> </span>следующий:</div>
<div class="MsoNormal">
1.<span style="mso-spacerun: yes;"> </span>Сначала необходимо
разработать структуру данных, которая будет представлять один элемент списка.
Это может быть простой тип или объект (такой как <span lang="EN-US" style="mso-ansi-language: EN-US;">String</span><span lang="EN-US"> </span>или <span lang="EN-US" style="mso-ansi-language: EN-US;">Integer</span>), либо разработанный
класс, как в нашем случае (<span lang="EN-US" style="mso-ansi-language: EN-US;">ToDoItem</span>).</div>
<div class="MsoNormal">
2. На следующем шаге, необходимо разработать все <span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span> макеты:</div>
<ul>
<li><div class="MsoNormal">
макет для одного элемента
списка (listitem.xml);</div>
</li>
<li><div class="MsoNormal">
макет для <span lang="EN-US" style="mso-ansi-language: EN-US;">Activity</span>, где будет
находиться наш <span lang="EN-US" style="mso-ansi-language: EN-US;">ListView</span>
(в нашем случае это main.xml);</div>
</li>
<li><div class="MsoNormal">
макет<span style="mso-ansi-language: EN-US;"> </span>для<span style="mso-ansi-language: EN-US;">
<span lang="EN-US">Header </span></span>и<span style="mso-ansi-language: EN-US;"> <span lang="EN-US">Footer, </span></span>если<span style="mso-ansi-language: EN-US;"> </span>они<span style="mso-ansi-language: EN-US;"> </span>будут<span lang="EN-US" style="mso-ansi-language: EN-US;"> (list_header.xml, list_footer.xml).</span></div>
</li>
</ul>
<div class="MsoNormal">
3. Далее необходимо разработать Адаптер<span style="mso-spacerun: yes;"> </span>(CustomListAdapter.java) для формирования
нашего <span lang="EN-US" style="mso-ansi-language: EN-US;">ListView</span><span lang="EN-US"> </span>по указанному источнику данных. В нашем случае адаптер будет
наследоваться от <span lang="EN-US" style="mso-ansi-language: EN-US;">BaseAdapter</span>
и в качестве источника данных будет использоваться <span lang="EN-US" style="mso-ansi-language: EN-US;">ArrayList</span>.</div>
<div class="MsoNormal">
4. Последний шаг – это объединение всего выше разработанного
в нашем <span lang="EN-US" style="mso-ansi-language: EN-US;">Activity</span>. Алгоритм
инициализации объектов следующий:</div>
<ul>
<li><div class="MsoNormal">
загружаем или
инициализируем список (<span lang="EN-US" style="mso-ansi-language: EN-US;">ArrayList</span>)
с данными;</div>
</li>
<li><div class="MsoNormal">
инициализируем <span lang="EN-US" style="mso-ansi-language: EN-US;">ListView</span> (с помощью метода <span lang="EN-US" style="mso-ansi-language: EN-US;">findViewById</span>());</div>
</li>
<li><div class="MsoNormal">
создаем адаптер с
загруженными данными;</div>
</li>
<li><div class="MsoNormal">
если есть <span lang="EN-US" style="mso-ansi-language: EN-US;">Header</span><span lang="EN-US"> </span>или
<span lang="EN-US" style="mso-ansi-language: EN-US;">Footer</span>, то добавляем их
к <span lang="EN-US" style="mso-ansi-language: EN-US;">ListView</span> (с помощью
методов <span lang="EN-US" style="mso-ansi-language: EN-US;">addHeaderView</span>()
или <span lang="EN-US" style="mso-ansi-language: EN-US;">addFooterView</span>()
соответственно);</div>
</li>
<li><div class="MsoNormal">
устанавливаем адаптер для <span lang="EN-US" style="mso-ansi-language: EN-US;">ListView</span> (с помощью метода <span lang="EN-US" style="mso-ansi-language: EN-US;">setAdapter</span>()). </div>
</li>
</ul>
<div class="MsoNormal">
Для корректной работы <span lang="EN-US" style="mso-ansi-language: EN-US;">ListView</span>, необходимо придерживаться следующих правил: </div>
<ul>
<li><div class="MsoNormal" style="text-indent: 35.4pt;">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Header</span><span lang="EN-US"> </span>и <span lang="EN-US" style="mso-ansi-language: EN-US;">Footer</span><span lang="EN-US"> </span>необходимо
добавлять до вызова метода <span lang="EN-US" style="mso-ansi-language: EN-US;">setAdapter</span>();</div>
</li>
<li><div class="MsoNormal" style="text-indent: 35.4pt;">
если Вы добавили <span lang="EN-US" style="mso-ansi-language: EN-US;">Header</span><span lang="EN-US"> </span>или <span lang="EN-US" style="mso-ansi-language: EN-US;">Footer</span>, то заметьте, что параметр
<span lang="EN-US" style="mso-ansi-language: EN-US;">position</span> в методе <span lang="EN-US" style="mso-ansi-language: EN-US;">onItemClick</span>() для <span lang="EN-US" style="mso-ansi-language: EN-US;">ListView</span><span lang="EN-US"> </span>будет:</div>
</li>
</ul>
<div class="MsoNormal" style="margin-left: 35.4pt; text-indent: 35.4pt;">
- на +1
больше, если добавлен <span lang="EN-US" style="mso-ansi-language: EN-US;">Header</span>;</div>
<div class="MsoNormal" style="margin-left: 35.4pt; text-indent: 35.4pt;">
- на 1 (2)
больше размера источника данных (метод <span lang="EN-US" style="mso-ansi-language: EN-US;">size</span>() для <span lang="EN-US" style="mso-ansi-language: EN-US;">ArrayList</span>,
если добавлено 1 (или 2) <span lang="EN-US" style="mso-ansi-language: EN-US;">View</span>
соответственно).<br />
<br /></div>
<h3>
<b style="mso-bidi-font-weight: normal;">Практика</b></h3>
<div class="MsoNormal">
Заметка: Для того чтобы комментарии в скаченном проекте были
читаемы (русский язык), необходимо поменять кодировку проекта на <span lang="EN-US" style="mso-ansi-language: EN-US;">UTF</span>-8 (<span lang="EN-US" style="mso-ansi-language: EN-US;">Project</span> –> <span lang="EN-US" style="mso-ansi-language: EN-US;">Properties</span> –> <span lang="EN-US" style="mso-ansi-language: EN-US;">Resource</span> –> <span lang="EN-US" style="mso-ansi-language: EN-US;">Text</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">file</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">incoding</span>).</div>
<div class="MsoNormal">
Изображения, используемые в проекте, можно скачать <a href="http://www.snowpard.org/examples/article_b12/drawable.zip">здесь</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-2nBjvkdTORg/UPbYeYcmg0I/AAAAAAAAAbM/nToq6iqXrw0/s1600/image_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://3.bp.blogspot.com/-2nBjvkdTORg/UPbYeYcmg0I/AAAAAAAAAbM/nToq6iqXrw0/s320/image_1.png" width="181" /></a></div>
Перед разработкой макетов и классов, надо добавить строковые
ресурсы.</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><?</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">xml</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">version</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i> <span style="color: #7f007f;">encoding</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"utf-8"</span></i><span style="color: teal;">?></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">resources</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none; text-indent: 35.4pt;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"app_name"</span></i><span style="color: teal;">></span><span style="color: black;">CustomListView</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none; text-indent: 35.4pt;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"txt_header_title"</span></i><span style="color: teal;">></span></span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">Надо</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> </span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">сделать</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-tab-count: 1;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"txt_footer_title"</span></i><span style="color: teal;">></span></span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">Сделано</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">: %s</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
<span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">resources</span><span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
1. Разработку проекта начнем с разработки класса <span lang="EN-US" style="mso-ansi-language: EN-US;">ToDoItem</span>. Объекты этого
класса будут являться источником данных для элементов в списке. </div>
<div class="MsoNormal">
Аттрибуты класса зададим следующие:</div>
<div class="MsoNormal" style="text-indent: 35.4pt;">
name - название дела;</div>
<div class="MsoNormal" style="text-indent: 35.4pt;">
check -<span style="mso-spacerun: yes;"> </span>сделано/не сделано текущее дело;</div>
<div class="MsoNormal" style="text-indent: 35.4pt;">
index - позиция в списке в момент
добавления (будет использоваться для сортировки списка).</div>
<div class="MsoNormal">
Класс будет сериализован для того, чтобы можно было его
сохранить и загрузить.<br />
<br /></div>
<div class="MsoNormal">
Исходный код класса:</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<pre class="brush: java">import java.io.Serializable;
/**
* Айтем для списка
*/
public class ToDoItem implements Serializable{
private static final long serialVersionUID = 2008719019880549886L;
private String name; // Название дела
private boolean check; // Сделано/Не сделано
private int index; // Позиция в списке в момент добавления
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isCheck() {
return check;
}
public void setCheck(boolean check) {
this.check = check;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public ToDoItem(String name, int index) {
setName(name);
setIndex(index);
setCheck(false);
}
public ToDoItem() {
setName("");
setCheck(false);
}
}</pre>
</div>
<div class="MsoNormal">
<br />
2. Разработка макетов</div>
<div class="MsoNormal">
Для начала разработаем <span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span>-макет для представления отдельного элемента в массиве. </div>
<div class="MsoNormal">
По данному макету есть несколько замечаний: </div>
<div class="MsoNormal" style="margin-left: 53.25pt; mso-list: l0 level1 lfo1; text-indent: -18.0pt;">
<ul>
<li><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">android</span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">:</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">focusable</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">=</span><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">"</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">false</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">" </span></i>используется <span style="mso-spacerun: yes;"> </span>для <span lang="EN-US" style="mso-ansi-language: EN-US;">CheckBox</span>, чтобы можно было
обработать нажатие на элемент в списке (метод <span lang="EN-US" style="mso-ansi-language: EN-US;">onItemClick</span>() для <span lang="EN-US" style="mso-ansi-language: EN-US;">ListView</span>).</li>
</ul>
</div>
<div class="MsoNormal">
Исходный<span style="mso-ansi-language: EN-US;"> </span>код<span style="mso-ansi-language: EN-US;"> <span lang="EN-US">listitem.xml:</span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><?</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">xml</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">version</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i> <span style="color: #7f007f;">encoding</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"utf-8"</span></i><span style="color: teal;">?></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><u><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span></u><u><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span></u></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_marginLeft</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"3dp"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_marginRight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"3dp"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:background</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/item"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:orientation</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"horizontal"</span></i> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">TextView</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/listitem_name"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><u><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></u></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:gravity</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"left|center_vertical"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_weight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1"</span></i> </span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:singleLine</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"true"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:ellipsize</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"end"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_marginLeft</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"10dp"</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">CheckBox</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/listitem_check"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_marginRight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"5dp"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:button</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/custom_checkbox"</span></i> </span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:focusable</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"false"</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span><br />
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"><br /></span></div>
<div class="MsoNormal">
Теперь разработаем макеты для <span lang="EN-US" style="mso-ansi-language: EN-US;">Header</span><span lang="EN-US"> </span>и <span lang="EN-US" style="mso-ansi-language: EN-US;">Footer</span>. <span lang="EN-US" style="mso-ansi-language: EN-US;">Header</span><span lang="EN-US"> </span>будет
использоваться для заголовка, а <span lang="EN-US" style="mso-ansi-language: EN-US;">Footer</span><span lang="EN-US"> </span>будет выводить количество завершенных дел.</div>
<div class="MsoNormal">
<br />
Исходный код <span lang="EN-US" style="mso-ansi-language: EN-US;">list</span>_<span lang="EN-US" style="mso-ansi-language: EN-US;">header</span>.<span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span>:</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><?</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">xml</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">version</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i> <span style="color: #7f007f;">encoding</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"utf-8"</span></i><span style="color: teal;">?></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_marginLeft</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"3dp"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_marginRight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"3dp"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:background</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/header"</span></i> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">TextView</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/header_title"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:gravity</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"center"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:shadowColor</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@android:color/black"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:shadowDy</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:shadowRadius</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"2"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:textColor</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@android:color/white"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:textSize</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"20sp"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:textStyle</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"bold"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">LinearLayout</span><span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal">
<span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">LinearLayout</span><span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span><br />
<span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"><br /></span></div>
<div class="MsoNormal">
Исходный код <span lang="EN-US" style="mso-ansi-language: EN-US;">list</span>_<span lang="EN-US" style="mso-ansi-language: EN-US;">footer</span>.<span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span>:</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><?</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">xml</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">version</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i> <span style="color: #7f007f;">encoding</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"utf-8"</span></i><span style="color: teal;">?></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_marginLeft</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"3dp"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_marginRight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"3dp"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:background</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/footer"</span></i> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">TextView</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/footer_title"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_marginRight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"2dp"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:gravity</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"right|center_vertical"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:textStyle</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"bold"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
<br />
Теперь разработаем основной макет, в котором будет <span lang="EN-US" style="mso-ansi-language: EN-US;">ListView</span>. Стандартный <span lang="EN-US" style="mso-ansi-language: EN-US;">ListView</span><span lang="EN-US"> </span>при
нажатии на элемент или сам лист, выделяется черным цветом. Чтобы этого
избежать, надо добавить свойство: <span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">android</span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">:</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">cacheColorHint</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">=</span><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">"@</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">android</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">:</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">color</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">/</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">transparent</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">"</span></i>.<br />
<br /></div>
<div class="MsoNormal">
Исходный код <span lang="EN-US" style="mso-ansi-language: EN-US;">main</span>.<span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span>:</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:background</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@android:color/white"</span></i> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">ListView</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/listview"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:cacheColorHint</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@android:color/transparent"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal">
<span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">LinearLayout</span><span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span><br />
<span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"><br /></span></div>
<div class="MsoNormal">
3. Разработка адаптера</div>
<div class="MsoNormal">
В данном примере будет использоваться самый простой адаптер,
наследованный от <span lang="EN-US" style="mso-ansi-language: EN-US;">BaseAdapter</span>.
В качестве источника данных будет <span lang="EN-US" style="mso-ansi-language: EN-US;">ArraList</span><<span lang="EN-US" style="mso-ansi-language: EN-US;">ToDoItem</span>>.</div>
<div class="MsoNormal">
<br />
Исходный код класса <span lang="EN-US" style="mso-ansi-language: EN-US;">CustomListAdapter</span>:</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<pre class="brush: java">import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.Paint;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.TextView;
/**
* Адаптер для ListView
*/
public class CustomListAdapter extends BaseAdapter {
private LayoutInflater inflater_;
private List<ToDoItem> list = new ArrayList<ToDoItem>();
private Context context;
public CustomListAdapter(List<ToDoItem> list, Context context)
{
this.list = list;
inflater_ = LayoutInflater.from(context);
this.context = context;
}
@Override
public int getCount() {
return this.list.size();
}
@Override
public Object getItem(int position) {
return this.list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public void setList(List<ToDoItem> list)
{
this.list = list;
}
@Override
public View getView(final int position, View view, ViewGroup parent) {
View v = view;
if (view == null)
v = inflater_.inflate(R.layout.listitem,
parent, false);
v.setVisibility(View.VISIBLE);
// Получение айтема из листа
final ToDoItem item = list.get(position);
// Установка названия дела
TextView listitem_name = (TextView)v.findViewById(R.id.listitem_name);
listitem_name.setText(item.getIndex() + ". " + item.getName());
// Перечеркивание завершенных дел
if (item.isCheck())
listitem_name.setPaintFlags(Paint.ANTI_ALIAS_FLAG | Paint.STRIKE_THRU_TEXT_FLAG);
else
listitem_name.setPaintFlags(Paint.ANTI_ALIAS_FLAG);
// Установка чекбокса и события на нажатие
CheckBox listitem_check = (CheckBox)v.findViewById(R.id.listitem_check);
listitem_check.setChecked(item.isCheck());
listitem_check.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Message msg = new Message();
msg.arg1 = position;
msg.what = MainActivity.MSG_CHANGE_ITEM;
((MainActivity)context).getHandler().sendMessage(msg);
}
});
return v;
}
}</pre>
</div>
<div class="MsoNormal">
<br />
4. Разработка специализированного класса <span lang="EN-US" style="mso-ansi-language: EN-US;">Utils</span>.</div>
<div class="MsoNormal">
Этот класс я выношу отдельно, посколько в нем используются
методы (статические), которые мы можем использовать в дальнейшем в других
классах. </div>
<div class="MsoNormal">
Метод <span lang="EN-US" style="mso-ansi-language: EN-US;">setList</span>()
используется для того, чтобы убрать стандартное выделение элемента в списке и
разделительную полосу между элементами.</div>
<div class="MsoNormal">
Метод sorting() используется для сортировки списка. Возможна
сортировка по сделанным/не сделанным делам (<span lang="EN-US" style="mso-ansi-language: EN-US;">type</span> = 0) и по индексу (<span lang="EN-US" style="mso-ansi-language: EN-US;">type</span> = 1).</div>
<div class="MsoNormal">
<br />
Исходный код класса Utils:</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<pre class="brush: java">import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.widget.ListView;
/**
* Специализированный класс для различных статических методов
*/
public class Utils {
/**
* Устанавливает различные параметры для листа. В частности, убирает полосу разделения
* у элементов списка.
*/
public static void setList(ListView list, Context context) {
list.setSelector(android.R.color.transparent);
ColorDrawable sage = new ColorDrawable(context.getResources().getColor(
android.R.color.transparent));
list.setDivider(sage);
list.setDividerHeight(0);
}
/**
* Сортировка списка
* @param type 0 - сортировка по галочке
* @param type 1 - сортировка по индексу
*/
public static void sorting(List<ToDoItem> list, final int type)
{
Collections.sort(list, new Comparator<ToDoItem>() {
@Override
public int compare(ToDoItem item1, ToDoItem item2) {
int compare = 0;
switch (type)
{
case 0:
Boolean bool_value1 = Boolean.valueOf(item1.isCheck());
Boolean bool_value2 = Boolean.valueOf(item2.isCheck());
compare = bool_value1.compareTo(bool_value2);
if (compare == 0)
compare = (item1.getIndex() > item2.getIndex()) ? 1 : -1;
break;
case 1:
Integer int_value1 = Integer.valueOf(item1.getIndex());
Integer int_value2 = Integer.valueOf(item2.getIndex());
compare = int_value1.compareTo(int_value2);
break;
}
return compare;
}
});
}
}</pre>
</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">5. </span>Основной<span style="mso-ansi-language: EN-US;"> </span>класс<span style="mso-ansi-language: EN-US;"> <span lang="EN-US">MainActivity.</span></span></div>
<div class="MsoNormal">
Атрибуты<span style="mso-ansi-language: EN-US;"> </span>нашего<span style="mso-ansi-language: EN-US;"> </span>класса<span style="mso-ansi-language: EN-US;"> </span>будут<span style="mso-ansi-language: EN-US;"> </span>следующие<span lang="EN-US" style="mso-ansi-language: EN-US;">:</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<pre class="brush: java">// Сообщения для Handler'а
public static final int MSG_UPDATE_ADAPTER = 0;
public static final int MSG_CHANGE_ITEM = 1;
// Объекты для работы со списком дел
private List<ToDoItem> list = new ArrayList<ToDoItem>();
private CustomListAdapter adapter;
private ListView listview;
// Footer нашего ListView
private View footer;</pre>
</div>
<div class="MsoNormal">
<br />
Сообщения используются для <span lang="EN-US" style="mso-ansi-language: EN-US;">Handler</span>’<span lang="EN-US" style="mso-ansi-language: EN-US;">a</span>. Они дают возможность обновить лист не
из главного потока.</div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Footer</span><span lang="EN-US"> </span>выносится в атрибуты, чтобы можно было его обновлять в
процессе выполнения программы.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Теперь сделаем всю необходимую инициализацию в методе <span lang="EN-US" style="mso-ansi-language: EN-US;">onCreate</span>().</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<pre class="brush: java">@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initList(); // Инициализация списка
listview = (ListView)findViewById(R.id.listview);
/*
Добавление header'a и footer'а к ListView
Заметьте:
1. Эти View необходимо добавлять до вызова метода setAdapter
2. Эти View учитываются при получении позиции айтема в списке (например в методах OnItemClickListener (для ListView) и getView (для Adapter))
*/
View header = LayoutInflater.from(this).inflate(R.layout.list_header, null, false);
((TextView)header.findViewById(R.id.header_title)).setText(R.string.txt_header_title);
listview.addHeaderView(header);
footer = LayoutInflater.from(this).inflate(R.layout.list_footer, null, false);
listview.addFooterView(footer);
adapter = new CustomListAdapter(list, this);
setCountPurchaseProduct(); // Расчет сделанных дел
listview.setAdapter(adapter);
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view, int position,
long id) {
// Если произошло нажатие по Header или Footer, то ничего не делаем
if (position == 0 || position == list.size() + 1)
return;
Message msg = new Message();
msg.arg1 = position - 1;
msg.what = MSG_CHANGE_ITEM;
handler.sendMessage(msg);
}
});
// Настраиваем ListView и сортируем наш список по галочкам
Utils.setList(listview, this);
Utils.sorting(list, 0);
}</pre>
<div class="MsoNormal">
<br />
Добавим методы для инициализации списка и расчета сделанных
дел:</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<pre class="brush: java">/**
* Инициализация списка
*/
private void initList()
{
for (int i = 1; i <= 10; i++)
list.add(new ToDoItem("ToDo Item " + i, i));
}
/**
* Рассчитать количество сделанных дел
*/
private void setCountPurchaseProduct()
{
int count = 0;
Iterator<ToDoItem> it = list.iterator();
while (it.hasNext())
{
ToDoItem item = it.next();
if (item.isCheck())
count++;
}
((TextView)footer.findViewById(R.id.footer_title)).setText(String.format(getString(R.string.txt_footer_title), count));
}</pre>
</div>
<div class="MsoNormal">
<br />
Последним шагом останется разработка Handler’a:</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<pre class="brush: java">private Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what)
{
case MSG_UPDATE_ADAPTER: // Обновление ListView
adapter.notifyDataSetChanged();
setCountPurchaseProduct();
break;
case MSG_CHANGE_ITEM: // Сделать/Не сделать дело
ToDoItem item = list.get(msg.arg1);
item.setCheck(!item.isCheck());
Utils.sorting(list, 0);
adapter.notifyDataSetChanged();
setCountPurchaseProduct();
break;
}
}
};
public Handler getHandler()
{
return handler;
}
</pre>
</div>
<h3>
<b style="mso-bidi-font-weight: normal;">Ссылки</b></h3>
<ul>
<li><div class="MsoNormal">
Исходные коды данного проекта: <span lang="EN-US" style="mso-ansi-language: EN-US;"><a href="http://www.snowpard.org/examples/article_b12/parts/p1/ru/CustomListViewP1.zip">zip</a></span><span lang="EN-US"> </span></div>
</li>
<li>Планирование дел: <a href="http://snowpard-android-ru.blogspot.ru/2013/01/blog-post_17.html">Часть 2</a>, <a href="http://snowpard-android-ru.blogspot.ru/2013/01/blog-post_20.html">Часть 3</a>, <a href="http://snowpard-android-ru.blogspot.ru/2013/01/blog-post_21.html">Часть 4</a>
</li>
<li><div class="MsoNormal">
Готовый проект: <span lang="EN-US" style="mso-ansi-language: EN-US;"><a href="http://www.snowpard.org/examples/article_b12/CustomListView.apk">apk</a></span></div>
</li>
</ul>
</div>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com2tag:blogger.com,1999:blog-8853310020905277854.post-6268268059325172252013-01-08T00:42:00.000+04:002013-01-08T00:42:08.224+04:00Рекламные сервисы: AdMob<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-IyCGeB29oeA/UOsyM7oE8vI/AAAAAAAAAZY/TRtDqEYKsl4/s1600/icon.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="Рекламные сервисы: AdMob" border="0" src="http://3.bp.blogspot.com/-IyCGeB29oeA/UOsyM7oE8vI/AAAAAAAAAZY/TRtDqEYKsl4/s1600/icon.png" title="Рекламные сервисы: AdMob" /></a></div>
<div>
<span lang="EN-US" style="mso-ansi-language: EN-US;">AdMob</span>
— сервис мобильной рекламы от компании <span lang="EN-US" style="mso-ansi-language: EN-US;">Google</span>. В этой статье я расскажу, как использовать данный сервис
в своих приложениях и играх.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
</div>
<a name='more'></a><br />
<br />
<div class="MsoNormal">
Что предлагает <span lang="EN-US" style="mso-ansi-language: EN-US;">AdMob</span>:</div>
<ul>
<li class="MsoNormal">Создание своих собственных рекламных объявлений;</li>
<li class="MsoNormal"><span lang="EN-US" style="mso-ansi-language: EN-US;">SDK </span>для<span lang="EN-US" style="mso-ansi-language: EN-US;"> Android, iPhone </span>и<span style="mso-ansi-language: EN-US;"> <span lang="EN-US">Windows Phone 7; </span></span></li>
<li class="MsoNormal">Гибкие и мощные инструменты управления рекламными
площадками;</li>
<li class="MsoNormal">Стабильные автоматические выплаты (необходимо заработать
более 100$).</li>
</ul>
<div class="MsoNormal">
<br /></div>
<h3>
<b style="mso-bidi-font-weight: normal;">Начало работы</b></h3>
<div class="MsoNormal">
Для начала работы необходимо зарегистрироваться или войти в
систему: <a href="http://www.google.com/ads/admob/" target="_blank">www.google.com/ads/admob/</a> и скачать <span lang="EN-US" style="mso-ansi-language: EN-US;">sdk</span> (по этой ссылке: <a href="https://developers.google.com/mobile-ads-sdk/download" target="_blank">developers.google.com/mobile-ads-sdk/download</a>).
Для каждого приложения необходимо получить свой <span lang="EN-US" style="mso-ansi-language: EN-US;">Publisher ID</span>. Для этого заходим в <span lang="EN-US" style="mso-ansi-language: EN-US;">Sites</span> & <span lang="EN-US" style="mso-ansi-language: EN-US;">Apps</span><span lang="EN-US"> </span>и нажимаем <span lang="EN-US" style="mso-ansi-language: EN-US;">Add</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">Site</span>/<span lang="EN-US" style="mso-ansi-language: EN-US;">App</span>. После заполнения необходимых,
вашему приложению будет присвоен <span lang="EN-US" style="mso-ansi-language: EN-US;">ID</span>. Его Вы сможете посмотреть, нажав у приложения кнопку Manage Settings.</div>
<div class="MsoNormal">
<br /></div>
<h3>
<b style="mso-bidi-font-weight: normal;">Интеграция кода</b></h3>
<div class="MsoNormal">
Для работы с <span lang="EN-US" style="mso-ansi-language: EN-US;">SDK</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">AdMob</span>
надо поместить скаченный jar в папку <span lang="EN-US" style="mso-ansi-language: EN-US;">libs</span><span lang="EN-US"> </span>проекта (если ее нет, то необходимо
создать) и добавьте библиотеку к проекту. Для этого нажмите «<span lang="EN-US" style="mso-ansi-language: EN-US;">Properties</span>» в меню «<span lang="EN-US" style="mso-ansi-language: EN-US;">Project</span>».<span style="mso-spacerun: yes;"> </span>Выберите «<span lang="EN-US" style="mso-ansi-language: EN-US;">Java</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">Build</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">Path</span>» в левой части окна и нажмите «<span lang="EN-US" style="mso-ansi-language: EN-US;">Libraries</span>». Нажмите «<span lang="EN-US" style="mso-ansi-language: EN-US;">Add</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">JARs</span>...» и выберите скаченный
файл. Библиотека должна появиться в <span lang="EN-US" style="mso-ansi-language: EN-US;">Referenced</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">Libraries</span> вашего проекта.</div>
<div class="MsoNormal">
Для рекламного сервиса необходимо добавить следующие
разрешения в <span lang="EN-US" style="mso-ansi-language: EN-US;">AndroidManifest</span>:</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">uses-permission</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"android.permission.INTERNET"</span></i>
<span style="color: teal;">/></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">uses-permission</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"android.permission.ACCESS_NETWORK_STATE"</span></i>
<span style="color: teal;">/></span></span></div>
<div class="MsoNormal">
Так же в <span lang="EN-US" style="mso-ansi-language: EN-US;">AndroidManifest</span><span lang="EN-US"> </span>необходимо добавить <span lang="EN-US" style="mso-ansi-language: EN-US;">Activity</span><span lang="EN-US"> </span>для отображения открытой рекламы.</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">activity</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; margin-left: 32.25pt; margin-right: 0cm; margin-top: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android:name</span><span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">=</span><i><span lang="EN-US" style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">"com.google.ads.AdActivity"</span></i><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:configChanges</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"</span></i>
<span style="color: teal;">/></span></span><span lang="EN-US" style="mso-ansi-language: EN-US;"> </span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Существует два способа добавления рекламного баннера во <span lang="EN-US" style="mso-ansi-language: EN-US;">View</span>:</div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">1. </span>Через<span style="mso-ansi-language: EN-US;"> <span lang="EN-US">xml</span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">RelativeLayout</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">xmlns:ads</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/lib/com.google.ads"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">com.google.ads.AdView</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/adview_banner_view"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"50dp"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">ads:adSize</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"BANNER"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">ads:adUnitId</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"Publisher ID Here!"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">ads:loadAdOnCreate</span><span style="color: black; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">=</span><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">"true"</span></i><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">RelativeLayout</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span><span style="mso-ansi-language: EN-US;"> </span></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">2. </span>Через<span style="mso-ansi-language: EN-US;"> </span>код</div>
<div class="MsoNormal">
<pre class="brush: java">String ADMOBID = “Publisher ID Here!";
AdView adview = new AdView(this, AdSize.BANNER, ADMOBID);
parentView.addView(adview);</pre>
</div>
<div class="MsoNormal">
<br /></div>
<h3>
<b style="mso-bidi-font-weight: normal;">Управление рекламным
сервисом</b></h3>
<div class="MsoNormal">
После добавление <span lang="EN-US" style="mso-ansi-language: EN-US;">View</span> рекламного сервиса, необходимо загружать рекламу когда
приложение открывается и прекращать загрузку, если приложение свернуто.</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<pre class="brush: java">public class MainActivity extends Activity {
private AdView adView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
adView = (AdView)findViewById(R.id.adview_banner_view);
}
@Override
protected void onPause() {
super.onPause();
if (adView.isRefreshing())
adView.stopLoading();
}
@Override
protected void onResume() {
super.onResume();
adView.loadAd(new AdRequest());
}
}
</pre>
</div>
<h3>
<b style="mso-bidi-font-weight: normal;">Ссылки</b></h3>
<ul>
<li><div class="MsoNormal">
Исходные коды данного проекта можно скачать отсюда: <span lang="EN-US" style="mso-ansi-language: EN-US;"><a href="http://snowpard.org/examples/article_a5/AdMobExample.zip">zip</a></span></div>
</li>
</ul>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-80029137577000659482013-01-04T00:55:00.002+04:002013-01-04T00:55:41.332+04:00Кастомизация интерфейса: Шрифты<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-EcuwCF_r5h0/UH2p2hJqBoI/AAAAAAAAAXo/fk2239rJthQ/s1600/icon.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-EcuwCF_r5h0/UH2p2hJqBoI/AAAAAAAAAXo/fk2239rJthQ/s1600/icon.png" /></a></div>
<div class="MsoNormal">
Иногда бывает необходимо поменять стандартный шрифт
приложения на свой собственный. Как это сделать, я покажу в этой статье.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<a name='more'></a>Все шрифты поместим в папку <span lang="EN-US" style="mso-ansi-language: EN-US;">assets</span>/<span lang="EN-US" style="mso-ansi-language: EN-US;">fonts</span> (предварительно ее создав).<span style="mso-spacerun: yes;"> </span>Заметьте: лучше использовать <span lang="EN-US" style="mso-ansi-language: EN-US;">OTF</span><span lang="EN-US"> </span>шрифты.
Если у вас шрифты другого формата, можете воспользоваться бесплатным <span lang="EN-US" style="mso-ansi-language: EN-US;">online</span><span lang="EN-US"> </span>конвектором:
<a href="http://www.freefontconverter.com/" target="_blank">freefontconverter.com</a>.<br />
<br />
<div class="MsoNormal">
Создадим макет с набором <span lang="EN-US" style="mso-ansi-language: EN-US;">TextView</span>, над которыми будем экспериментировать:</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:orientation</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"vertical"</span></i> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">TextView</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/txt_font_1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_weight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:gravity</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"center"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:text</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/txt_font_1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:textSize</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"20sp"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">TextView</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/txt_font_2"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_weight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:gravity</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"center"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:text</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/txt_font_2"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:textSize</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"20sp"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">TextView</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/txt_font_3"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_weight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:gravity</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"center"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:text</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/txt_font_3"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">android:textSize</span><span style="color: black; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">=</span><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">"20sp"</span></i><span style="font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">LinearLayout</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
В строковые ресурсы надо добавить следующие строки:</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="color: black; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"txt_font_1"</span></i><span style="color: teal;">></span><span style="color: black;">Font Example 1</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"txt_font_2"</span></i><span style="color: teal;">></span><span style="color: black;">Font Example 2</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"txt_font_3"</span></i><span style="color: teal;">></span><span style="color: black;">Font Example 3</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal">
Создадим новый класс <span style="color: black; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">FontSystem.</span></div>
<div class="MsoNormal">
Добавим ему статические атрибуты, количество которых равно
количеству наших шрифтов:</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<pre class="brush: java">public static final int TYPE_FONT_1 = 1;
public static final int TYPE_FONT_2 = 2;
public static final int TYPE_FONT_3 = 3;</pre>
</div>
<div class="MsoNormal">
И добавим метод, который будет устанавливать нужный шрифт в
нужное <span lang="EN-US" style="mso-ansi-language: EN-US;">View</span>:</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<pre class="brush: java">public static void setTypeface(View v, int type, Context context)
{
if (v == null)
return;
Typeface tf = null;
try
{
switch (type)
{
case TYPE_FONT_1:
tf = Typeface.createFromAsset(context.getAssets(),"fonts/font1.otf");
break;
case TYPE_FONT_2:
tf = Typeface.createFromAsset(context.getAssets(),"fonts/font2.otf");
break;
case TYPE_FONT_3:
tf = Typeface.createFromAsset(context.getAssets(),"fonts/font3.otf");
break;
}
if (v instanceof TextView)
((TextView)v).setTypeface(tf);
}catch (Exception e) {
e.printStackTrace();
}
}</pre>
</div>
<div class="MsoNormal">
В основном <span lang="EN-US" style="mso-ansi-language: EN-US;">Activity</span><span lang="EN-US"> </span>установим шрифты в наши <span lang="EN-US" style="mso-ansi-language: EN-US;">TextView</span>:</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<pre class="brush: java">@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
FontSystem.setTypeface(findViewById(R.id.txt_font_1), FontSystem.TYPE_FONT_1, this);
FontSystem.setTypeface(findViewById(R.id.txt_font_2), FontSystem.TYPE_FONT_2, this);
FontSystem.setTypeface(findViewById(R.id.txt_font_3), FontSystem.TYPE_FONT_3, this);
}</pre>
</div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;"><br /></b></div>
<h3>
<b style="mso-bidi-font-weight: normal;">Ссылки</b><b style="mso-bidi-font-weight: normal;"><span style="mso-ansi-language: EN-US;"> </span>по</b><b style="mso-bidi-font-weight: normal;"><span style="mso-ansi-language: EN-US;"> </span>теме</b></h3>
<ul>
<li class="MsoNormal">Исходные коды данного проекта можно скачать отсюда: <span lang="EN-US" style="mso-ansi-language: EN-US;"><a href="http://www.snowpard.org/examples/article_b11/FontExample.zip">zip</a></span></li>
</ul>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-71652134224709726762013-01-03T20:48:00.001+04:002013-01-03T20:48:57.636+04:00Ориентация приложения<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-EcuwCF_r5h0/UH2p2hJqBoI/AAAAAAAAAXo/fk2239rJthQ/s1600/icon.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-EcuwCF_r5h0/UH2p2hJqBoI/AAAAAAAAAXo/fk2239rJthQ/s1600/icon.png" /></a></div>
<div class="MsoNormal">
В этой статье мы рассмотрим, как разрабатывать приложения для
разных ориентаций устройства. Также я покажу один из простых способов
определения типа устройства: планшет или смартфон.</div>
<div class="MsoNormal">
<br />
<br /></div>
<div class="MsoNormal">
</div>
<a name='more'></a>Создадим новый проект. Добавим в строковые ресурсы следующие
строки:<br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none; text-indent: 35.4pt;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"txt_portrait"</span></i><span style="color: teal;">></span><span style="color: black;">PORTRAIT</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-tab-count: 1;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">string</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"txt_landscape"</span></i><span style="color: teal;">></span><span style="color: black;">LANDSCAPE</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">string</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="mso-ansi-language: EN-US;">Xml</span>-файл
для нашего <span lang="EN-US" style="mso-ansi-language: EN-US;">Activity</span><span lang="EN-US"> </span>выглядит следующим образом:</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">RelativeLayout</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"match_parent"</span></i> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">TextView</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_centerHorizontal</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"true"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_centerVertical</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"true"</span></i>
</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:text</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/txt_portrait"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-fareast-language: RU;">/></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">RelativeLayout</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
При запуске приложения мы увидим, что отображается макет для
портретной ориентации. Поворачивая устройство, приложение будет менять
интерфейс, подстраиваясь под текущую ориентацию девайса. Если добавить в метод <span lang="EN-US" style="mso-ansi-language: EN-US;">onCreate</span><span lang="EN-US"> </span>для
текущего <span lang="EN-US" style="mso-ansi-language: EN-US;">Activity</span><span lang="EN-US"> </span>информационный лог, то мы увидим, что при смене ориентации
наше <span lang="EN-US" style="mso-ansi-language: EN-US;">Activity</span><span lang="EN-US"> </span>перезапускается.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Для разделения макетов на портретный и ландшафтный
интерфейс, добавим папку layout-land в ресурсы. «-<span lang="EN-US" style="mso-ansi-language: EN-US;">land</span>» показывает, что данные ресурсы
будут использоваться только при ландшафтной ориентации.</div>
<div class="MsoNormal">
Скопируем файл макета из папки <span lang="EN-US" style="mso-ansi-language: EN-US;">layout</span><span lang="EN-US"> </span>в layout-land
и заменим выводимый текст для <span lang="EN-US" style="mso-ansi-language: EN-US;">TextView</span><span lang="EN-US"> </span>на <span style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">android:text</span><span style="color: black; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">=</span><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">"@string/txt_landscape".</span></i></div>
<div class="MsoNormal">
После запуска приложения мы увидим, что приложение использует
нужные макеты для соответствующих ориентаций.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Осталось запретить приложению постоянно перезапускать <span lang="EN-US" style="mso-ansi-language: EN-US;">Activity</span><span lang="EN-US"> </span>при
каждой смене ориентации.</div>
<div class="MsoNormal">
Для этого необходимо добавить в манифесте следующую строчку
для текущего <span lang="EN-US" style="mso-ansi-language: EN-US;">Activity</span>: <span style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">android:configChanges</span><span style="color: black; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">=</span><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">"orientation|screenSize".</span></i></div>
<div class="MsoNormal">
Манифест<span lang="EN-US" style="mso-ansi-language: EN-US;">:</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">manifest</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">package</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"org.snowpard.projects.ten"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:versionCode</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:versionName</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">uses-sdk</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:minSdkVersion</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"8"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:targetSdkVersion</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"16"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">application</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:allowBackup</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"true"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:icon</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/icon"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:label</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/app_name"</span></i> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">activity</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"org.snowpard.projects.ten.MainActivity"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:label</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/app_name"</span></i> </span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:configChanges</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"orientation|screenSize"</span></i><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;">
</span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">intent-filter</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;">
</span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">action</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"android.intent.action.MAIN"
</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;">
</span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">category</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"android.intent.category.LAUNCHER"
</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;">
</span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">intent-filter</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">activity</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">application</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">manifest</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
И переопределить в <span lang="EN-US" style="mso-ansi-language: EN-US;">Activity</span><span lang="EN-US"> </span>метод onConfigurationChanged()
следующим образом:</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<pre class="brush: java">@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.main);
}</pre>
<span lang="EN-US" style="color: #646464; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></span></div>
<div class="MsoNormal">
Теперь после смены ориентации у нас используется нужный
макет и не перезапускается <span lang="EN-US" style="mso-ansi-language: EN-US;">Activity</span>.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Бывают случаи, когда необходимо сделать приложение, которое
на смартфонах работает только в портретном режиме, а на планшетах в обеих
ориентациях.</div>
<div class="MsoNormal">
Это реализуется в 2 шага:</div>
<div class="MsoNormal">
1. Необходимо определить тип устройства: смартфон или
планшет.</div>
<div class="MsoNormal">
2. Не позволять смартфонам менять ориентацию приложения.</div>
<div class="MsoNormal">
Чтобы определить тип устройства, мы поступим следующим
образом. Необходимо создать в <span lang="EN-US" style="mso-ansi-language: EN-US;">res</span>/<span lang="EN-US" style="mso-ansi-language: EN-US;">values</span><span lang="EN-US"> </span>файл
<span lang="EN-US" style="mso-ansi-language: EN-US;">defaults</span>.<span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span>.</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">resources</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span><span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">bool</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"isTablet"</span></i><span style="color: teal;">></span><span style="color: black;">false</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">bool</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">resources</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
Затем создадим папки: values-large (для 7” планшетов) и values-xlarge
(для 10” планшетов). Скопируем файл <span lang="EN-US" style="mso-ansi-language: EN-US;">defaults</span>.<span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span><span lang="EN-US"> </span>в созданные папки и заменим значение переменной<i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"> </span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">isTablet</span></i><span lang="EN-US"> </span>на <span lang="EN-US" style="mso-ansi-language: EN-US;">true</span>.</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">resources</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span><span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">bool</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"isTablet"</span></i><span style="color: teal;">></span><span style="color: black;">true</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">bool</span><span style="color: teal;">></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">resources</span><span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal">
В<span style="mso-ansi-language: EN-US;"> </span>нашем<span style="mso-ansi-language: EN-US;"> <span lang="EN-US">Activity </span></span>добавим<span style="mso-ansi-language: EN-US;"> </span>атрибут<span lang="EN-US" style="mso-ansi-language: EN-US;">:</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<pre class="brush: java">private boolean isTablet;</pre>
</div>
<div class="MsoNormal">
В методе <span lang="EN-US" style="mso-ansi-language: EN-US;">onCreate</span><span lang="EN-US"> </span>получим значение из ресурсов:</div>
<div class="MsoNormal">
<pre class="brush: java">this.isTablet = getResources().getBoolean(R.bool.isTablet);</pre>
<b><span lang="EN-US" style="color: #7f0055; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"></span></b></div>
<div class="MsoNormal">
Создадим новый метод, который будет определять, нужно ли
менять ориентацию для приложения или нет:</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<pre class="brush: java">private void wasPortrait()
{
if (!this.isTablet)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
else
setContentView(R.layout.main);
}</pre>
<b><span lang="EN-US" style="color: #7f0055; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></span></b></div>
<div class="MsoNormal">
Метод setRequestedOrientation() устанавливает желаемую
ориентацию (в данном случае портретную). </div>
<div class="MsoNormal">
Добавим вызов метода wasPortrait() в конец метода onCreate()
и в метод onConfigurationChanged().</div>
<div class="MsoNormal">
Полный<span style="mso-ansi-language: EN-US;"> </span>листинг<span style="mso-ansi-language: EN-US;"> </span>программы<span lang="EN-US" style="mso-ansi-language: EN-US;">:</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<pre class="brush: java">public class MainActivity extends Activity {
private boolean isTablet;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.e("MainActivity", "onCreate");
this.isTablet = getResources().getBoolean(R.bool.isTablet);
wasPortrait();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
wasPortrait();
}
private void wasPortrait()
{
if (!this.isTablet)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
else
setContentView(R.layout.main);
}
}</pre>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-WQuP6zFuAGs/UOW1kcCwUBI/AAAAAAAAAYY/Lj6ADnuK0DU/s1600/portland.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://1.bp.blogspot.com/-WQuP6zFuAGs/UOW1kcCwUBI/AAAAAAAAAYY/Lj6ADnuK0DU/s320/portland.png" width="296" /></a></div>
<div class="MsoNormal">
<span style="color: black; font-family: Consolas; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"><br /></span></div>
<br />
<h3>
<b style="mso-bidi-font-weight: normal;">Ссылки по теме</b></h3>
<br />
<ul>
<li class="MsoNormal">Исходные коды данного проекта можно скачать отсюда: <span lang="EN-US" style="mso-ansi-language: EN-US;"><a href="http://www.snowpard.org/examples/article_b10/PortLandExample.zip">zip</a></span></li>
</ul>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-90820340500531314932012-10-16T22:41:00.000+04:002012-10-16T22:42:39.350+04:00Кастомизация интерфейса: CheckBox и RadioButton<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-EcuwCF_r5h0/UH2p2hJqBoI/AAAAAAAAAXo/fk2239rJthQ/s1600/icon.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="Кастомизация интерфейса: CheckBox и RadioButton" border="0" src="http://4.bp.blogspot.com/-EcuwCF_r5h0/UH2p2hJqBoI/AAAAAAAAAXo/fk2239rJthQ/s1600/icon.png" title="Кастомизация интерфейса: CheckBox и RadioButton" /></a></div>
В этой статье рассмотрим как можно кастомизировать такие
элементы управления, как <span lang="EN-US" style="mso-ansi-language: EN-US;">CheckBox</span><span lang="EN-US"> </span>и <span lang="EN-US" style="mso-ansi-language: EN-US;">RadioButton</span>.
Отличия от обычных кнопок в том, что они имеют два состояния: <span lang="EN-US" style="mso-ansi-language: EN-US;">check</span><span lang="EN-US"> </span>и <span lang="EN-US" style="mso-ansi-language: EN-US;">uncheck</span>.<br />
<br />
<a name='more'></a><b style="mso-bidi-font-weight: normal;"><br /></b>
<br />
<h3>
<b style="mso-bidi-font-weight: normal;">Что<span style="mso-spacerun: yes;"> </span>используется</b></h3>
Для наших целей используются виджеты <span lang="EN-US" style="mso-ansi-language: EN-US;">CheckBox</span><span lang="EN-US"> </span>и <span lang="EN-US" style="mso-ansi-language: EN-US;">RadioButton</span>. Основное
свойство для кастомизации в <span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span><span lang="EN-US"> </span>при создании этих виджетов для изменения внешнего вида:<br />
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<ul>
<li><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android</span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">:</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">button</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"> </span>–
изображение кнопки элемента.<span style="mso-tab-count: 1;"> </span></li>
</ul>
</div>
<div class="MsoNormal" style="text-align: justify;">
Чтобы кастомизировать полностью поведение элементов
необходимо использовать <span lang="EN-US" style="mso-ansi-language: EN-US;">selector</span>.
Это <span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span>-файл, который
указывает, какое изображение использовать для разных состояний элемента.</div>
<div class="MsoNormal" style="text-align: justify;">
Для примера, используем следующие элементы</div>
<div class="MsoNormal" style="text-align: justify;">
<ul>
<li>для <span lang="EN-US" style="mso-ansi-language: EN-US;">CheckBox</span>
(<a href="http://www.snowpard.org/examples/article_b9/checkbox_images.zip">скачать</a> архивом):</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-3An9meatGbM/UH2pdbNWsvI/AAAAAAAAAWo/kln1kRLItK8/s1600/checkbox_off.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-3An9meatGbM/UH2pdbNWsvI/AAAAAAAAAWo/kln1kRLItK8/s1600/checkbox_off.png" /></a><a href="http://2.bp.blogspot.com/-m74g5XjsDqg/UH2peeEXKrI/AAAAAAAAAWs/09wxeOVutm4/s1600/checkbox_off_disable.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-m74g5XjsDqg/UH2peeEXKrI/AAAAAAAAAWs/09wxeOVutm4/s1600/checkbox_off_disable.png" /></a><a href="http://1.bp.blogspot.com/-rF1A5nU-Jb0/UH2pfESaziI/AAAAAAAAAW4/lwDGjRrAxYc/s1600/checkbox_on.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-rF1A5nU-Jb0/UH2pfESaziI/AAAAAAAAAW4/lwDGjRrAxYc/s1600/checkbox_on.png" /></a><a href="http://1.bp.blogspot.com/-NM2NDCkOzEk/UH2pgsDoECI/AAAAAAAAAXA/jN88JxLJZp4/s1600/checkbox_on_disable.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-NM2NDCkOzEk/UH2pgsDoECI/AAAAAAAAAXA/jN88JxLJZp4/s1600/checkbox_on_disable.png" /></a></div>
<ul>
<li>для <span lang="EN-US" style="mso-ansi-language: EN-US;">RadioButton</span>
(<a href="http://www.snowpard.org/examples/article_b9/radio_button_images.zip">скачать</a> архивом):</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-2uRu3A0L1wE/UH2pnU3ODyI/AAAAAAAAAXI/buzcNdBu4FQ/s1600/radio_button_off.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-2uRu3A0L1wE/UH2pnU3ODyI/AAAAAAAAAXI/buzcNdBu4FQ/s1600/radio_button_off.png" /></a><a href="http://1.bp.blogspot.com/-_RHyL_Eb8ls/UH2poGaXW3I/AAAAAAAAAXM/QBR7VwT88QM/s1600/radio_button_off_disable.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-_RHyL_Eb8ls/UH2poGaXW3I/AAAAAAAAAXM/QBR7VwT88QM/s1600/radio_button_off_disable.png" /></a><a href="http://1.bp.blogspot.com/-HVF1-aiyXjU/UH2pozSRvrI/AAAAAAAAAXU/EQXRQ9DfaUM/s1600/radio_button_on.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-HVF1-aiyXjU/UH2pozSRvrI/AAAAAAAAAXU/EQXRQ9DfaUM/s1600/radio_button_on.png" /></a><a href="http://2.bp.blogspot.com/-nrJrmMA4BK4/UH2pptfT6UI/AAAAAAAAAXg/zNcjH8iSjWs/s1600/radio_button_on_disable.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-nrJrmMA4BK4/UH2pptfT6UI/AAAAAAAAAXg/zNcjH8iSjWs/s1600/radio_button_on_disable.png" /></a></div>
Наш селектор будет выглядеть следующим образом (drawable/<span lang="EN-US" style="mso-ansi-language: EN-US;">custom</span>_<span lang="EN-US" style="mso-ansi-language: EN-US;">checkbox</span>_<span lang="EN-US" style="mso-ansi-language: EN-US;">selector</span>.xml):</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><?</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">xml</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">version</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i> <span style="color: #7f007f;">encoding</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"utf-8"</span></i><span style="color: teal;">?></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">selector</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">item</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:drawable</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/checkbox_on"</span></i>
</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; margin-left: 35.4pt; margin-right: 0cm; margin-top: 0cm; text-align: justify; text-indent: 35.4pt;">
<span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android:state_checked</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">=</span><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">"true"</span></i><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:state_enabled</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"true"</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">item</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:drawable</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/checkbox_off"</span></i>
</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; margin-left: 35.4pt; margin-right: 0cm; margin-top: 0cm; text-align: justify; text-indent: 35.4pt;">
<span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android:state_checked</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">=</span><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">"false"</span></i><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:state_enabled</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"true"</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">item</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:drawable</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/checkbox_on_disable"</span></i>
</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; margin-left: 35.4pt; margin-right: 0cm; margin-top: 0cm; text-align: justify; text-indent: 35.4pt;">
<span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android:state_checked</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">=</span><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">"true"</span></i><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:state_enabled</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"false"</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">item</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:drawable</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/checkbox_off_disable"</span></i>
</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; margin-left: 35.4pt; margin-right: 0cm; margin-top: 0cm; text-align: justify; text-indent: 35.4pt;">
<span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android:state_checked</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">=</span><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">"false"</span></i><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:state_enabled</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"false"</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">item</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:drawable</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/checkbox_off"</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="text-align: justify;">
<span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">selector</span><span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US" style="mso-ansi-language: EN-US;">- </span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">android:state_checked</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"> =</span><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">"true|false"</span></i><span lang="EN-US" style="mso-ansi-language: EN-US;"> </span>указывает<span style="mso-ansi-language: EN-US;"> </span>на<span style="mso-ansi-language: EN-US;">
</span>состояние<span style="mso-ansi-language: EN-US;"> </span>элемента<span lang="EN-US" style="mso-ansi-language: EN-US;">: check </span>или<span style="mso-ansi-language: EN-US;"> <span lang="EN-US">uncheck; </span></span></div>
<div class="MsoNormal" style="text-align: justify;">
Остальные атрибуты были описаны в этой <a href="http://snowpard-android-ru.blogspot.com/2012/10/button-imageview.html" target="_blank">статье</a>.</div>
<div class="MsoNormal" style="text-align: justify;">
Селектор<span style="mso-ansi-language: EN-US;"> </span>для<span style="mso-ansi-language: EN-US;"> <span lang="EN-US">RadioButton </span></span>будет<span style="mso-ansi-language: EN-US;"> </span>следующим<span lang="EN-US" style="mso-ansi-language: EN-US;"> (drawable/custom_radio_selector.xml):</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><?</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">xml</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">version</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i> <span style="color: #7f007f;">encoding</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"utf-8"</span></i><span style="color: teal;">?></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">selector</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">item</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:drawable</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/radio_button_on_disable"</span></i>
</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; margin-left: 35.4pt; margin-right: 0cm; margin-top: 0cm; text-align: justify; text-indent: 35.4pt;">
<span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android:state_checked</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">=</span><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">"true"</span></i><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:state_enabled</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"false"</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">item</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:drawable</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/radio_button_off_disable"</span></i>
</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; margin-left: 35.4pt; margin-right: 0cm; margin-top: 0cm; text-align: justify; text-indent: 35.4pt;">
<span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android:state_checked</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">=</span><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">"false"</span></i><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:state_enabled</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"false"</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">item</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:drawable</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/radio_button_on"</span></i>
</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; margin-left: 35.4pt; margin-right: 0cm; margin-top: 0cm; text-align: justify; text-indent: 35.4pt;">
<span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android:state_checked</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">=</span><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">"true"</span></i><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:state_enabled</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"true"</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">item</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:drawable</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/radio_button_off"</span></i>
</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; margin-left: 35.4pt; margin-right: 0cm; margin-top: 0cm; text-align: justify; text-indent: 35.4pt;">
<span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android:state_checked</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">=</span><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">"false"</span></i><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:state_enabled</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"true"</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">selector</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span><br />
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"><br /></span></div>
<h3>
<b style="mso-bidi-font-weight: normal;">Практика</b></h3>
<div class="MsoNormal" style="text-align: justify;">
Теперь нам необходимо создать наш интерфейс. Мы будем
изменять файл <span lang="EN-US" style="mso-ansi-language: EN-US;">main</span>.<span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span>. Чтобы добавить селектор
к элементу, достоточно использовать следующую конструкцию:</div>
<div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">android</span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">:</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">button</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">=</span><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">"@</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">drawable</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">/</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">custom</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">_</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">checkbox</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">_</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">selector</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">"</span></i></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><?</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">xml</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">version</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i> <span style="color: #7f007f;">encoding</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"utf-8"</span></i><span style="color: teal;">?></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:orientation</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"vertical"</span></i> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><CheckBox</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/checkbox_1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:button</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/custom_checkbox_selector"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:checked</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"false"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:text</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/check_1"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><CheckBox</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/checkbox_2"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:button</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/custom_checkbox_selector"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">android:checked</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">=</span><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">"false"</span></i></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:enabled</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"false"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:text</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/check_2"
</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">RadioGroup</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/radioGroup"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">RadioButton</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/radio_1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_weight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:button</span><i><span style="color: #2a00ff;">="@drawable/custom_radio_selector"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:checked</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"true"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:text</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/radio_1"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">RadioButton</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/radio_2"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_weight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:button</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/custom_radio_selector"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:checked</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"false"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:text</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/radio_2"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">RadioButton</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/radio_3"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_weight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:button</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/custom_radio_selector"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:checked</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"false"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:enabled</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"false"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:text</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/radio_3"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">RadioGroup</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="text-align: justify;">
<span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">LinearLayout</span><span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US"><span style="mso-spacerun: yes;"> </span></span>Теперь
нам необходимо добавить поведение для каждой кнопки в программе. В этом примере
создаются следующие элементы: 2 <span lang="EN-US" style="mso-ansi-language: EN-US;">CheckBox</span>,
1 <span lang="EN-US" style="mso-ansi-language: EN-US;">RadioGroup</span>, который
содержит 3 RadioButton.</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<pre class="brush: java">
public class CustomCheckExampleActivity extends Activity implements RadioGroup.OnCheckedChangeListener,
View.OnClickListener{
private CheckBox check_1, check_2;
private RadioGroup radioGroup;
private Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.context = this;
this.check_1 = (CheckBox)findViewById(R.id.checkbox_1);
this.check_2 = (CheckBox)findViewById(R.id.checkbox_2);
this.radioGroup = (RadioGroup)findViewById(R.id.radioGroup);
this.check_1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
check_2.setEnabled(isChecked);
}
});
this.check_2.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
RadioButton btn = (RadioButton)radioGroup.getChildAt(radioGroup.getChildCount() - 1);
btn.setEnabled(isChecked);
}
});
}
@Override
public void onClick(View arg0) {
radioGroup.clearCheck();
}
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
Toast.makeText(context, "" + group.getCheckedRadioButtonId(), Toast.LENGTH_SHORT).show();
}
}</pre>
</div>
<div class="MsoNormal" style="text-align: justify;">
<span style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"><br /></span></div>
<br />
<h3>
<b style="mso-bidi-font-weight: normal;">Ссылки</b></h3>
<br />
<ul>
<li class="MsoNormal" style="text-align: justify;">Исходные коды данного проекта можно скачать отсюда: <span lang="EN-US" style="mso-ansi-language: EN-US;"><a href="http://www.snowpard.org/examples/article_b9/CustomCheckExample.zip">zip</a></span></li>
</ul>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-2965910321895182222012-10-10T22:48:00.000+04:002012-10-10T22:48:27.339+04:00Кастомизация интерфейса: Button и ImageView<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-m8H9sTR1Bhw/UHXCg_6y0tI/AAAAAAAAAU4/4l0Rgm7a-H0/s1600/icon.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-m8H9sTR1Bhw/UHXCg_6y0tI/AAAAAAAAAU4/4l0Rgm7a-H0/s1600/icon.png" /></a></div>
С этой статьи начинается цикл статей по кастомизации
интерфейса приложения под <span lang="EN-US" style="mso-ansi-language: EN-US;">Android</span>.
Сегодня поговорим, как можно изменить внешний вид кнопок и использовать <span lang="EN-US" style="mso-ansi-language: EN-US;">ImageView</span><span lang="EN-US"> </span>в
качестве кнопки.<br />
<br />
<br />
<a name='more'></a><br />
<h3>
<b style="mso-bidi-font-weight: normal;">Что<span style="mso-spacerun: yes;"> </span>используется</b></h3>
<div class="MsoNormal" style="text-align: justify;">
В качестве кнопок мы будем использовать виджеты <span lang="EN-US" style="mso-ansi-language: EN-US;">Button</span><span lang="EN-US"> </span>и
<span lang="EN-US" style="mso-ansi-language: EN-US;">ImageView</span>. Основное
свойство для кастомизации в <span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span><span lang="EN-US"> </span>при создании этих виджетов для изменения внешнего вида:</div>
<ul>
<li><div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
для <span lang="EN-US" style="mso-ansi-language: EN-US;">Button</span>:
<span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android</span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">:</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">background</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"> </span>– фоновое изображение кнопки</div>
</li>
<li><div class="MsoNormal" style="text-align: justify;">
для <span lang="EN-US" style="mso-ansi-language: EN-US;">ImageView</span>: </div>
</li>
</ul>
<div class="MsoNormal" style="margin-left: 35.4pt; text-align: justify; text-indent: 35.4pt;">
- <span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">android</span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">:</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">background</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"> </span>– фоновое изображение кнопки;</div>
<div class="MsoNormal" style="margin-left: 70.8pt; text-align: justify;">
- <span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">android</span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">:</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">src</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"> </span>– изображение для переднего плана элемента. </div>
<div class="MsoNormal" style="text-align: justify;">
Чтобы кастомизировать полностью поведение элементов
необходимо использовать <span lang="EN-US" style="mso-ansi-language: EN-US;">selector</span>.
Это <span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span>-файл, который
указывает, какое изображение использовать для разных состояний элемента.</div>
<div class="MsoNormal" style="text-align: justify;">
Для <span lang="EN-US" style="mso-ansi-language: EN-US;">Button</span><span lang="EN-US"> </span>мы используем <span lang="EN-US" style="mso-ansi-language: EN-US;">Nine</span>-<span lang="EN-US" style="mso-ansi-language: EN-US;">Patch</span><span lang="EN-US"> </span>изображения, которые были созданы в этой <a href="http://snowpard-android-ru.blogspot.com/2012/10/nine-patch.html" target="_blank">статье</a>. </div>
<div class="MsoNormal" style="text-align: justify;">
Для примера, используем </div>
<ul>
<li><div class="MsoNormal" style="text-align: justify;">
ex4_2.9.<span lang="EN-US" style="mso-ansi-language: EN-US;">png</span><span lang="EN-US"> </span>для нормального состояния кнопки (переименуем в <span lang="EN-US" style="mso-ansi-language: EN-US;">btn</span>_<span lang="EN-US" style="mso-ansi-language: EN-US;">normal</span>.9.<span lang="EN-US" style="mso-ansi-language: EN-US;">png</span>);</div>
</li>
<li><div class="MsoNormal" style="text-align: justify;">
ex4_3.9.<span lang="EN-US" style="mso-ansi-language: EN-US;">png</span><span lang="EN-US"> </span>для нажатой кнопки (переименуем в <span lang="EN-US" style="mso-ansi-language: EN-US;">btn</span>_<span lang="EN-US" style="mso-ansi-language: EN-US;">pressed</span>.9.<span lang="EN-US" style="mso-ansi-language: EN-US;">png</span>);</div>
</li>
<li><div class="MsoNormal" style="text-align: justify;">
ex4_4.9.<span lang="EN-US" style="mso-ansi-language: EN-US;">png</span><span lang="EN-US"> </span>для неактивной кнопки (переименуем в <span lang="EN-US" style="mso-ansi-language: EN-US;">btn</span>_<span lang="EN-US" style="mso-ansi-language: EN-US;">disable</span>.9.<span lang="EN-US" style="mso-ansi-language: EN-US;">png</span>).</div>
</li>
</ul>
<div class="MsoNormal" style="text-align: justify;">
Наш селектор будет выглядеть следующим образом (drawable/btn_selector.xml):</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><?</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">xml</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">version</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i> <span style="color: #7f007f;">encoding</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"utf-8"</span></i><span style="color: teal;">?></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">selector</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify; text-indent: 35.4pt;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">item</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:state_pressed</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"true"</span></i>
</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; margin-left: 35.4pt; margin-right: 0cm; margin-top: 0cm; text-align: justify; text-indent: 35.4pt;">
<span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android:drawable</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">=</span><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">"@drawable/btn_pressed"</span></i><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-tab-count: 1;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">item</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:state_enabled</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"true"</span></i>
</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span style="font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"><span style="mso-tab-count: 2;"> </span></span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android</span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">:</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">drawable</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">=</span><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">"@</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">drawable</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">/</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">btn</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">_</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">normal</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">"</span></i><span style="font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"><span style="mso-tab-count: 1;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">item</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:state_enabled</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"false"</span></i>
</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span style="font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"><span style="mso-tab-count: 2;"> </span></span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android:drawable</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">=</span><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">"@drawable/btn_disable"</span></i><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">selector</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<ul>
<li><div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">android</span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">:</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">state</span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">_</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">pressed</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">=</span><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">"</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">true</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">|</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">false</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">"</span></i> указывает на нажатое или нормальное состояние кнопки; </div>
</li>
<li><div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">android</span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">:</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">state</span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">_</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">enabled</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">=</span><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">"</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">true</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">|</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">false</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">"</span></i> указывает на активное или неактивное состояние кнопки.</div>
</li>
</ul>
<div class="MsoNormal" style="text-align: justify;">
Атрибут <span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">android</span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">:</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">drawable</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"> </span>используется для установки конкретного
изображения для выбранного состояния элемента.</div>
<div class="MsoNormal" style="text-align: justify;">
Создадим теперь селектор для <span lang="EN-US" style="mso-ansi-language: EN-US;">ImageView</span>. Для этого элемента мы будем
использовать только два состояния: нормальное и нажатое, и изображения возьмем
обычные, а не <span lang="EN-US" style="mso-ansi-language: EN-US;">Nine</span>-<span lang="EN-US" style="mso-ansi-language: EN-US;">Patch</span>.</div>
<div class="MsoNormal" style="text-align: justify;">
В этой <a href="http://snowpard-android-ru.blogspot.com/2012/10/blog-post.html" target="_blank">статье</a> рассказывалось, как оптимизировать такие
изображения для разных разрешений экрана.</div>
<div class="MsoNormal" style="text-align: justify;">
Селектор для <span lang="EN-US" style="mso-ansi-language: EN-US;">ImageView</span><span lang="EN-US"> </span>будет следующим (drawable/img_selector.xml):</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><?</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">xml</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">version</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i> <span style="color: #7f007f;">encoding</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"utf-8"</span></i><span style="color: teal;">?></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">selector</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i><span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-tab-count: 1;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">item</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:state_pressed</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"true"</span></i>
</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; margin-left: 35.4pt; margin-right: 0cm; margin-top: 0cm; text-align: justify; text-indent: 35.4pt;">
<span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android</span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">:</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">drawable</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">=</span><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">"@</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">drawable</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">/</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">img</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">_</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">pressed</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">"</span></i><span style="font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"><span style="mso-tab-count: 1;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">item</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:state_enabled</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"true"</span></i>
</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; margin-left: 35.4pt; margin-right: 0cm; margin-top: 0cm; text-align: justify; text-indent: 35.4pt;">
<span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android:drawable</span><span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">=</span><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">"@drawable/img_normal"</span></i><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">selector</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="text-align: justify;">
<br /></div>
<h3>
<b style="mso-bidi-font-weight: normal;">Практика</b></h3>
<div class="MsoNormal" style="text-align: justify;">
Теперь нам необходимо создать наш интерфейс. Мы будем
изменять файл <span lang="EN-US" style="mso-ansi-language: EN-US;">main</span>.<span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span>. Чтобы добавить селектор
к элементу, достоточно использовать следующую конструкцию:</div>
<div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">android</span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">:</span><span lang="EN-US" style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">background</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">=</span><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">"@</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">drawable</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">/</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">btn</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">_</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">selector</span></i><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">"</span></i></div>
<div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US" style="mso-ansi-language: EN-US;">btn</span>_<span lang="EN-US" style="mso-ansi-language: EN-US;">selector</span> – это название <span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span>-файла нашего селектора. </div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><?</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">xml</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">version</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1.0"</span></i> <span style="color: #7f007f;">encoding</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"utf-8"</span></i><span style="color: teal;">?></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">android:orientation</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">=</span><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">"vertical"</span></i><span style="font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:orientation</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"horizontal"</span></i> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">Button</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/btn_1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_weight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:background</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/btn_selector"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:text</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/btn_1"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">Button</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/btn_2"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_weight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:background</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/btn_selector"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:enabled</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"false"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:text</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/btn_2"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">Button</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/btn_3"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:background</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/btn_selector"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:text</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/btn_3"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">ImageButton</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/img"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"100dp"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"100dp"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:background</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@drawable/img_selector"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:scaleType</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fitXY"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:visibility</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"invisible"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="text-align: justify;">
<span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">LinearLayout</span><span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-fareast-language: RU;">></span> </div>
<div class="MsoNormal" style="text-align: justify;">
Теперь нам необходимо добавить поведение для каждой кнопки в
программе. В этом примере создается 4 элемента: 2 кнопки шириной на полэкрана,
1 кнопка шириной на весь экран и изображение размером 100 <span lang="EN-US" style="mso-ansi-language: EN-US;">dp</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">x</span><span lang="EN-US"> </span>100
<span lang="EN-US" style="mso-ansi-language: EN-US;">dp</span>.</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<pre class="brush: java">
public class CustomButtonExampleActivity extends Activity{
private Button btn_1, btn_2, btn_3;
private ImageView img;
private Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.btn_1 = (Button)findViewById(R.id.btn_1);
this.btn_2 = (Button)findViewById(R.id.btn_2);
this.btn_3 = (Button)findViewById(R.id.btn_3);
this.img = (ImageView)findViewById(R.id.img);
this.context = this;
this.btn_1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
btn_2.setEnabled(true);
v.setEnabled(false);
}
});
this.btn_2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
btn_1.setEnabled(true);
v.setEnabled(false);
}
});
this.btn_3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
img.setVisibility((img.isShown()) ? View.INVISIBLE : View.VISIBLE);
}
});
this.img.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "Click", Toast.LENGTH_SHORT).show();
}
});
}
</pre>
</div>
<div class="MsoNormal" style="text-align: justify;">
<br /></div>
<h3>
<b style="mso-bidi-font-weight: normal;">Ссылки</b></h3>
<div class="MsoNormal" style="text-align: justify;">
<ul>
<li>Исходные коды данного проекта можно скачать отсюда: <span lang="EN-US" style="mso-ansi-language: EN-US;"><a href="http://snowpard.org/examples/article_b8/CustomButtonExample.zip">zip</a></span></li>
</ul>
</div>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-40698660114071388212012-10-06T22:24:00.000+04:002012-10-06T22:25:36.305+04:00Nine-patch изображенияПри разработке <span lang="EN-US" style="mso-ansi-language: EN-US;">UI</span> интерфейса приложения, часто мы сталкиваемся с необходимостью
растягивания изображения в связи с разными размерами <span lang="EN-US" style="mso-ansi-language: EN-US;">Android</span>-устройств. Многие изображения
могут быть с закругленными краями или со сложным рисунком, которые при
увеличении дают разные артефакты в виде шумов или размытости. Этого можно
избежать, используя <span lang="EN-US" style="mso-ansi-language: EN-US;">Nine</span>-<span lang="EN-US" style="mso-ansi-language: EN-US;">patch</span><span lang="EN-US"> </span>изображения<br />
<div class="MsoNormal" style="text-align: justify;">
<br /></div>
<a name='more'></a><h3>
<b style="mso-bidi-font-weight: normal;">Теория</b></h3>
<div>
<div class="MsoNormal" style="text-align: justify;">
Такие изображения представляются классом NinePatch. Он позволяет
рисовать растровые изображения в девять частей. Четыре угла не масштабируются;
четыре ребра масштабируется по одной оси, а середина масштабируется по обеим
осям. Как правило, среднина является прозрачной. По сути, это позволяет
создавать пользовательскую графику, которая будет масштабироваться так, как вы
установите. </div>
<div class="MsoNormal" style="text-align: justify;">
С точки зрения изображений, Nine-path – это обычное
изображение (.png), в котором края размером в 1 пиксел содержат служебную
информацию для графической подсистемы Android.</div>
<div>
Она разделяется на две части: </div>
<ul>
<li><div class="MsoNormal" style="text-align: justify;">
информация для корректного масштабирования блока;</div>
</li>
<li><div class="MsoNormal" style="text-align: justify;">
информация об области размещения контента в блоке. </div>
</li>
</ul>
<div class="MsoNormal" style="text-align: justify;">
При отсутствии первой – изображение будет масштабироваться
целиком, второй – контент будет размещаться по всей площади изображения.</div>
<div class="MsoNormal" style="text-align: justify;">
Верхняя и левая часть рамки задают масштабируемые области,
правая и нижняя – область отображения контента. При этом прозрачные пикселы
обозначают неотмеченную область, а черные – отмеченную.</div>
<div class="MsoNormal" style="text-align: justify;">
</div>
</div>
<h3>
<b style="mso-bidi-font-weight: normal;">Создание</b></h3>
<br />
<div class="MsoNormal" style="text-align: justify;">
Создание таких изображений рассмотрим на примере такого изображения:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-65QDSYBR8gs/UHB2cCyMmEI/AAAAAAAAASQ/KKxohnH9250/s1600/image+1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Nine-patch изображения" border="0" src="http://4.bp.blogspot.com/-65QDSYBR8gs/UHB2cCyMmEI/AAAAAAAAASQ/KKxohnH9250/s1600/image+1.png" title="Nine-patch изображения" /></a></div>
<div class="MsoNormal" style="text-align: justify;">
<br /></div>
<div class="MsoNormal" style="text-align: justify;">
Чтобы сделать из этой
обычной картинки 9-patch можно воспользоваться любым графическим редактором,
поддерживающим *.png или специальной утилитой draw9patch, которая расположена в
папке tools в месте установки Android SDK.<br />
В нашем примере используем <span lang="EN-US" style="mso-ansi-language: EN-US;">Android</span><span lang="EN-US"> </span>утилиту для работы с такими изображениями. Открыть
изображение можно через пункт меню File > Open 9-patch. Теперь нарисуем
повторяемые области и область размещения контента.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-tbpSt-aaEgA/UHB2gU3NlnI/AAAAAAAAASY/AB6u-Txxqa0/s1600/image+2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Nine-patch изображения" border="0" height="187" src="http://3.bp.blogspot.com/-tbpSt-aaEgA/UHB2gU3NlnI/AAAAAAAAASY/AB6u-Txxqa0/s320/image+2.png" title="Nine-patch изображения" width="320" /></a></div>
<div class="MsoNormal" style="text-align: justify;">
<br /></div>
<div class="MsoNormal" style="text-align: justify;">
В правой части утилиты отображается результат
масштабирования нашего изображения.<br />
Теперь необходимо сохранить полученное изображение c расширением *.9.png и
добавить в проект (в папку /drawable).</div>
<div class="MsoNormal" style="text-align: justify;">
<br /></div>
<h3>
<b style="mso-bidi-font-weight: normal;">Примеры</b></h3>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-LilJXzKG3Yc/UHB2kskyD8I/AAAAAAAAASg/DvhVAUwcexM/s1600/ex1_1.9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Nine-patch изображения - примеры" border="0" src="http://1.bp.blogspot.com/-LilJXzKG3Yc/UHB2kskyD8I/AAAAAAAAASg/DvhVAUwcexM/s1600/ex1_1.9.png" title="Nine-patch изображения - примеры" /></a><a href="http://4.bp.blogspot.com/-9zG8DPD0nNk/UHB2lILSB6I/AAAAAAAAASk/uEhqXBAhC3Y/s1600/ex1_2.9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Nine-patch изображения - примеры" border="0" src="http://4.bp.blogspot.com/-9zG8DPD0nNk/UHB2lILSB6I/AAAAAAAAASk/uEhqXBAhC3Y/s1600/ex1_2.9.png" title="Nine-patch изображения - примеры" /></a><a href="http://1.bp.blogspot.com/-uhI-EhtWdr4/UHB2lkID0dI/AAAAAAAAASo/YHXyPZzvuRc/s1600/ex1_3.9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Nine-patch изображения - примеры" border="0" src="http://1.bp.blogspot.com/-uhI-EhtWdr4/UHB2lkID0dI/AAAAAAAAASo/YHXyPZzvuRc/s1600/ex1_3.9.png" title="Nine-patch изображения - примеры" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-TSM9CNXDzfs/UHB2mcMiZyI/AAAAAAAAAS0/rnLWiDwQk6A/s1600/ex2_1.9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Nine-patch изображения - примеры" border="0" src="http://2.bp.blogspot.com/-TSM9CNXDzfs/UHB2mcMiZyI/AAAAAAAAAS0/rnLWiDwQk6A/s1600/ex2_1.9.png" title="Nine-patch изображения - примеры" /></a><a href="http://3.bp.blogspot.com/-fKqjA8geUvQ/UHB2nBiIDjI/AAAAAAAAAS8/2M_CUksQhTo/s1600/ex2_2.9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Nine-patch изображения - примеры" border="0" src="http://3.bp.blogspot.com/-fKqjA8geUvQ/UHB2nBiIDjI/AAAAAAAAAS8/2M_CUksQhTo/s1600/ex2_2.9.png" title="Nine-patch изображения - примеры" /></a><a href="http://1.bp.blogspot.com/-DYXulwL58BI/UHB2nvFEBEI/AAAAAAAAATE/UucqzVjg7ps/s1600/ex2_3.9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Nine-patch изображения - примеры" border="0" src="http://1.bp.blogspot.com/-DYXulwL58BI/UHB2nvFEBEI/AAAAAAAAATE/UucqzVjg7ps/s1600/ex2_3.9.png" title="Nine-patch изображения - примеры" /></a><a href="http://1.bp.blogspot.com/-4xWHBf1W35A/UHB2ofgqzeI/AAAAAAAAATQ/XtSqWDqt70Y/s1600/ex2_4.9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Nine-patch изображения - примеры" border="0" src="http://1.bp.blogspot.com/-4xWHBf1W35A/UHB2ofgqzeI/AAAAAAAAATQ/XtSqWDqt70Y/s1600/ex2_4.9.png" title="Nine-patch изображения - примеры" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-z74_qdtDIRY/UHB2pd-A-rI/AAAAAAAAATU/QKs5vhvk3Ls/s1600/ex3_1.9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Nine-patch изображения - примеры" border="0" src="http://2.bp.blogspot.com/-z74_qdtDIRY/UHB2pd-A-rI/AAAAAAAAATU/QKs5vhvk3Ls/s1600/ex3_1.9.png" title="Nine-patch изображения - примеры" /></a><a href="http://4.bp.blogspot.com/-rDWfzG8m6XA/UHB2p3F_JsI/AAAAAAAAATc/8mSwALRB_6c/s1600/ex3_2.9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Nine-patch изображения - примеры" border="0" src="http://4.bp.blogspot.com/-rDWfzG8m6XA/UHB2p3F_JsI/AAAAAAAAATc/8mSwALRB_6c/s1600/ex3_2.9.png" title="Nine-patch изображения - примеры" /></a><a href="http://4.bp.blogspot.com/-mwdNfRkqLMs/UHB2qteztOI/AAAAAAAAATk/n3qIAr1v5jo/s1600/ex3_4.9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Nine-patch изображения - примеры" border="0" src="http://4.bp.blogspot.com/-mwdNfRkqLMs/UHB2qteztOI/AAAAAAAAATk/n3qIAr1v5jo/s1600/ex3_4.9.png" title="Nine-patch изображения - примеры" /></a><a href="http://1.bp.blogspot.com/-nRXOfxdhJBA/UHB2rMMb06I/AAAAAAAAATs/r51x4tKW4mk/s1600/ex3_5.9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Nine-patch изображения - примеры" border="0" src="http://1.bp.blogspot.com/-nRXOfxdhJBA/UHB2rMMb06I/AAAAAAAAATs/r51x4tKW4mk/s1600/ex3_5.9.png" title="Nine-patch изображения - примеры" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-cJaNkvoBBy4/UHB2ry4fNrI/AAAAAAAAAT0/y4NCcDjo-5s/s1600/ex4_1.9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Nine-patch изображения - примеры" border="0" src="http://1.bp.blogspot.com/-cJaNkvoBBy4/UHB2ry4fNrI/AAAAAAAAAT0/y4NCcDjo-5s/s1600/ex4_1.9.png" title="Nine-patch изображения - примеры" /></a><a href="http://2.bp.blogspot.com/-Z1VYnn2srCY/UHB2sZpeDkI/AAAAAAAAAT8/w79EDv06_ls/s1600/ex4_2.9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Nine-patch изображения - примеры" border="0" src="http://2.bp.blogspot.com/-Z1VYnn2srCY/UHB2sZpeDkI/AAAAAAAAAT8/w79EDv06_ls/s1600/ex4_2.9.png" title="Nine-patch изображения - примеры" /></a><a href="http://2.bp.blogspot.com/-iKSYOGrAT7c/UHB2takpQTI/AAAAAAAAAUI/RXmLxJKku9M/s1600/ex4_3.9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Nine-patch изображения - примеры" border="0" src="http://2.bp.blogspot.com/-iKSYOGrAT7c/UHB2takpQTI/AAAAAAAAAUI/RXmLxJKku9M/s1600/ex4_3.9.png" title="Nine-patch изображения - примеры" /></a><a href="http://3.bp.blogspot.com/-M-rB74oCHvo/UHB2uKCzLUI/AAAAAAAAAUM/zwPyAiUeI1o/s1600/ex4_4.9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Nine-patch изображения - примеры" border="0" src="http://3.bp.blogspot.com/-M-rB74oCHvo/UHB2uKCzLUI/AAAAAAAAAUM/zwPyAiUeI1o/s1600/ex4_4.9.png" title="Nine-patch изображения - примеры" /></a></div>
<o:p> </o:p><br />
<h3>
<b style="mso-bidi-font-weight: normal;">Ссылки</b></h3>
<br />
<ul>
<li class="MsoNormal" style="text-align: justify;">Примеры изображений в одном архиве: <span lang="EN-US" style="mso-ansi-language: EN-US;"><a href="http://snowpard.org/examples/article_b5/examples.zip">zip</a></span></li>
</ul>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-428493628987054592012-10-02T22:04:00.001+04:002012-10-02T22:04:21.839+04:00Рекламные сервисы: WapStart<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-sQFG-wNDdQo/UGssBtGbunI/AAAAAAAAAP4/fgd2-3NG9TI/s1600/icon.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="Рекламные сервисы: WapStart" border="0" src="http://1.bp.blogspot.com/-sQFG-wNDdQo/UGssBtGbunI/AAAAAAAAAP4/fgd2-3NG9TI/s1600/icon.png" title="Рекламные сервисы: WapStart" /></a></div>
<div class="MsoNormal" style="text-align: justify;">
WapStart — крупнейшая мобильная рекламная сеть в России. Как
использовать эту сеть я расскажу в этой статье.</div>
<div class="MsoNormal" style="text-align: justify;">
<br /></div>
<div class="MsoNormal" style="text-align: justify;">
<br /></div>
<div class="MsoNormal" style="text-align: justify;">
<br /></div>
<a name='more'></a><br />
<div class="MsoNormal" style="text-align: justify;">
Что предлагает WapStart:</div>
<ul>
<li class="MsoNormal" style="text-align: justify;">Гарантированный выкуп 100% рекламного мобильного трафика;</li>
<li class="MsoNormal" style="text-align: justify;">Максимизация дохода благодаря формированию цены по
принципу аукциона; </li>
<li class="MsoNormal" style="text-align: justify;">Высокая эффективность размещения рекламы за счет широкого
функционала таргетинга;</li>
<li class="MsoNormal" style="text-align: justify;">Детальная on-line статистика рекламных кампаний на
мобильной площадке;</li>
<li class="MsoNormal" style="text-align: justify;">Возможность размещения собственных рекламодателей с функционалом
«Домашняя реклама»;</li>
<li class="MsoNormal" style="text-align: justify;">Поддержка широкого пула платформ мобильных приложений;</li>
<li class="MsoNormal" style="text-align: justify;">Устойчивая, масштабируемая система управления рекламой с
гарантированной скоростью отдачи баннера;</li>
<li class="MsoNormal" style="text-align: justify;">Предварительная модерация перед размещением на мобильной
площадке каждого рекламного объявления;</li>
<li class="MsoNormal" style="text-align: justify;">SDK для Android, iPhone, Java ME;</li>
<li class="MsoNormal" style="text-align: justify;">API для Bada, Symbian, Blackberry, Window Phone 7, PHP и др.</li>
</ul>
<div class="MsoNormal" style="text-align: justify;">
<br /></div>
<h3>
<b style="mso-bidi-font-weight: normal;">Начало работы</b></h3>
Для начала работы необходимо зарегистрироваться по этой <a href="https://wwwpassport.wapstart.ru/registration" target="_blank">ссылке</a> и скачать <span lang="EN-US" style="mso-ansi-language: EN-US;">sdk</span>. Для
каждого приложения необходимо получить свой код. Для этого заходим в Площадки –
Управление и нажимаем <span style="mso-spacerun: yes;"> </span>Добавить площадку.
После заполнения необходимых полей и сохранения площадки, вашему приложению
будет присвоен уникальный код. <br />
<div class="MsoNormal" style="text-align: justify;">
<br /></div>
<h3>
<b style="mso-bidi-font-weight: normal;">Интеграция кода</b></h3>
<span lang="EN-US" style="mso-ansi-language: EN-US;">SDK</span><span lang="EN-US"> </span>поставляется в виде исходных кодов, которые необходимо
поместить в папку <span lang="EN-US" style="mso-ansi-language: EN-US;">src</span>.
Также необходимо скопировать файлы из папки ресурсов (<span lang="EN-US" style="mso-ansi-language: EN-US;">res</span>).<br />
<div class="MsoNormal" style="text-align: justify;">
Для рекламного сервиса необходимо добавить следующие
разрешения в <span lang="EN-US" style="mso-ansi-language: EN-US;">AndroidManifest</span>:</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">uses-permission</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"android.permission.INTERNET"</span></i>
<span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;">uses-permission</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"android.permission.ACCESS_NETWORK_STATE"</span></i>
<span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="text-align: justify;">
Так же в <span lang="EN-US" style="mso-ansi-language: EN-US;">AndroidManifest</span>
в блок <application> требуется добавить информацию об используемых
Activity: </div>
<div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US" style="mso-ansi-language: EN-US;"><activity
android:name="ru.wapstart.plus1.sdk.MraidBrowser" /></span></div>
<div class="MsoNormal" style="text-align: justify;">
Существует два способа добавления рекламного баннера во <span lang="EN-US" style="mso-ansi-language: EN-US;">View</span>:</div>
<div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US" style="mso-ansi-language: EN-US;">1. </span>Через<span style="mso-ansi-language: EN-US;"> <span lang="EN-US">xml</span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">LinearLayout</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">xmlns:android</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"http://schemas.android.com/apk/res/android"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:orientation</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"vertical"</span></i> <span style="color: teal;">></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">TextView</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"fill_parent"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><u><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"wrap_content"</span></i></u></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:layout_weight</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"1"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:text</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@string/hello"</span></i> <span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">ru.wapstart.plus1.sdk.Plus1BannerView</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-tab-count: 3;"> </span><span style="color: #7f007f;">android:id</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"@+id/banner_adview"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-tab-count: 3;"> </span><span style="color: #7f007f;">android:layout_width</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"320dp"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-tab-count: 3;"> </span><span style="color: #7f007f;">android:layout_height</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"50dp"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-tab-count: 3;"> </span></span><span style="color: #7f007f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">android:layout_gravity</span><span style="color: black; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">=</span><i><span style="color: #2a00ff; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">"center"</span></i></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span style="font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"><span style="mso-tab-count: 2;"> </span><span style="color: teal;">/> </span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"></</span><span style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">LinearLayout</span><span style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;">></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="mso-ansi-language: EN-US;">На этапе инициализации в Activity создайте и
настройте объекты следующим образом:</span><span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-fareast-language: RU;"> </span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<pre class="brush: java">
private Plus1BannerView mBannerView;
private Plus1BannerAsker mAsker;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mBannerView =
(Plus1BannerView) findViewById(R.id.banner_adview);
mAsker =
new Plus1BannerAsker(
new Plus1BannerRequest()
.setApplicationId(Ваш код площадки),
mBannerView
.enableAnimationFromTop()
.enableCloseButton()
);
}
</pre>
</div>
<div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US" style="mso-ansi-language: EN-US;">2. </span>Через<span style="mso-ansi-language: EN-US;"> </span>код</div>
<div class="MsoNormal" style="text-align: justify;">
<pre class="brush: java">
mBannerView = new Plus1BannerView(this);
parentView.addView(adview);
</pre>
</div>
<div class="MsoNormal" style="text-align: justify;">
Затем необходимо предусмотреть вызов обработчиков <span lang="EN-US" style="mso-ansi-language: EN-US;">onResume</span>() и <span lang="EN-US" style="mso-ansi-language: EN-US;">onPause</span>():</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<pre class="brush: java">
@Override
protected void onPause() {
super.onPause();
mAsker.onPause();
}
@Override
protected void onResume() {
super.onResume();
mAsker.onResume();
}
</pre>
</div>
<div class="MsoNormal" style="text-align: justify;">
<br /></div>
<h3>
<b style="mso-bidi-font-weight: normal;">Ссылки</b></h3>
<div class="MsoNormal" style="text-align: justify;">
Исходные коды данного проекта можно скачать отсюда: <span lang="EN-US" style="mso-ansi-language: EN-US;"><a href="http://snowpard.org/examples/article_a7/WapStartExample.zip">zip</a></span></div>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0tag:blogger.com,1999:blog-8853310020905277854.post-54072954088688947762012-10-01T23:12:00.001+04:002012-10-01T23:12:41.850+04:00Оптимизация приложения под разные разрешения
<br />
<div class="MsoNormal" style="text-align: justify;">
Вопрос о разработке приложения с поддержкой большого числа
разрешений всегда встает ребром у разработчиков под <span lang="EN-US" style="mso-ansi-language: EN-US;">Android</span>. Поскольку число различных
девайсов уже превысило 1000. В этой статье я расскажу об одном из способов
поддержки разных разрешений в своем приложении.<o:p> </o:p></div>
<a name='more'></a><br />
<h3>
<b style="mso-bidi-font-weight: normal;">Что<span style="mso-spacerun: yes;"> </span>используется</b></h3>
<div class="MsoNormal" style="text-align: justify;">
В основе моего метода оптимизации лежит<span style="mso-spacerun: yes;"> </span>такая характеристика экрана, как Размер (<span lang="EN-US" style="mso-ansi-language: EN-US;">Size</span>). Сейчас<span style="mso-ansi-language: EN-US;"> </span>существуют<span style="mso-ansi-language: EN-US;"> </span>следующие<span style="mso-ansi-language: EN-US;"> </span>спецификаторы<span lang="EN-US" style="mso-ansi-language: EN-US;">:</span></div>
<ul>
<li class="MsoNormal" style="text-align: justify;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Small</span>:
используется для ресурсов с маленькими экранами (в основном это 240<span lang="EN-US" style="mso-ansi-language: EN-US;">x</span>320);</li>
<li class="MsoNormal" style="text-align: justify;">N<span lang="EN-US" style="mso-ansi-language: EN-US;">ormal</span>:
используется для ресурсов с нормальными экранами (в основном это 480<span lang="EN-US" style="mso-ansi-language: EN-US;">x</span>800);</li>
<li class="MsoNormal" style="text-align: justify;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Large</span>:
используется для ресурсов с большими экранами (в основном это 600<span lang="EN-US" style="mso-ansi-language: EN-US;">x</span>1024 или планшеты 7”);</li>
<li class="MsoNormal" style="text-align: justify;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Xlarge</span>:
используется для ресурсов с очень большими экранами (в основном это <span style="mso-bidi-font-weight: bold;">1280x800 и выше или планшеты от 9”</span>).</li>
</ul>
<div class="MsoNormal" style="text-align: justify;">
Если есть возможность использовать <span lang="EN-US" style="mso-ansi-language: EN-US;">Nine</span>-<span lang="EN-US" style="mso-ansi-language: EN-US;">Patch</span><span lang="EN-US"> </span>изображения, то лучше их
использовать.</div>
<div class="MsoNormal" style="text-align: justify;">
<br /></div>
<h3>
<b style="mso-bidi-font-weight: normal;">Применение</b></h3>
<br />
<div class="MsoNormal" style="text-align: justify;">
Размеры шрифтов и элементов мы будем хранить в ресурсном
файле <span lang="EN-US" style="mso-ansi-language: EN-US;">dimen</span>.<span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span></div>
<div class="MsoNormal" style="text-align: justify;">
Для<span style="mso-ansi-language: EN-US;"> </span>размеров<span style="mso-ansi-language: EN-US;"> </span>шрифта<span lang="EN-US" style="mso-ansi-language: EN-US;">:</span></div>
<div class="MsoNormal" style="text-align: justify;">
<span style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: RU;">dimen</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: RU;"> </span><span lang="EN-US" style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: RU;">name</span><span style="color: black; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: RU;">=</span><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: RU;">"</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: RU;">txt</span></i><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: RU;">_</span></i><i><span lang="EN-US" style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: RU;">size</span></i><i><span style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: RU;">_12"</span></i><span style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: RU;">></span><span style="color: black; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: RU;">12</span><span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: RU;">sp</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: RU;"></</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: RU;">dimen</span><span style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: RU;">></span>
</div>
<div class="MsoNormal" style="text-align: justify;">
Для<span style="mso-ansi-language: EN-US;"> </span>размеров<span style="mso-ansi-language: EN-US;"> </span>элементов<span lang="EN-US" style="mso-ansi-language: EN-US;">:</span></div>
<div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US" style="color: teal; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">dimen</span><span lang="EN-US" style="font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">name</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"image_width_50"</span></i><span style="color: teal;">></span><span style="color: black;">50dp</span><span style="color: teal;"></</span><span style="color: #3f7f7f;">dimen</span><span style="color: teal;">></span></span>
</div>
<div class="MsoNormal" style="text-align: justify;">
Для использовавания этих размеров в <span lang="EN-US" style="mso-ansi-language: EN-US;">xml</span> применяется<span style="mso-spacerun: yes;"> </span>спецификатор @<span lang="EN-US" style="mso-ansi-language: EN-US;">dimen</span>.</div>
<div class="MsoNormal" style="text-align: justify;">
Например: </div>
<div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US" style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">android:textSize</span><span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">=</span><i><span lang="EN-US" style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">"@dimen/txt_size_12"</span></i>
</div>
<div class="MsoNormal" style="text-align: justify;">
или</div>
<div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US" style="color: #7f007f; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: RU;">android:layout_width</span><span lang="EN-US" style="color: black; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: RU;">=</span><i><span lang="EN-US" style="color: #2a00ff; font-family: Consolas; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: RU;">"@dimen/image_width_50"</span></i>
</div>
<div class="MsoNormal" style="text-align: justify;">
Способ оптимизации заключается в создании и подгонка
размеров для разных экранов. Для этого можно использовать эмуляторы с разными
разрешениями. </div>
<div class="MsoNormal" style="text-align: justify;">
<br /></div>
<h3>
<b style="mso-bidi-font-weight: normal;">Ограничение устройств
в </b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Google</span><span lang="EN-US"> </span></b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Play</span></b></h3>
<br />
<div class="MsoNormal" style="text-align: justify;">
Видимость вашего приложения для различных размеров экранов
можно ограничить с помощью следующего кода в <span lang="EN-US" style="mso-ansi-language: EN-US;">AndroidManifest</span>:</div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="color: teal; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><</span><span lang="EN-US" style="color: #3f7f7f; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;">supports-screens</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"> <span style="color: #7f007f;">android:smallScreens</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"true"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;">
</span><span style="color: #7f007f;">android:normalScreens</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"true"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;">
</span><span style="color: #7f007f;">android:largeScreens</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"true"</span></i></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;">
</span><span style="color: #7f007f;">android:xlargeScreens</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"true"</span></i></span></div>
<div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-fareast-language: RU;"><span style="mso-spacerun: yes;"> </span><span style="color: #7f007f;">android:anyDensity</span><span style="color: black;">=</span><i><span style="color: #2a00ff;">"true"</span></i><span style="color: teal;">/></span></span></div>
<div class="MsoNormal" style="text-align: justify;">
<br /></div>
<h3>
<b style="mso-bidi-font-weight: normal;">Ссылки</b><b style="mso-bidi-font-weight: normal;"><span style="mso-ansi-language: EN-US;"> </span>по</b><b style="mso-bidi-font-weight: normal;"><span style="mso-ansi-language: EN-US;"> </span>теме</b></h3>
<br />
<ul>
<li class="MsoNormal" style="text-align: justify;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Google: <a href="http://developer.android.com/guide/practices/screens_support.html" target="_blank">Supporting Multiple Screens</a></span></li>
<li class="MsoNormal" style="text-align: justify;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Google:
<a href="http://developer.android.com/about/dashboards/index.html" target="_blank">Dashboards</a></span></li>
</ul>
Snowpardhttp://www.blogger.com/profile/05293709567974780986noreply@blogger.com0