Пешгуфтор 
 Ҳамқадам бо асру бо даврон мебояд будан, 
 Бо хабар аз илму аз ирфон мебояд шудан. 
 Ҳеҷ роҳе нест бепоён бошад дар ҷаҳон, 
 Бо ирода бо ҳавас бо ҷон мебояд шудан. 
 (Муллошараф Арабов) 
 Барномасозӣ низ ҳунар буда, барои бартараф намудани баъзе мушкилоти 
 ҷомеа (бо истифода аз ягон забони барноманависӣ) барнома навишта мешавад.
 Ҳангоме ки шахс барнома менависад, метавонад ба компютер ҳамчун раис 
 (роҳбар) муомила кунад. Барои навиштани барнома забонҳои барноманависии 
 зиёде мавҷуданд, ки аз байни онҳо якчанд забон маъмулу машҳур ва пурқудрат
 буда, мавриди писанди барноманависон ва омӯзандагон мебошад. Забони Java аз
 зумраи чунин забонҳост. Забонҳои барноманависӣ бо гузашти замон такмилу гу-
 стариш меёбанд. Забони Java низ дар айни ҳол дар ҳолати рушд ва густариш ме-
 бошад. 
 Забони Java дорои қудрати зиёд буда, тавассути он метавон барномаҳо 
 барои шабака, мизи корӣ, телефонҳои мобилӣ ва ғайра таҳия кард. Забони мазкур
 метавонад ҳам дар муҳити Windows ва ҳам дар муҳити дигар системаҳои омилӣ
 бе душворӣ кор кунад. 
 Солҳои охир истифодабарандагони телефонҳои боҳуш дар ҷумҳуриямон 
 хело зиёд гардида, талабот ба барномаҳои мобилӣ низ хело афзун шудааст. 
 Сабаби ин густариш дар пайдо шудани версияи мобилии аксари хизматрасониҳо
 мебошад. 
 Пас аз соҳибистиқлол гардидани Тоҷикистон чӣ дар мактабҳои миёна ва чи
 дар коллеҷу донишгоҳҳо омӯзиши компютер ва барноманависӣ ба роҳ монда 
 шудааст, вале мутаассифона, то кунун дар Тоҷикистон адабиёти фарогири ин 
 соҳа бо забони давлатӣ (модарӣ) вуҷуд надорад. Муаллиф кӯшиш ба харҷ 
 додааст, ки бо забони тоҷикӣ барои хонандагон ҳамчунин дастуреро пешкаш 
 намояд. 
 Ин китоб тарзе навишта шудааст, ки хонандагони он метавонанд бо 
 донистани асосҳои барноманависӣ ва БОН асосҳои барноманависӣ барои 
 телефонҳои мобилиро омӯзанд. Барои ин зарур аст, ки ҳар мавзӯъро бодиққат
 хонда, барномаҳои овардашударо таҳлил кунанд. Дар охири ҳар боб барои 
 мустаҳкамкунӣ саволҳо ва мисолҳои мувофиқ барои намуна ва барои кори 
 мустақилона оварда шудааст. Мақсади овардани ин мисолҳо аз он иборат аст, ки
 хонанда дониши омӯхтаашро санҷида, маҳорати барноманависиашро сайқал 
 диҳад. 
 Китоби мазкур бобро дарбар гирифта, ҳамчун воситаи муҳиме барои 
 худомӯзии асосҳои барноманависӣ барои телефонҳои мобилӣ ба ҳисоб меравад.
 Бояд қайд кард, ки ин китоб на танҳо ҳамчун воситаи худомӯзӣ, балки 
 воситаи методиву таълимӣ низ мебошад. Ҳамаи барномаҳои ин китоб дар 
 компютер иҷро ва тест карда шудаанд. 
 Барноманависии ба объектҳо нигаронидашуда 
 Дар охири китоб феҳристи васеи адабиёт ҷой дода шудааст, ки барои пур-
 ратар ва ҳаматарафа омӯхтани барноманависии мобилӣ кӯмак мекунад. 
 Инак, китоб пешкаши хонандагон мегардад, ки он нахустин таълифоти му-
 аллиф дар бораи барноманависии мобилӣ буда, метавонад аз нуқсону ғалатҳо орӣ
 набошад. Аз ин рӯ, муаллиф аз ҳамаи хонандагон эҳтиромона хоҳиш менамояд,
 ки ҳар гуна фикру мулоҳизоти хешро оид ба ин дастур ба нишонии электронии
 cool.araby@mail.ru ирсол намоянд. 
 Мо умедворем, ки фикру дархости беғаразонаи Шумо барои беҳтар шудани
 сифати китоб дар оянда кумак хоҳанд кард. 
 Муаллиф ба шахсоне, ки фикру мулоҳизаҳои худро оид ба мазмуни китоб 
 беғаразона (ба ӯ) мерасонанд, қаблан миннатдории худро баён месозад. 
 Муаллиф ба муҳаррир Пиров С. М., муқарризон Халилова М.Ш., Замонов 
 М.З. ва шахсоне, ки дар рафти навиштани китоб маслиҳатҳои муфид дода, та-
 ваҷҷуҳ зоҳир намудандарзи сипос мерасонад. 
 Боби. Назардошти умуми оиди СО Android 
 Android-системаи омилӣ (СО) буда, дар асоси ядрои Linux аз тарафи 
 ширкати Google сохта шудааст. СО мазкур дар телефонҳо, нетбукҳо, планшетҳо
 ва воситаҳои техникии дигар (айнакҳо, соатҳо, камераҳо ва ғайра) истифода
 бурда мешавад. 
 Барои шинос шудан ба руйхати воситаҳои дар базаи Android коркунанда 
 метавон аз суроғаи зерин истифода кард. 
 http://www.android.com/devices/ 
 Якчанд версияҳои СО Android мавҷуд аст, ки онҳоро метавон бо 
 номҳояшон аз суроғаи зерин мулоҳиза кард. 
 http://developer.android.com/about/dashboard/index.html 
 Android Market – интернет-мағоза барои паҳн намудани маҳсулотҳои дар
 базаи Android сохташуда. 
 https://play.google.com 
 Барои таҳия намудани лоиҳаҳои Android аз машинаи виртуалии махсусе бо
 номи Dalvik истифода бурда мешавад. 
 Dalvik-машинаи стандартии виртуалии Java буда, барои иҷроиши Android-
 лоиҳаҳо пешбинӣ шудааст. Машинаи мазкур дорои имкониятҳои зерин мебошад: 
 Оптимизатсия намудани Garbage Collection; 
 Фишурдани файлҳои b,nbljm (исходник); 
 Оптимизатсия кардани ҳофизаи истифодашаванда; 
 Қадамҳои иҷроиши лоиҳаи барои Android сохташуда аз лоиҳаи стандартии 
 Java фарқ мекунанд. Бинобар ин, барои фаҳмо шудан ба намуди диаuрамма 
 онҳоро меорем. 
 Фарқи иҷроиши java-барномаи стандартӣ аз android-барномаҳо: 
 Барои таҳия намудани барномаҳои Android метавон аз воситаҳои зерин 
 истифода кард. 
 Android Studio; 
 Eclipse бо плагинаи ADT(ширкати Google истифодаи инро маслиҳат 
 медиҳад); 
 http://developer.android.com/tools/index.html; 
 garbage collection — яке аз қолабҳои ба таври худкор идоракунии ҳофиза.
 NetBeans; 
 IntellijlDEA; 
 AIDA-Муҳити таҳияи барномаҳо дар телефон. 
 https://play.google.com/store/apps/details?id=com.aide.ui&h=ru 
 Ҳар як нафар бояд як хосияти муҳимро, ки API Level ном дорад, донад.
 Барои ба даст овардани маълумоти бештар оиди ин хосият метавон аз суроғаи
 зерин истифода кард: 
 http://developer.android.com/quide/topics/manifast/uses-sdk-element.html#APILevels
 API Level-асосан версияи android –ро муайян мекунад. Агар дар болои 
 истиноди он тугмачаи тарафи рости мушакро пахш кунем хусусиятҳои онро 
 пешниҳод мекунад. 
 Барои таҳия намудани лоиҳаҳои Android матлабҳои зеринро бояд мулоҳиза
 кард. 
 API Level; 
 Версияҳои гуногуни Android бо фарқияти онҳо; 
 Принсипи дизайни интерфейс; 
 Агар Шумо ягон таҷҳизоти Android дошта бошед, амалҳои зеринро иҷро 
 кунед: 
 Версияи Android-ро муайян кунед; 
 Элементҳои интерфейсро, ки дар банди «Принципы дизайна интерфейса» 
 ҷойгиранд ёбед. 
 Android Studio — муҳити интегронидашудаи корбар (МИК ё IDE ) барои 
 кор дар платформаи Android буда, аввалин маротиба -уми майи соли дар
 конференсияи Google I/O муаррифӣ карда шудааст. 
 МИК-и мазкур сар карда аз версияи. (моҳи майи ) дар дастрасии
 озод қарор дорад. Июни соли ба дараҷаи бета-тестиронӣ расид. Версияи
 пурқудрати МИК-и мазкур. мебошад, ки декабри соли пайдо гардид.Сар
 карда аз ҳамон вақт пуштибонии плагини Android Development Tools (ADT) ба-
 рои Eclipse қатъ гардид. 
 Android Studio дар асоси коркарди барномавии IntelliJ IDEA (маҳсули шир-
 кати JetBrains – воситаи расмии коркарди Android лоиҳаҳо) сохта шудааст. МИК-
 и мазкур барои системаҳои омилии (СО Windows, OS X ва Linux дастрас мебо-
 шад.-уми моҳи майи соли дар конференсияи Google I/O ширкати Google
 пуштибонии забони Kotlin-ро, ки дар Android Studio ҳамчун забони расмӣ барои
 платформаҳои Android бо иловакунии Java ва С++ истифода мешавад, эълон кард.
 http://developer.android.com/design/set-started/principles, 
 http://developer.android.com/design/set-started/ui-overview.html.html 
 Талаботи системавӣ 
 Windows OS X Linux 
 Версияи Microsoft Windows Mac® OS X®.. GNOME ё 
 СО ///Vista/ ( ё ё навтар то. KDE 
 -bit) (High Sierra) 
 Хотираи ГБ (минимум), ГБ (маслиҳат дода мешавад); + ГБ барои 
 фаврӣ Android Emulator 
 Ҷойи ГБ минимум ( МБ барои IDE +. ГБ барои Android SDK 
 холигӣ дар ва образи системаи эмулятор), ГБ SSD маслиҳат дода мешавад 
 диск 
 Версияи Java Development Kit 
 JDK 
 Андозаи x (минимум) 
 экран 
 Иловагӣ — Java Runtime GNU C Library 
 Environment (JRE) (glibc). ё 
 навтар 
 Java Development Kit (кутоҳкардашуда JDK) —маҷмӯи коркарди лоиҳаҳо 
 да забони Java мебошад, ки аз тарафи ширкати Oracle Corporation (пештарар Sun
 Microsystems) сохта шудааст, ки дорои компилятори Java (javac), китобхонаҳои
 стандартии классҳои Java, мисолҳо, маълумотномаҳо, утилитаҳои иҷроишии 
 гуногуни системаи Java (JRE) мебошад. Дар таркиби JDK муҳити 
 интегронидашавандаи корбар (МИК) мавҷуд намебошад, бинобар ин, барои 
 сохтани барнома таҳриргари матнӣ лозим меояд. 
 МИК-и муосири Java, ба монанди JDeveloper, NetBeans IDE, Sun Java Studio
 Creator, IntelliJ IDEA, Borland JBuilder, Eclipse, дар асоси JDK кор мекунанд.
 Android SDK — воситаи универсалии коркарди лоиҳаҳои мобилӣ барои 
 системаи омилии Android мебошад. Бартарии асосӣ аз таҳриргарҳои матнӣ (барои
 навиштани код) дар он аст, ки дар он имконияти функсионалие ки иҷроиш, 
 санҷиш ва хатозудоии коди навишташуда, баҳогузории кори лоиҳа дар реҷаи 
 ҳамбастагӣ бо версияҳои гуногуни СО-и Android, инчунин назорат кардан ба 
 натиҷаи барнома дар вақти муайян мавҷуд аст. Пуштибонӣ намудани миқдори 
 зиёди воситаҳои мобилӣ, ба монанди: телефонҳо, планшетҳо, компютерҳо, 
 айнакҳои ҳушманд (аз ҷумла Google Glass), мошинҳои муосир, телевизорҳои 
 муосир, соатҳо ва ғайра. 
 Пеш аз насб намудани Android Studio ибтидо пакети JDK насб карда 
 мешавад. Пакети JDK-ро ба таври ройгон метавон аз сомонаи расмии Oracle, яъне
 http://www.oracle.com/technetwork/java/javase/ downloads/index.html ба даст
 овард. Тарзи насб ва ҷуркунии пакети мазкур чандон душвор намебошад, 
 бинобар ин, онро мавриди баҳс қарор намедиҳем. 
 Барои насб кардани Android Studio бошад, ба сомонаи 
 http://developer.android.com/sdk/index.html даромада, аз онҷо ибтидо тугмачаи
 DOWNLOAD ва сипас DOWNLOAD ANDROID STUDIO. FOR WINDOWS 
 ( MB), яъне тугмачаи зеринро пахш мекунем. 
 Бо шарти истифодабарӣ розӣ гардида, барномаро боргузорӣ мекунем. 
 Файли ба даст овардаамонро мекушоем ва амалҳои зеринро иҷро 
 мекунем. Next->Интихоби банди Android Virtual Device->Next->Дар қадами 
 навбати мавқеи насби барномаро метавон тағйир дод ё бетағйир гузошт->Next-
 >Next-> 
 ->Finish. Дар натиҷа равзанаи зерин кушода мешавад. 
 Аз ин равзана тугмачаи Ок-ро пахш мекунем. Агар то ҳол дар компютери
 Шумо дигар версияҳои Android Studio набошанд нишонаи охирон интихоб карда
 мешавад. 
 Пас аз иҷрои ин амалҳо равзанаи Android Studio кушода мешавад ва 
 Android Studio китобхона ва файлҳои лозимиашро ба кор омода мекунад. 
 Ҳангоми бо муваффақият насб шудани Android Studio метавонед ба кор
 оғоз намоед. 
 Бо ҳамин насби барнома ба охир мерасад. 
 Версияи охирон дар вақти навиштани китоб. 
 Акнун барои насби SDK Android Studio-ро кушода, аз он ҷо SDK Manager-
 ро насб мекунем. Барои иҷрои ин амал Android Studio-ро кушода, аз тарафи рости
 равзанаи он тугмачаи SDK Manager-ро пахш мекунем. 
 Барои кушодани Android Studio аз равзанаи охирон банди Start a new 
 Android Studio Project-ро пахш мекунем, ки дар натиҷа равзанаи зерин пайдо
 мешавад. 
 Дар сатри Application name номи лоиҳа, яъне MyFirstApplication навишта,
 тугмачаи Next–ро пахш мекунем, ки равзанаи зерин кушода мешавад. 
 Аз ин равзана версияи лозимии Android, масалан, API: Android. 
 (Oreo)-ро интихоб карда, тугмачаи Next–ро пахш мекунем. 
 Аз ин равзана қолаб (Activity)-и лозимӣ, дар айни ҳол Empty Activity-ро
 интихоб карда, тугмачаи Next-ро пахш мекунем ва ба равзанаи навбатӣ 
 мегузарем: 
 Аз равзанаи охирон тугмачаи Finish–ро пахш карда, ҷараёни сохтани 
 лоиҳаро ба анҷом мерасонем, ки дар натиҷа равзанаи барнома кушода мешавад.
 Аз тарафи чапи болоии ин равзана барои танзими пакети SDK тугмачаи 
 SDK Manager-ро пахш мекунем, ки дар натиҷа равзанаи зерин кушода мешавад.
 Қайд. Итихоби ҳамаи ин бандҳо шарт намебошад, танҳо интихоби яке аз 
 онҳо барои навиштани барнома кифоягӣ мекунад. 
 Аз ин ҷо версияҳои зарурии SDK-ро интихоб карда, тугмачаи Ok-ро пахш
 мекунем, ки дар натиҷа равзанаи навбатӣ пайдо мешавад. Аз равзанаи пайдошуда
 бошад, тугмачаи Ок-ро пахш мекунем. 
 Дар натиҷа ба таври автоматӣ пакетҳои лозимӣ боргузорӣ карда мешавад.
 Акнун барои сохтани Android-лоиҳа ибтидо AVD месозем. Барои ин аз 
 менюи Tools фармони AVD Manager-ро пахш мекунем, ки равзанаи зерин пайдо 
 мешавад. 
 Аз равзанаи охирон равзана фармони Create Virtual Device-ро пахш 
 мекунем. Аз равзанаи навбати фармонҳои нишондодашударо интихоб карда, 
 тугмачаи Next-ро пахш мекунем. 
 Пас аз пахши тугмачаи Next ба равзанаи навбатӣ мегузарем. 
 Аз ин равзана яке аз бандҳоро интихоб карда,(масалан Oreo) тугмачаи
 Download-ро аз тарафи росташ пахш мекунем, ки равзанаи навбатӣ пайдо 
 мешавад. 
 Аз ин равзана банди Android Emulator-ро интихоб карда, пас аз гузоштани
 нишона ба Accept тугмачаи Next-ро пахш мекунем, ки равзани зерин пайдо 
 мешавад. 
 Дар ин ҷо то боргузорӣ шудани файлҳои лозимӣ мунтазир гардида, сипас
 тугмачаи Next –ро пахш мекунем, ки равзани навбатӣ пайдо мешавад. Дар 
 равзанаи охирон тугмачаи Finish-ро зер мекунем. Ба ҳамин AVD-и лозимӣ омода
 мегардад. 
 Ҳангоми иҷрокунии барнома, муҳити виртуалии лозимиро интихоб карда, 
 тугмачаи Ок-ро пахш мекунем. 
 Дар натиҷа ба ғайр аз воситаҳои техникӣ дар компютери Шумо воситаи 
 виртуалӣ низ пайдо мешавад. 
 Қайд. Дар ин ҷо барои намоиш додани матн аз компоненти TextView 
 истифода карда шудааст. Компоненти мазкурро баъдтар дар ҳамин боб 
 мавриди баҳс қарор медиҳем. 
 Тавре ки мушоҳида кардем, ҳангоми кушодани Android Studio равзанаи 
 зерин пайдо мегардад. 
 Дар тарафи чапи ин равзана равзанаи дарахтшакли файлҳои асосии лоиҳа 
 мавҷуд аст. Ҳоло аз ин равзана зеркаталоги res/layout файли дизайни барнома,
 яъне main_activity.xml–ро мекушоем, ки мӯҳтавои он шакли зеринро дорад: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Hello World!" 
 app:layout_constraintBottom_toBottomOf="parent" 
 app:layout_constraintLeft_toLeftOf="parent" 
 app:layout_constraintRight_toRightOf="parent" 
 app:layout_constraintTop_toTopOf="parent" /> 
 </android.support.constraint.ConstraintLayout> 
 Қайд. Дар вақти навиштани барнома ба таври дастӣ ворид кардани 
 фармонҳои файли қолаб шарт намебошад. Ҳангоми гузоштани элементҳои 
 идоракунанда ба таври автоматӣ фармонҳои файли мазкур навишта мешавад. 
 Азбаски дизайни лоиҳа ба сурати файли xml нигоҳ дошта мешавад, бинобар
 ин, дар сатри якум фармони <?xml version="." encoding="utf-"?>-навишта
 шудааст. Элементи асосии ин саҳифа контейнери ConstraintLayout ба ҳисоб 
 меравад, ки барои сохтани макети лоиҳа (экран) созгор буда, дар болои он 
 элементҳои лозимӣ гузошта мешаванд. Ин элементро баъдтар пурра мавриди 
 баҳс қарор медиҳем. Дар дохили ин элемент як элементи TextView гузошта 
 шудааст, ки барои дар экран баровардани пайғоми Hello World! истифода 
 мешавад. Файли мазкур дар ду реҷа- матнӣ ва графикӣ кор мекунад. Дар қисми
 чапи поёнии ин файл (дар ҳолати кушода будан) тугмачаи Design мавҷуд аст.
 Ҳангоми пахш кардани он реҷаи дизайнӣ кушода мешавад, ки шакли зеринро 
 дорад: 
 Барои гузоштани элементҳои лозимӣ метавон аз реҷаи дизайн низ истифода
 кард. Элементи лозимиро аз варақаи Palette интихоб карда, бо мушак онро 
 кашида дар болои форм (қисми дизайн) мегузорем. Дар ин ҷо (файли мазкур) 
 метавон элементҳои гуногунро гузошт. 
 Файли дигари қобили таваҷҷуҳ, файли MainActivity.java мебошад, ки дар 
 дохили зеркаталоги /java ҷойгир аст. Дар ин файл фармонҳои асосии барнома ба
 сурати кодҳои java навишта мешаванд. Агар файли мазкурро кушоем, мӯҳтавои
 он шакли зеринро дорад: 
 package com.example.user.myfirstapplication; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 } 
 } 
 Дар ин ҷо метавон фармонҳои асосии барномаро навишт. Ҳоло барномае 
 менависем, ки дар экран пайғоми «Барномаи нахустини ман дар Android Studio»–
 ро хориҷ кунад. 
 Барои иҷрои ин амал аз типи TextView тағйирёбанда муаррифӣ карда, онро
 тавассути методи findViewById ба элементи мавҷудбуда аз дизайн пайваст 
 мекунем ва тавассути методи setText пайғоми лозимиро дар он менависем. 
 package com.example.user.myfirstapplication; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.widget.TextView; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 TextView myText=(TextView)findViewById(R.id.textView); 
 myText.setText("Барномаи нахустини ман дар Android Studio"); 
 } 
 } 
 Барои иҷро намудани барнома тугмачаи –ро пахш карда, AVD- 
 и сохтаамонро интихоб мекунем ва тугмачаи Ок-ро пахш мекунем. Дар натиҷа 
 шакли зерин ҳосил мешавад. 
 Қайд. Дар Android Studio (умуман Java) барои ҳар як элемент фазои номии
 мушаххас мавҷуд аст. Ҳангоми навиштани фармони система нишона аз 
 хатогиро нишон медиҳед. Барои ворид (import) кардани китобхонаи лозимӣ 
 якҷояпахши тугмачаҳои Alt+Enter иҷро карда мешаванд. 
 Компоненти TextView барои хориҷ кардани матнҳо бе имконияти таҳриркунӣ
 пешбинӣ шудааст. Амалкарди компоненти мазкур аз номи он бар меояд, яъне 
 Text - матн, view – дидан, намоиш додан. 
 TextView - яке аз компонентҳои бисёр истифодашаванда буда, барои баровар-
 дани ягон матн аз файли қолаб аз атрибути android: text истифода мебарад, маса-
 лан: 
 android: text="Ягон матн" 
 Чунин усул чандон мувофиқ намебошад. Маслиҳат дода мешавад, ки аз ман-
 баҳои матнӣ (@string resource) истифода бурда шавад. Дар оянда ин имкониятро
 пурра мавриди баҳс қарор медиҳем. 
 Барои сохтани string resource ба файли string.xml, ки дар папкаи res/values ҷой-
 гир аст, ворид мешавем, ки мӯҳтавои он шакли зеринро дорад: 
 Дар ин ҷо байни фармонҳои (тегҳои) <string> … </string> матни лозимиро
 менависем. 
 <string name="mystr"> Барномаи нахустини ман дар Android Studio</string>
 Акнун барои TextView-ро бо @string resource-и сохташуда пайваст кардан,
 дар файли қолаб ба ҷойи сатри, android:text="Hello world!"> сатри 
 android:text="@string/mystr">-ро менависем. 
 Илова бар усули нишон дода шуда, метавон тавассути коди барнома ба ком-
 поненти мазкур матнеро бахшид. Барои иҷрои ин амал аз методи setText() исти-
 фода бурда мешавад. Барои ин дар методи onCreate фармонҳои зеринро менави-
 сем: 
 TextView textView = (TextView)findViewById(R.id.textView); 
 // Бахшидани матн 
 textView.setText("Барномаи нахустини ман дар Android Studio!"); 
 //ё бо истифода аз манбаҳои матнӣ 
 textView.setText (R.string.mystr); 
 Компоненти мазкур дорои атрибутҳои зиёде мебошад, ки ҳоло якчандтои 
 онҳоро дида мебароем: 
 android:textsize- андозаи матн. Барои муқаррар кардани андозаи матн 
 якчанд воҳидҳои ченкунӣ истифода мешаванд, ба монанди: px (пиксел), dp,
 sp, in (дюйм), pt, mm. Барои матн маслиҳат дода мешавад, ки аз sp: 
 android:textSize="sp", ки аналоги методи setTextSize() мебошад, 
 истифода карда шавад. 
 android:textstyle- услуби матн. Барои муайянкунии услуби (стили) матн
 метавон аз доимиҳои: normal, bold, italic истифода кард. Масалан, фармони,
 android:textStyle="bold" матнро ба сурати ғафс (bold) хориҷ мекунад.
 android:textcolor- ранги матн. Чор қолабро дар шакли системаи ҳисоби
 шонздаҳӣ истифода мебарад: #RGB; #ARGB; #RRGGBB; #AARRGGBB, 
 дар ин ҷо R, G, B — мувофиқан рангҳои сурх (Red), сабз (Green), обӣ (Blue),
 А — шафофият (alpha-канал). Агар қимати А, ба сифр () баробар бошад,
 он гоҳ маънои % шафофиятро дорад. 
 Барои ҳамаи ин атрибутҳо дар класси TextView барои хондан низ методҳо
 мавҷуданд. 
 Дар ҳолати пешфарзӣ барои компоненти TextView ранги замина мавҷуд 
 намебошад. Барои муайян кардани ранг, қимати Drawable барои атрибути 
 android:background бахшида мешавад. Ба сифати қимати Drawable метавон расм
 ё фигураҳои XML-инъикосҳо (представление) ба монанди манбаҳои Drawable (ки
 дар папкаи res/drawable ҷойгиранд)-ро бахшид. 
 Дар баъзе ҳолатҳо зарурати аз коди барнома ивазкунии заминаи компонент
 пеш меояд. Барои иҷрои ин амал чунин рафтор карда мешавад: бигзор дар манбаи
 матнӣ ранги сабз ба сурати зерин муаррифӣ карда шуда бошад. 
 <color name="myBackground">#FF</color> 
 Коди зерин дорои хатогӣ мебошад: 
 textview.setBackgroundColor(R.color. myBackground); 
 Ба ҷойи ин сатр метавон яке аз ду варианти дар поён овардашударо 
 истифода кард: 
 textView.setBackgroundResource (R.color. myBackground); // варианти 
 tv.setBackgroundColor (getResources ().getColor (R.color. myBackground)); // вари-
 анти 
 Агар хоҳем ки TextView ҳодисаи пахшкунӣ (атрибути android:onClick)-ро
 коркард кунад, он гоҳ зарур аст, қимати атрибути android:clickable="true" кунем.
 Дар акси ҳол, кор намекунад. 
 Барои дар компонент хориҷ кардани матни иборат аз якчанд сатр аз 
 символи \n барои гузаронидан ба сатри нав истифода бурда мешавад. Масалан,
 дар файли манбаи матнӣ бигзор сатри зерин дода шуда бошад. 
 <string name="rudaki_text"> 
 Ҳеҷ шоди нест андар ин ҷаҳон,\n 
 Бартар аз дидори рӯӣ дӯстон. \n 
 Ҳеҷ талхӣ нест бар <b>дил</b> талхтар, \n 
 Аз фироқӣ дӯстони пурҳунар. 
 </string> 
 Ҳангоми иҷро намудан, барнома шакли зеринро мегирад: 
 Илова бар ин, дар коди барнома низ метавон ин амалро 
 иҷро кард. 
 textView.setText("Сатри \n Сатри \n Сатри "); 
 Тавассути атрибути android:lineSpacingMultiplier метавон
 интервали байни ду сатри компонентро муайян кард. Барои 
 хурд кардани интервали байни сатрҳо, қимати ҳақиқии хурд аз
 ва зиёдкунии интервал аз адади ҳақиқии калон аз як истифода
 бурда мешавад. 
 android:lineSpacingMultiplier="." 
 Барои зеботар кардани матни компонент метавон 
 атрибутҳои сохтани соя: shadowColor, shadowDx, shadowDy ва shadowRadius 
 истифода кард. Тавассути онҳо метавон ранги соя, ва кӯчиши онҳоро муайян 
 кард. Ҳангоми тағйирдиҳӣ бояд барнома ва эмулятор аз сари нав фаъол (иҷро)
 карда шаванд. Дар мисоли зерин соя бо ранги сурх ва кӯчиши бо пиксел ба
 тарафи амудӣ ва уфуқӣ сохта шудааст. Қайд кардан ба маврид аст, ки барои 
 кӯчиш аз воҳиди px (пиксел) истифода мешавад на аз воҳиди dp. 
 <TextView 
 android:id="@+id/hello" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:padding="dp" 
 android:text="Матни соядор" 
 android:textSize="sp" 
 android:textStyle="bold" 
 android:shadowColor="#ff" 
 android:shadowDx="" 
 android:shadowDy="" 
 android:shadowRadius=""/> 
 Натиҷаи барнома: 
 Ин барнома бо даъвати методи public void setShadowLayer 
 (float radius, float dx, float dy, int color) баробарқувва мебошад.
 Дар компоненти TextView инчунин ду хосияти шоёни 
 диққат Auto link (атрибути autoLink) ва Links clickable 
 (атрибути linksClickable) мавҷуд аст, ки имконияти ба таври
 автоматӣ сохтани истинод аз матнро фароҳам меоранд. 
 Масалан, бигзор мехоҳем дар TextView матни Сайти ман: 
 www.mysite.tj бахшида, хосиятҳои мазкурро татбиқ кунем. 
 <TextView 
 android:id="@+id/hello" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:padding="dp" 
 android:textSize="dp" 
 android:textStyle="bold" 
 android:autoLink="web" 
 android:linksClickable="true" 
 android:text="Сайти ман: www.mysite.tj" /> 
 Натиҷаи барнома: 
 Тавре ки дида мешавад, дар ин ҷо суроғаи сайт пас аз калимаи Сайти ман
 навишта шудааст. Дар ин ҳангом суроғаи сайт ба шакли истинод пешниҳод 
 мешавад, ҳангоми пахши ин истинод саҳифаи ба он вобаста кушода мешавад. 
 Истинод дар ин ҷо дорои хосияти аҷибе мебошад, агар тӯлонӣ онро пахш
 карда истем, равзана барои нусхабардорӣ кардани он пайдо мешавад. 
 Атрибути autoLink имконияти таркибӣ(combination) кардани истинодҳои 
 гуногунро барои шиносоӣ кардани веб-суроға, email, рақами телефон ва ғайраро
 фароҳам меорад. 
 Тавассути хосияти Text color link (XML-атрибут textColorLink) метавон
 ранги истинодро иваз кард, дар коди барнома бошад, аз методи setTextLinkColor()
 истифода карда мешавад. 
 Бо истифода аз класси Linkify тавассути код метавон матнро ба истинод
 мубаддал кард. 
 package com.example.user.myapplication; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.text.util.Linkify; 
 import android.widget.TextView; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 TextView txtDisplay = (TextView)findViewById(R.id.hello); 
 String data = "" + 
 "Мисоли истифодаи Linkify барои сохтани истинод дар матн:\n" + 
 "URL: http://mysite.tj \n" + 
 "Email: ali@mysite.tj \n" + 
 "Телефон: (+)---- \n" + 
 "Суроға: х. Рудаки \n"; 
 if(txtDisplay!= null) { 
 txtDisplay.setText(data); 
 Linkify.addLinks(txtDisplay, Linkify.ALL); 
 } 
 } 
 } 
 Натиҷаи барнома: 
 Ба ғайр аз доимии ALL инчунин метавон аз доимиҳои 
 Linkify.EMAIL_ADDRESSES, Linkify.MAP_ADDRESSES, 
 Linkify.PHONE_ NUMBERS низ истифода кард. Мутаассифона 
 суроғаҳои бо ҳарфи кириллӣ навишташуда шиносоӣ карда 
 намешаванд. Дар ҳолати мо индекс ҳамчун рақами телефон 
 фаҳмида шуда, суроға ва кӯча фаҳмида нашуд. 
 Дар чунин ҳолатҳо зарурати иловакунии истинод дар матн 
 пеш меояд. Масалан, дар манбаи матнӣ ба сурати зерин истинод
 муайян мекунем: 
 <string name="my_site"> <a href="www.mysite.tj"> Сайти беҳта- 
 рин оиди СО android </a> </string> 
 Манбаи сохтаамонро бо TextView бахшида лоиҳаро иҷро мекунем. Худи 
 матн ҳамчун истинод намоиш дода шуда, бо пахш кардани он ягон ҳодиса ба амал
 намеояд. Барои ҳалли ин масъала коди зеринро илова мекунем: 
 TextView textView = (TextView) findViewById(R.id.textView); 
 textView.setMovementMethod(LinkMovementMethod.getInstance()); 
 Агар зарурати қисман шаффоф кардани матн пеш ояд, он гоҳ маслиҳат дода
 мешавад, ки аз атрибути android:alpha истифода бурда шавад: 
 <TextView 
 android:textColor="#fff" 
 android:alpha="." /> 
 Атрибути textColor имконияти муқарраркунии қисман шаффофро бе аз 
 дастдиҳии маҳсулнокӣ фароҳам меорад: 
 <TextView 
 android:textColor="ffffff" /> 
 Қайд. Манбаҳои матниро баъдтар пурра мавриди баҳс қарор медиҳем. 
 Боби. Сохтори пакетҳои лоиҳа дар Android Studio 
 Пас аз сохтани барнома сохтори барнома дар Android Studio ба сурати 
 зерин пайдо мешавад: 
 Як лоиҳа метавонад аз модулҳои гуногун иборат бошад. Ба намуди 
 пешфарз дар лоиҳа як модул бо номи app мавҷуд мебошад. Модули app дорои се
 зерпапка мебошад: 
 manifests: файли манифест AndroidManifest.xml-ро нигоҳ медорад, ки 
 пайгирбанди (configuration)-и лоиҳа дар дохили он ҷойгир аст. 
 java: коди барномаро дар забони java нигоҳ медорад. 
 res: манбаҳои (resources) дар лоиҳа истифодашавандаро дар худ нигоҳ 
 медорад. 
 Илова бар ин, як элементи дигар бо номи Gradle Scripts дар лоиҳа низ мавҷуд
 буда, gradle скриптҳои гуногунро (ҳам барои модули app ва ҳам барои модулҳои
 дигар), ки барои сохтани барнома истифода мешаванд, нигоҳ медорад. 
 Gradle — системаи худкори ҳамгузорӣ (build automation system) буда, дар
 асоси принсипи Apache Ant ва Apache Maven таҳия карда шудааст. Дар Eclipse
 аз системаи Ant истифода карда мешавад. Ҳангоми навиштани барнома аксари 
 барноманависон ба он диққати ҷиддӣ намедиҳанд. Дар Android Studio ҳангоми
 таҳия намудани барнома дар ҳар қадам барноманависро Gradle ҳамроҳӣ мекунад.
 Gradle воситаи барномавӣ буда, барои автоматикунонии ҷараёни иҷроиши 
 барнома истифода бурда мешавад. Системаи мазкур ба таври автоматӣ каталоги
 тестӣ ва Apk-и тестиро дар асоси манбаҳои лоиҳа таҳия мекунад. Системаи 
 ҳамгузории мазкур дар асоси JVM сохта шудааст. Ин маънои онро дорад, ки 
 барноманавис метавонад дар Java скрипти махсуси худро навишта, дар Android
 Studio истифода барад. 
 Gradle махсус барои Android Studio сохта нашудааст. Системаи мазкур 
 қаблан коркард карда шуда, дар забонҳои Java, Scala ва ғайра истифода шудааст.
 Системаи Gradle бениҳоят системаи мувофиқ буда, дар навбати худ душвор
 аст. Фармонҳои лозимӣ дар Gradle дар асоси Groove ҳамчун матн барои 
 конфигуратсия навишта мешаванд. Барои пурра мавриди баҳс қарор додани 
 Утилит барои ба таври автоматӣ ҳамгузорӣ намудани ҷараёнҳо дар барномасозӣ истифода бурда мешавад.
 Фреймворк барои ба таври худкор, дар асоси сохтори он дар файлҳо ҳамгузорӣ намудани лоиҳа истифода
 мешавад. 
 ситемаи мазкур метавон як китоби комил навишт. Бинобар ин, дар ин ҷо онро ба
 таври мухтасар дида баромада, усули истифодаи онро меомӯзем. 
 Дар Android Studio лоиҳаи нав сохта ба сохтори лоиҳа назар меафканем, ки
 шакли зеринро дорад: 
 Дар версияҳои нав системаи Gradle дар 
 папкаи нав бо номи Gradle Script нигоҳ дошта 
 мешавад. Дар ин ҷо файли қобили таваҷҷуҳ 
 build.gradle мебошад, ки ба модул дахл дорад. Дар
 охири номи ин файл дар қавс (Module: app) 
 навишта шудааст. Агар ин файлро кушоем, 
 мӯҳтавои он шакли зеринро дорад: 
 apply plugin: ’com.android.application’ 
 android { 
 compileSdkVersion 
 defaultConfig { 
 applicationId "com.example.user.myfirstapplication" 
 minSdkVersion 
 targetSdkVersion 
 versionCode 
 versionName "." 
 testInstrumentationRunner 
 "android.support.test.runner.AndroidJUnitRunner" 
 } 
 buildTypes { 
 release { 
 minifyEnabled false 
 proguardFiles getDefaultProguardFile(’proguard-android. txt’), 
 ’proguard-rules.pro’ 
 } 
 } 
 } 
 dependencies { 
 implementation fileTree(dir: ’libs’, include: [’*.jar’]) 
 implementation ’com.android.support:appcompat-v:..’ 
 implementation ’com.android.support.constraint:constraint-lay 
 out:..’ 
 testImplementation ’junit:junit:.’ 
 androidTestImplementation ’com.android.support.test:runner:..’ 
 androidTestImplementation ’com.android.support.test.espresso:es 
 presso-core:..’ 
 } 
 Дар ин ҷо apply plugin: 'com.android.application'- маънои онро дорад, ки
 модул лоиҳа аст. Дар сурати китобхона будани он ба сурати apply plugin: 
 'com.android.library' навишта мешавад. 
 Дар блоки android бошад, версияи Sdk- и иҷрошавандаи барнома 
 (compileSdkVersion ), конфигуратсияҳои ба намуди пешфарзии лоиҳа, ба 
 монанди: идентификатори лоиҳа (applicationId "com.example.user. 
 myfirstapplication")- дар ин ҷо номи пакети лоиҳа бояд уникалӣ бошад, версияи
 минималии SDK (minSdkVersion ), версияи ҷории SDK (targetSdkVersion )-
 версияе ки ҳамгузорӣ дар он ба амал меояд, рақами версияи барнома (versionCode
 ) – ҳангоми азнавсозии лоиҳа ва аз сари нав гузоштани он дар google Play бояд
 ин рақам як воҳид зиёд карда шавад, номи версияи барнома (versionName "."),
 воситаи иҷроиш ва санҷиши барнома (testInstrumentationRunner 
 "android.support.test.runner. AndroidJUnitRunner") ва ғайра ва инчунин типи
 иҷроиши барнома, ки шомили minifyEnabled false ва proguardFiles 
 getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' мебошад,
 навишта мешавад. 
 android { 
 compileSdkVersion 
 defaultConfig { 
 applicationId "com.example.user.myfirstapplication" 
 minSdkVersion 
 targetSdkVersion 
 versionCode 
 versionName "." 
 testInstrumentationRunner 
 "android.support.test.runner.AndroidJUnitRunner" 
 } 
 buildTypes { 
 release { 
 minifyEnabled false 
 proguardFiles getDefaultProguardFile(’proguard-android.txt’), 
 ’proguard-rules.pro’ 
 } 
 } 
 } 
 Дар бахши вобастагӣ (dependencies) бошад, чунин фармонҳо мавҷуданд:
 пиёдасозии имконияти истифодаи Jar-файлҳо- implementation fileTree(dir:
 'libs', include: ['*.jar']); 
 пиёдасозии имконияти китобхонаи appcompat - implementation 
 'com.android.support:appcompat-v:..'; 
 пиёдасозии имконияти истифодабарии ConstraintLayout - implementation
 'com.android.support.constraint:constraint-layout:..'; 
 барои тесткунии барнома директиви 'junit:junit:.' мавҷуд аст - 
 testImplementation 'junit:junit:.'; 
 китобхонаи пиёдасозии санҷиши (тестирование) барнома - 
 androidTestImplementation 'com.android.support.test:runner:..'; 
 китобхонаи пиёдасозии санҷиши (тестирование) барнома тавассути 
 китобхонаи espresso - androidTestImplementation 'com.android.support.
 test.espresso: espresso-core:..'. 
 dependencies { 
 implementation fileTree(dir: ’libs’, include: [’*.jar’]) 
 implementation ’com.android.support:appcompat-v:..’ 
 implementation ’com.android.support.constraint:constraint-layout:..’
 testImplementation ’junit:junit:.’ 
 androidTestImplementation ’com.android.support.test:runner:..’ 
 androidTestImplementation ’com.android.support.test.espresso:espresso- 
 core:..’ 
 } 
 Қайд. То версияи Android Studio. ба сифати Implementation аз фармони
 compile истифода бурда мешуд. 
 Илова бар ин, дар gradle файли дигар бо номи 
 build.gradle(Project:MyFirstApplication) низ мавҷуд аст, ки мӯҳтавои он шакли
 зеринро дорад: 
 buildscript { 
 repositories { 
 google() 
 jcenter() 
 } 
 dependencies { 
 classpath 'com.android.tools.build:gradle:..' 
 } 
 } 
 allprojects { 
 repositories { 
 google() 
 jcenter() 
 } 
 } 
 task clean(type: Delete) { 
 delete rootProject.buildDir 
 } 
 Ба таври пешфарз файли мазкур аз се бахш иборат аст: buildscript, 
 allprojects ва task clean. Дар бахши buildscript плагинҳои зарурие, ки дар лоиҳа
 истифодашаванда, нишон дода мешаванд. Дар ин бахш манбаи иҷроиши барнома 
 низ нишон дода мешавад. 
 Дар ин ҷо jcenter() ба Android Studio мегуяд, ки вобастагии лозимиро аз
 репозитори jCenter ҷустуҷӯ кунад. Ба ҳамин монанд бо истифода аз дастури зерин
 вобастагии Maven Central навишта мешавад: 
 allprojects { 
 repositories { 
 mavenCentral() 
 } 
 } 
 Версияҳои нави Android Studio ба таври пешфарз аз jCenter истифода 
 мекунанд, сабаб дар он аст, ки боргузории китобхонаҳо дар Maven Central аз
 ҷониби таҳиягар меҳнати зиёдро талаб мекунанд. jCenter –яке аз 
 нигоҳдорандаҳои (хранилищем) бузурги китобхонаҳои Java ба ҳисоб меравад. 
 Қайд кардан ба маврид аст, ки jCenter ва Maven Central аз нуқтаи назари физикӣ
 серверҳои гуногун буда, мавҷудияти ягон китобхона дар яке аз онҳо, кафолати
 мавҷудияти онро дар дигараш намедиҳад. 
 Бахши пайгирандаи "buildscript" барои худи gradle пешбинӣ шудааст. 
 Дар ин бахш нишон дода мешавад, ки чӣ гуна gradle бояд ҳамгузориро иҷро 
 кунад. Ҳамин тариқ, ин бахш плагини Android gradle.- ро дарбар мегирад. 
 Бахши "allprojects" бошад, барои модулҳои дар асоси Gradle таҳияшуда
 истифода бурда мешавад. 
 Дар бахши task clean(type: Delete) бошад, система пас аз иҷроиши 
 барнома ҳамгузориро тоза намояд. 
 Дар файли local properties (SDK Location) бошад, мавқеи ҷойгиршавии
 пакети SDK нишон дода мешавад, яъне sdk.dir=C\:\\Users\\ User\\AppData\\
 Local\\Android\\Sdk. Қайд кардан ба маврид аст, ки дар local.properties иттилоот
 оиди мавқеи локалии ҷойгиршавии SDK нигоҳ дошта мешавад. Ин маънои онро 
 дорад, ки барномасоз наметавонад ин файлро зери идораи манба (источник) 
 нигоҳ доред. 
 Дар файли gradle-wrapper.properties (Gradle Version) бошад, версияи
 Gradle муайян карда мешавад. Ин файл ба дигар истифодабарандагон 
 (барномасозон) имконият медиҳад, ки коди Шуморо таҳия кунанд, ҳарчанд ки 
 онҳо дар машинашон Gradle насб накарда бошанд. Илова бар ин файли мазкур 
 дуруст насб будани версия Gradle-ро тафтиш карда, дар сурати лозимӣ ба таври
 автоматӣ онро боргузорӣ мекунад. 
 Мӯҳтавои файли мазкур шакли зайлро дорад: 
 distributionBase=GRADLE_USER_HOME 
 distributionPath=wrapper/dists 
 zipStoreBase=GRADLE_USER_HOME 
 zipStorePath=wrapper/dists 
 distributionUrl=https\://services.gradle.org/distributions/gradle- 
 Файли settings.gradle – ба ҳамаи модулҳое ки барнома аз он таркиб 
 ёфтааст, истинод мекунад. Мӯҳтавои он шакли зеринро дорад: 
 include ':app' 
 Файли gradle.properties(Хосияти лоиҳа) – дар ин файл иттилоот оиди 
 конфигуратсияи лоиҳа нигоҳ дошта мешаванд. Ба намуди пешфарз ин файл холӣ
 буда, барномасоз метавонад ба он ҳамаи спектри хосиятҳои лозимиро татбиқ 
 карда, илова намояд. 
 # Project-wide Gradle settings. 
 # IDE (e.g. Android Studio) users: 
 # Gradle settings configured through the IDE *will override* 
 # any settings specified in this file. 
 # For more details on how to configure your build environment visit 
 # http://www.gradle.org/docs/current/userguide/build_environment.html 
 # Specifies the JVM arguments used for the daemon process. 
 # The setting is particularly useful for tweaking memory settings. 
 org.gradle.jvmargs=-Xmxm 
 # When configured, Gradle will run in incubating parallel mode. 
 # This option should only be used with decoupled projects. More de- 
 tails, visit 
 # http://www.gradle.org/docs/current/userguide/multi_pro- 
 ject_builds.html#sec:decoupled_projects 
 # org.gradle.parallel=true 
 Ҳар як лоиҳа дар Android дорои файли манифест (AndroidManifest.xml) 
 мебошад. Дар файли мазкур иттилооти муҳим оиди лоиҳа нигоҳ дошта мешаванд,
 ба монандӣ: ном(name), версия (version), нишона (icon), хизматрасониҳо, 
 иҷозатнномаи лоиҳа (разрешения приложение), бақайдгирии ҳамаи классҳои 
 activity ва ғайра. 
 Файли мазкур метавонад, шакли зеринро дошта бошад: 
 <?xml version="." encoding="utf-"?> 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
 package="com.example.user.myfirstapplication"> 
 <application 
 android:allowBackup="true" 
 android:icon="@mipmap/ic_launcher" 
 android:label="@string/app_name" 
 android:roundIcon="@mipmap/ic_launcher_round" 
 android:supportsRtl="true" 
 android:theme="@style/AppTheme"> 
 <activity android:name=".MainActivity"> 
 <intent-filter> 
 <action android:name="android.intent.action.MAIN" /> 
 <category android:name="android.intent.category.LAUNCHER" /> 
 </intent-filter> 
 </activity> 
 </application> 
 </manifest> 
 Элементи асосӣ (сатҳи боло) дар ин ҷо теги manifest ба ҳисоб меравад. Дар
 ин ҷо пакети лоиҳаро муайян кардааст 
 package="com.example.user.myfirstapplication". 
 Аксар танзимоти лоиҳаро элементи application муайян мекунад. Масалан,
 нишонаи лоиҳа тавассути атрибути android:icon="@mipmap/ic_launcher" 
 мушаххас карда мешавад, ки дар каталоги res/mipmap-xxxx ҷойгир аст. Номи 
 лоиҳа бошад, тавассути атрибути android:label="@string/app_name" муайян карда
 мешавад. Дар ин ҷо app_name манбаи сатрӣ буда, дар файли strings.xml нигоҳ
 дошта мешавад. Атрибути android:allowBackup="true" бошад иҷозати 
 нусхабардории эҳтиётии лоиҳа ва барқароркунии инфраструктураи онро фароҳам
 меорад. Барои истифода намудани нишонаи даврашакл аз атрибути 
 android:roundIcon="@mipmap/ic_launcher_round" истифода бурда мешавад. 
 Атрибути android:supportsRtl="true" имконияти пуштибонии макети RTL (Right-
 to-Left)-ро фароҳам меорад. Ин атрибут сар карда аз API пайдо шуда, 
 имконияти аз тарафи рост ба чап навиштани матнро (алифбои арабӣ, урдуӣ, 
 яҳудӣ) фароҳам меорад. Атрибути android:theme= "@style/AppTheme" бошад, 
 мавзӯӣ лоиҳаро муайян мекунад. Дар ин ҷо AppTheme стилест, ки дар файли 
 styles.xml (зеркаталогӣ res/values) ба сурати зерин муайян карда шудааст:
 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
 Элементи мураккаби activity ҳамаи activity – ҳои дар лоиҳа 
 истифодашавандаро муайян мекунад. Дар айни ҳол, дар лоиҳа танҳо як activity
 – MainActivity истифода бурда мешавад. 
 Элементи intent-filter дар MainActivity чӣ тавр истифода шудани activity-
 ро муайян мекунад. Дар ҳолати хусусӣ тавассути теги action 
 android:name="android.intent.action.MAIN" гуфта мешавад, ки activity-и мазкур
 ҳамчун нуқта вуруд ба барнома истифода шавад. Теги category 
 android:name="android.intent.category.LAUNCHER" маънои онро дорад, ки 
 MainActivity ҳамчун экрани нахустин ҳангоми иҷроиши барнома намоиш дода 
 шавад. 
 Дар файли манифест элементҳои ҳатмӣ <manifest> ва <application> ба 
 ҳисоб мераванд. Элементҳои мазкур бояд дар дохили файли манифест як 
 маротиба мавҷуд бошад. 
 Элементҳо метавонанд дар сатҳҳои гуногун истифода шаванд. Дар поён 
 тартиби гузоштани элементҳо оварда шудааст: 
 <action> 
 <activity> 
 <activity-alias> 
 <application> 
 <category> 
 <data> 
 <grant-uri-permission> 
 <instrumentation> 
 <intent-filter> 
 <manifest> 
 <meta-data> 
 <permission> 
 <permission-group> 
 <permission-tree> 
 <provider> 
 <receiver> 
 <service> 
 <supports-screens> 
 <uses-configuration> 
 <uses-feature> 
 <uses-library> 
 <uses-permission> 
 <uses-sdk> 
 Элементҳои дар як сатҳ истифодашаванда метавонанд бо тартиби дилхоҳ 
 ҷойгир бошанд. Масалан, элементҳои <activity>, <provider> ва <service>-ро
 метавон бо дилхоҳ тартиб навишт. Элементи <activity-alias> аз қоида истисно
 буда, бояд пас аз элементи <activity>, ҷойгир бошад. 
 Дар поён барои беҳтар шинос шудан, сохтори умумии файли манифестро 
 меорем: 
 <?xml version="." encoding="utf-"?> 
 <manifest> 
 <uses-permission /> 
 <permission /> 
 <permission-tree /> 
 <permission-group /> 
 <instrumentation /> 
 <uses-sdk /> 
 <uses-configuration /> 
 <uses-feature /> 
 <supports-screens /> 
 <compatible-screens /> 
 <supports-gl-texture /> 
 <application> 
 <activity> 
 <intent-filter> 
 <action /> 
 <category /> 
 <data /> 
 </intent-filter> 
 <meta-data /> 
 </activity> 
 <activity-alias> 
 <intent-filter>... </intent-filter> 
 <meta-data /> 
 </activity-alias> 
 <service> 
 <intent-filter>... </intent-filter> 
 <meta-data/> 
 </service> 
 <receiver> 
 <intent-filter>... </intent-filter> 
 <meta-data /> 
 </receiver> 
 <provider> 
 <grant-uri-permission /> 
 <meta-data /> 
 <path-permission /> 
 </provider> 
 <uses-library /> 
 </application> 
 </manifest> 
 Яке аз компонентҳои асосие, ки дар Android барои сохтани интерфейси 
 визуалӣ истифодашаванда activity (фаъолият ё активность) ба ҳисоб меравад.
 Компоненти мазкурро метавон, ба сурати равзанаи алоҳида ё равзанаи лоиҳа, ки
 дар он имконияти гузоштани элементҳои идоракунандаи гуногун мавҷуд аст. Як
 лоиҳа метавонад дороя як ё якчанд activity бошад. Ҳамаи барномаҳои мавриди
 баҳс қарордодаамон (умуман ҳамаи лоиҳаҳои Android ) бо класси MainActivity
 оғоз мешаванд: 
 public class MainActivity extends AppCompatActivity { 
 //Мӯҳтавои класс 
 } 
 Ҳамаи объектҳои activity худро ҳамчун объекти класси android.app.Activity,
 ки дорои имкониятҳои функсионалӣ барои ҳамаи activity-ҳо мебошад, ҳисоб 
 мекунанд. 
 Қайд кардан ба маврид аст, ки класси MainActivity меросбари класси 
 AppCompatActivity буда, худи AppCompatActivity бошад, меросбар аз класси 
 Activity мебошад. 
 Активитиро метавон ба сурати равзанаи муколамавӣ сохт: 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setTitle("Activity"); 
 TextView tv = new TextView(this); 
 tv.setText("Ман активитӣ мебошам!"); 
 tv.setPadding(,,, ); 
 setContentView(tv); 
 } 
 Активитиро метавон тавассути код низ таҳия кард. Дар поён усули сохтани
 чунин активитиро дида мебароем. 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 //Муаррифӣ намудани LinearLayout 
 LinearLayout layout = new LinearLayout(MainActivity.this); 
 //Муқаррар кардани идентификатор барои LinearLayout 
 layout.setId(R.id.layout_id); 
 //Муайянкунии параметрҳои layout 
 ViewGroup.LayoutParams layoutParams = new ViewGroup. 
 LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
 ViewGroup.LayoutParams.MATCH_PARENT); 
 layout.setLayoutParams(layoutParams); 
 //Муқарраркунии самтивазкунии layout 
 layout.setOrientation(LinearLayout.VERTICAL); 
 //Муаррификунии элементи идоракунандаи ImageView 
 ImageView imageView = new ImageView(MainActivity.this); 
 //Муқаррар кардани идентификатор барои imageView 
 imageView.setId(R.id.image_id); 
 //Муайянкунии расм барои imageView 
 imageView.setImageResource(R.drawable.asp); 
 //Муқарракунии параметрҳои лозимии imageView 
 ViewGroup.LayoutParams imageViewLayoutParams = new ViewGroup. 
 LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
 ViewGroup.LayoutParams.WRAP_CONTENT); 
 imageView.setLayoutParams(imageViewLayoutParams); 
 //Дар layout илова намудани imageView 
 layout.addView(imageView); 
 //Ба экран бахшидани равзанаи сохтаамон 
 setContentView(layout); 
 } 
 Тавре ки дида мешавад, дар ин ҷо барои ҳар як қадами барнома шарҳу эзоҳ
 оварда шудааст. 
 Дар активитӣ методҳои зиёде мавҷуд мебошанд, ки ҳоло якчандтои онҳоро
 дида мебароем. 
 addContentView() – иловакунии компонент ба қолаби тайёр. 
 findViewById() – тавассути идентификатор ба даст овардани истиноди View
 finish() – ба охиррасонии кори активитӣ. 
 setContentView() – ба таври пешфарз активитӣ холӣ мебошад. Барои 
 интерфейси сохтаро барои ба қолаб мондан истифода бурда мешавад. 
 Активитӣ дорои тули зиндагии худ мебошад. Бақои зиндагии лоиҳаро 
 система сахт таҳти назорат гирифта, аз зарурати истифодабаранда, дастрасии
 манбаҳо ва ғайра вобаста мебошад. Аз ин рӯ ҳангоми иҷро намудани лоиҳа, 
 система барои он авлавияти баланд медиҳад. Ҳар як лоиҳа ба сурати як ҷараёни
 (протсесси) алоҳида фаъол мегардад. Бинобар ин, система барои як ҷараён нисбат
 ба протсессҳои дигар афзалият медиҳад. Маҳз ҳамин сабаб мегардад, ки дар вақти
 фаъол будани як лоиҳа, масалан зангҳои воридотии телефон маҳдуд карда 
 намешаванд. Пас аз анҷомрасии кори лоиҳа, система ҳамаи манбаҳои ба он 
 вобастаро озод карда, лоиҳаро ба разрияди афзалияти паст оварда, мепушонад
 (маҳкам мекунонад). 
 Ҳамаи объектҳои activity –и дар лоиҳа мавҷуд ба сурати пуштаи (стеки)
 activity идора карда мешаванд, ки back stack ном доранд. Ҳангоми иҷро намудани
 activity-и нав, он ба сатҳи болоии стек (элементи охирон) гузошта шуда, ба экран
 бароварда мешавад. Ҳангоме ки activity –и ҷорӣ корашро ба анҷом мерасонад,
 (истифодабаранда аз лоиҳа мебарояд) яъне activity аз стек нест карда мешавад ва
 элементи пеш аз он, азнав фаъол карда мешавад. 
 Ҳангоми иҷро намудани activity якчанд метод даъват карда мешаванд, ки
 онҳоро система коркард мекунад ва барои коркард кардани онҳо якчанд 
 даъватҳои баръакс мавҷуд аст. 
 protected void onCreate(); 
 protected void onStart(); 
 protected void onRestart(); 
 protected void onResume(); 
 protected void onPause(); 
 protected void onStop(); 
 protected void onDestroy(). 
 Методи onCreate() ҳангоми сохтан ва ё аз нав иҷро намудани activity даъват
 карда мешавад. Дар дохили методи мазкур интерфейсҳои статикии activity 
 танзим карда шуда, ба иттилоотҳои статикии activity қимати аввала бахшида
 мешавад. Илова бар ин, дар ин метод иттилоот ба элементҳои идоракунандаи 
 мувофиқ алоқаманд карда шуда, амалҳои дигари ба ин монанд низ иҷро карда 
 мешавад. Барои муайян кардани қолаби интерфейс аз setContentView() истифода
 бурда мешавад. 
 Методи onCreate() ба сифати параметр объекти Bundle – ро қабул мекунад.
 Объекти Bundle мӯҳтавои интерфейси истифодабарро, ки дар даъвати охирони 
 коркарди onSaveInstanceState сабт шудаст дар бар мегирад. Барои барқароркунии
 ҳолати қаблии интерфейси графикӣ бояд ба тағйирёбандаи мазкурро дар дохили
 методи onCreate() ё методи onRestoreInstanceState() аз нав муаррифӣ карда,
 бархурд намуд. 
 Ҳангоми бори аввал иҷро намудани барнома қимати тағйирёбандаи 
 savedInstanceState ба null баробар мебошад. 
 package com.example.user.myfirstapp; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 public class MainActivity extends AppCompatActivity { 
 private double currentBillTotal; 
 private String BILL_TOTAL="myKey"; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 if ( savedInstanceState == null ) 
 { 
 currentBillTotal =.; 
 } 
 else 
 { 
 currentBillTotal=savedInstanceState.getDouble(BILL_TOTAL); 
 } 
 } 
 } 
 Қимати тағйирёбандаи currentBillTotal - ро метавон дар методи 
 onSaveInstanceState() сабт кард. 
 @Override 
 protected void onSaveInstanceState(Bundle outState) { 
 super.onSaveInstanceState(outState); 
 outState.putDouble(BILL_TOTAL, currentBillTotal); 
 } 
 Дар методи onStart() activity барои ба экран зоҳир гардидан, омода 
 мешавад. Одатан методи мазкур азнавмуаррифӣ карда намешавад ва ҳамаи 
 амалиётҳои лозимӣ дар асоси коди дохилӣ ба амал меоянд. Пас аз даъвати методи
 мазкур activity ба экран бароварда шуда, методи onResume даъват карда мешавад
 ва activity ба ҳолати Resumed оварда мешавад. 
 Пас аз даъвати методи onStart() методи onRestoreInstanceState даъват карда
 мешавад, ки ҳолати дар объекти Bundle сабтшударо барқарор мекунад. Қайд 
 кардан ба маврид аст, ки ин метод фақат дар ҳолати ба null баробар будани
 объекти Bundle даъват карда мешавад. Азбаски ҳангоми бори нахуст иҷрошавии
 лоиҳа, Bundle дорои қимати null мебошад, бинобар ин методи 
 onRestoreInstanceState даъват карда намешавад. 
 Методи onResume() пас аз методи onStart() даъват карда мешавад, ҳарчанд
 ки равзана (окно) дар ҳолати реҷаи авлавият фаъол буда, дар зери назорати
 истифодабаранда бошад. Дар ин ҳолат истифодабаранда ба равзанаи сохташуда
 бархурд мекунад. Дар ин ҳолат мегӯянд,ки activity ба ҳолати Resumed гузаштааст.
 Агар ба истифодабаранда зарурати гузаштан ба дигар activity пеш ояд, он
 гоҳ система методи onPause-ро даъват мекунад. Дар ин метод метавон манбаҳои
 истифодашвандаро озод кард, ҷараёнҳоро боздошт, масалан иҷроиши аудио, 
 видео, камера ва ғайра 
 Қайд кардан ба маврид аст, ки вақти кори методи мазкур хело кам буда,
 зарурати сабт намудани ягон иттилоот пеш намеояд, хусусан ҳангоми муроҷиат
 ба шабака, яъне равон кардани иттилоот ба интернет ё муроҷиат ба пойгоҳи 
 додаҳо. 
 Пас аз иҷроиши методи мазкур activity ноайён гардида, вале корашро 
 давом медиҳад, яъне фаъол боқи мемонад. Агар истифодабаранда хоҳад, ки ба ин
 activity баргардад, пас система аз сари нав методи onResume-ро даъват мекунад
 ва activity аз нав дар экран намоиш дода мешавад. 
 Методи onSaveInstanceState пас аз методи onPause() ва пеш аз даъвати
 методи onStop() даъват карда мешавад. Дар onSaveInstanceState ҳолати лоиҳа ба
 сифати объекти Bundle равон карда шуда, нигоҳ дошта мешавад. 
 Дар методи onStop activity ба ҳолати Stopped оварда мешавад. Дар методи
 мазкур манбаҳое, ки барои истифодабаранда лозим нестанд ва бо activity бархурд
 намекунанд, озод карда мешаванд. Дар ин метод низ метавон иттилоотро масалан
 дар пойгоҳи додаҳо сабт карда, 
 Дар ин ҳолат (ҳолати Stopped) activity дар ҳофизаи таҷҳизот ҳолати ҳамаи
 элементҳои интерфейсро сабт мекунад. Масалан, агар дар майдони матнии 
 EditText ягон матн ворид карда шуда бошад, он гоҳ пас аз азнавсозии кори activity
 ва гузаштан ба ҳолати Resumed дар матн метавон аз сари нав онро мушоҳида 
 кард. 
 Агар пас аз даъвати методи onStop() истифодабаранда хоҳад, ки ба activity
 қаблӣ баргардад, система onRestart() –ро даъват мекунад. Агар activity пурра
 корашро ба охир расонида бошад, масалан бо пӯшидани лоиҳа, методи 
 onDestroy() даъват карда мешавад. 
 Даъвати методи onDestroy кори activity –ро ба анҷом мерасонад, ин амал
 ҳангоми нест кардани activity, ё даъвати методи finish() ба амал меояд. 
 Қайд кардан ба маврид аст, ки ҳангоми иваз намудани самтивазкунии экран
 система кори activity –ро ба анҷом расонида аз сари нав онро бо даъвати методи
 onCreate() месозад. 
 Дар ҳолати умумӣ гузариш байни ҳолатҳои activity метавонад шакли 
 зеринро дошта бошад: 
 Одатан дар амал бештар методҳои onCreate(), onResume() ва onPause() 
 истифода бурда мешаванд. Методи onCreate() ҳангоми сохтани интерфейси 
 истифодабар даъват карда мешавад. Методи мазкур имконияти алоқаманд 
 кардани иттилоотро ба компонентҳо ва сохтани ҳодиса барои компонентҳои 
 интерфейсро фароҳам меорад. Тавассути методи onPause() бошад, метавон 
 иттилооти муҳимро дар пойгоҳи додаҳои лоиҳа сабт кард. Ин метод бехатарии
 охирон мебошад, ки пеш аз анҷомрасии кори лоиҳа даъват карда мешавад. 
 Даъвати методи onDestroy() ҳатмӣ намебошад, аз ин рӯ барои амалисозии 
 логикаи критикӣ ба ин метод такя кардан маслиҳат дода намешавад. 
 Ҳоло мисолеро дида мебароем, ки дар он ҳамаи методҳои мавриди баҳс 
 қарордодаамон истифода шуда, пайғоми лозимӣ хориҷ карда мешавад. 
 Ибтидо файли activitymain.xml-ро ба сурати зерин омода мекунем. 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <TextView 
 android:id="@+id/textViewInfo" 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:ems="" 
 android:inputType="textPersonName" 
 android:singleLine="false" 
 app:layout_constraintTop_toTopOf="parent" 
 tools:ignore="MissingConstraints" 
 tools:layout_editor_absoluteX="dp" /> 
 <Button 
 android:id="@+id/buttonInfo" 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:layout_marginTop="dp" 
 android:text="Info" 
 android:onClick="onClick" 
 app:layout_constraintTop_toBottomOf="@+id/textViewInfo" 
 tools:ignore="MissingConstraints" 
 tools:layout_editor_absoluteX="dp" /> 
 <Button 
 android:id="@+id/buttonOk" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_marginTop="dp" 
 android:text="Ok" 
 android:inputType="textMultiLine" 
 android:onClick="onClick" 
 app:layout_constraintTop_toBottomOf="@+id/buttonInfo" 
 tools:ignore="MissingConstraints" 
 tools:layout_editor_absoluteX="dp" /> 
 <Button 
 android:id="@+id/buttonExit" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_marginTop="dp" 
 android:text="Exit" 
 android:inputType="textMultiLine" 
 android:onClick="onClick" 
 app:layout_constraintTop_toBottomOf="@+id/buttonOk" 
 tools:ignore="MissingConstraints" 
 tools:layout_editor_absoluteX="dp" /> 
 </android.support.constraint.ConstraintLayout> 
 Сипас, коди барномаро ба чунин шакл менависем: 
 package com.example.user.myfirstapp; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.widget.TextView; 
 public class MainActivity extends AppCompatActivity { 
 private String info = "Тӯли зиндагӣ: \n"; 
 private TextView mInfoTextView; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 mInfoTextView = (TextView) findViewById(R.id.textViewInfo); 
 info=info+ "onCreate() \n "; 
 } 
 @Override 
 protected void onStart() { 
 super.onStart(); 
 info=info+ "onStart() \n"; 
 } 
 @Override 
 protected void onResume() { 
 super.onResume(); 
 info=info+ "onResume() \n"; 
 } 
 @Override 
 protected void onPause() { 
 super.onPause(); 
 info=info+ "onPause() \n"; 
 } 
 @Override 
 protected void onStop() { 
 super.onStop(); 
 info=info+ "onStop() \n"; 
 } 
 @Override 
 protected void onRestart() { 
 super.onRestart(); 
 info=info+ "onRestart() \n"; 
 } 
 @Override 
 protected void onDestroy() { 
 super.onDestroy(); 
 info=info+ "onDestroy() \n"; 
 } 
 public void onClick(View v) { 
 switch (v.getId()) { 
 case R.id.buttonInfo: 
 mInfoTextView.setText(info); break; 
 case R.id.buttonOk: 
 mInfoTextView.setText("Лоиҳа аллакай фаъол гардид!"); 
 break; 
 case R.id.buttonExit: 
 finish(); 
 break; 
 default: 
 break; 
 } 
 } 
 } 
 Барномаро иҷро карда, натиҷаро мушоҳида мекунем, ки он шакли зеринро
 дорад: 
 Ҳангоми пахш намудани тугмачаи Оk дар майдони матнӣ пайғоми “Лоиҳа 
 аллакай фаъол гардид!" пайдо мегардад. 
 Агар тугмачаи ба хонаро пахш карда, бори дигар ба лоиҳа баргардем мебинем, ки
 матни дар майдони матнӣ буда нест нашудааст. Ин маънои онро дорад, ки лоиҳа
 пурра пӯшида нашудааст. 
 Барои беҳтар дар хотир нигоҳ доштан, методҳои мавриди баҳс қарор 
 додаамонро ҳамчун хулоса ба сурати зерин меорем: 
 Иҷро намудани барнома:onCreate() → onStart() → onResume(); 
 пахш кардани тугмачаи ба қафо, барои баромадан аз лоиҳа: onPause() →
 onStop() → onDestroy(); 
 пахш кардани тугмачаи ба хона: onPause() → onStop(); 
 пас аз пахши тугмачаи ба хона, ҳангоме ки лоиҳа аз руйхати лоиҳаҳои 
 қаблан кушодашуда ё нишона кушода мешавад: onRestart() → onStart() →
 onResume(); 
 ҳангоми кушодани лоиҳаи дигар аз минтақаи хабардоркунӣ ё кушодани 
 лоиҳаи танзимот:onPause() → onStop(); 
 пахши тугмачаи ба қафо дар дигар лоиҳа ё танзимот, ки лоиҳа аз нав аён
 мегардад: onRestart() → onStart() → onResume(); 
 кушодани равзанаи муколамавӣ: onPause(); 
 пӯшидани равзанаи муколамавӣ: onResume(); 
 ҳангоми дар телефон занг задан: onPause() → onResume(); 
 ҷавоб додани занги телефон: onPause(); 
 ба охир расонидани гуфтугӯ: onResume(); 
 хомуш гардидани экрани телефон: onPause() → onStop(); 
 аз сари нав фаъол гаштани экран: onRestart() → onStart() → onResume().
 Қайд кардан ба маврид аст, ки дар планшетҳои чинӣ метавон коркарди 
 методҳои дигарро низ мушоҳида кард ва ё ин ки баъзе методҳо кор намекунанд.
 Ҳангоми тоб додан активитӣ тавассути занҷираи ҳолатҳои гуногун тағйир
 меёбад, ки тартиби онҳо чунин аст: 
 onPause(); 
 onStop(); 
 onDestroy(); 
 onCreate(); 
 onStart(); 
 onResume(). 
 Тартиби даъват: 
 баъди onCreate() - onStart(); 
 баъди onRestart() - onStart(); 
 баъди onStart() - onResume() ё onStop(); 
 баъди onResume() - onPause(); 
 баъди onPause() - onResume() ё onStop(); 
 баъди onStop() - onRestart() ё onDestroy(); 
 баъди onDestroy() – ягон метод мавҷуд нест. 
 Захираҳо (resources)– яке аз ҷузъҳои асосӣ буда, дар Android барномасозӣ
 истифодаи васеъ доранд. Дар манбаъҳо метавон объектҳои гуногунро нигоҳ дошт
 – расмҳо, доимиҳои сатрӣ, рангҳо, аниматсияҳо, услубҳо ва ғайра. Системаи
 Android Studio нигоҳдории манбаҳоро дар файлҳои алоҳида пуштибонӣ мекунад.
 Манбаҳоро метавон ба таври сода, азнавсозӣ ва тағйир дод. 
 Ҳар як лоиҳа дар Android дорои каталог барои нигоҳдории манбаҳо, res ва
 каталог барои нигоҳдории активҳо assets мебошад. Фарқияти асосӣ байни актив
 ва манба чунин мебошад: 
 иттилоот дар каталоги манба, тавассути класси R, ки тавассути лоиҳа ба
 таври автоматӣ сохта мешавад ба лоиҳа дастрас карда мешаванд, яъне 
 файлҳо ва манбаҳои дар каталоги res мавҷуд буда, ба таври сода барои
 истифода аз коди барнома дастрас карда мешаванд; 
 барои хондани иттилооти файлҳои активӣ аз каталоги assets зарур аст, ки
 барои хондан ҳамчун ҷараёни байтӣ аз AssetManager истифода карда 
 шавад. 
 Android метавонад ба таври динамикӣ аз дарахти манбаҳо ба таври автоматӣ
 конфигуратсия, забон ва минтақаи гуногунро интихоб кунад (ба даст орад). 
 Ҳангоми иҷроиши Android ба таври автоматӣ манбаи лозимӣ бе истифодаи ягон
 сатр код, боргузорӣ карда мешавад. 
 Манбаҳо дар Android декларативӣ мебошанд. Одатан онҳо ба шакли XML- 
 файлҳо дар каталоги res бо зеркаталогҳои values, drawable-ldpi, drawable-mdpi,
 drawable-hdpi, layout ва ғайра нигоҳ дошта мешаванд. 
 Барои осонии кор, система идентификаторҳои манбаро дар файли R.java 
 (класси R, ки дар он истинод ба ҳама манбаҳои лоиҳа мавҷуд аст) месозад, ки
 имконияти истинод кардан дар дохили коди барномаро фароҳам меорад. 
 Класси статикии R дар асоси манбаҳои додашуда, дар вақти иҷроиши барнома
 сохта мешавад. Ҳангоми сохтани класс ба таври статикӣ зеркласс барои ҳама
 типи манбаҳо мавҷуд аст. 
 Аз баски файли R ба таври автоматӣ таҳия карда мешавад, бинобар ин ба
 таври дастӣ таҳрир кардани он аз мантиқ берун аст. 
 Дар ҳолати умумӣ манбаҳо файлеро (масалан, расмҳо) ё қиматҳоеро 
 (масалан, сарлавҳаи барнома) ифода мекунанд, ки ба лоиҳаи сохташуда 
 алоқаманд мебошанд. Бартарии манбаҳо аз он иборат аст, ки онҳоро метавон бе
 такроран иҷрошавӣ ё бе таҳияи лоиҳаи нав тағйир дод. Номи файли манба бояд
 бо ҳарфи хурд навишта шавад. 
 Манбаҳои бисёртар истифодашаванда сатрҳо (strings), рангҳо (colors),
 услубҳо(styles) ва расмҳои графикӣ (bitmap) мебошанд. Дар лоиҳаҳои андроид
 маслиҳат дода мешавад, ки қиматҳои лозимӣ ба намуди манба навишта шаванд,
 зеро дар вақти зарурӣ танҳо файлҳои мазкурро тағйир додан (бе тағйирдиҳии
 коди лоиҳа) кифоя мебошад. 
 Одатан дар Android ду усули сохтани манба мавҷуд аст. Аввалан, манба дар
 дохили файл навишта мешавад, пас дар ин ҳолат номи файл нақш намебозад. 
 Сониян, манба ба шакли файл дода мешавад. Дар ин сурат номи файл роли калон
 мебозад. 
 Сохтори асосии файлҳои манба шакли зеринро дорад: 
 /res/values/strings.xml 
 /colors.xml 
 /dimens.xml 
 /attrs.xml 
 /styles.xml 
 /drawable/*.png 
 /*.jpg 
 /*.gif 
 /*..png 
 /anim/*.xml 
 /layout/*.xml 
 /raw/*.* 
 /xml/*.xml 
 /assets/*.*/*.* 
 Танҳо дар assets метавонад дилхоҳ набори зеркаталогҳо нигоҳ дошта 
 шавад. Файлҳои дар дилхоҳ каталоги дигар буда, низ дар сатҳи ин каталог оварда
 (гузошта) мешаванд. 
 Манбаҳои асосии Android дар ҷадвали зерин оварда шудаанд 
 Типи манба Мавқеи Маъно ва мафҳум 
 ҷойгиршавӣ 
 Рангҳо res/values/номи_файл Идентификатори рангҳо. ID-и 
 ин навъ манбаҳо дар R.java ба 
 сурати R.color.*. XML-шоха 
 ифода мегарданд: 
 /resources/color 
 Сатрҳо res/values/номи_файл Манбаҳои матнӣ. Дар ин навъ 
 манбаъҳо сатрҳо дар қолаби 
 java ва html низ дохил 
 мешаванд. ID-и чунин навъ 
 манбаҳо дар R.java ҳамчун 
 R.string.* XML-шоха ифода 
 карда мешаванд: 
 resources/string. 
 Меню /res/menu/номи_файл Меню дар лоиҳа метавонад ба 
 сурати XML-манбаъҳо нигоҳ 
 дошта шавад. 
 Параметрҳо /res/values/номи_файл Параметр ё андозаи элементҳои 
 гуногунро ифода мекунад. 
 Воҳидҳои ченаки гуногун ба 
 монанди дюймҳо, 
 миллиметрҳо, аз зичии экран 
 новобаста (dip), пикселҳо ва 
 ғайра. ID-и чунин манбаҳо дар 
 R.java ҳамчун R.dimen.*. XML- 
 шоха ифода карда мешаванд: 
 resources/dimen 
 Расмҳо /res/drawable/ Манбаҳои расмӣ (аксҳо). 
 номи_файлҳо Файлҳои қолаби JPG, GIF, PNG 
 ва ғайраро пуштибонӣ мекунад. 
 Ҳар як расм ба сурати файли 
 алоҳида нигоҳ дошта мешавад 
 ва дорои идентификатори ягона 
 мебошад, ки тавассути номи 
 файл бе пасванди он таҳия 
 карда мешавад. ID-и чунин 
 манбаҳо дар R.java ба сурати 
 R.drawable.* ифода карда 
 мешаванд. 
 Рангҳои тасвиршуда /res/values/ Рангҳои чоркунҷашаклро 
 номи_файлҳо ифода мекунад, ки ба сифати 
 ё заминаи объектҳои тасвиршуда 
 /res/drawable/ истифода бурда мешаванд, 
 номи_файлҳо масалан, расмҳои нуқтагӣ. ID- 
 и чунин манбаҳо дар R.java 
 ҳамчун R.drawable.* ифода 
 карда мешавад. ХМL-шоха 
 барои чунин файлҳо чунин 
 мебошад: /resources/drawable. 
 Android дар файлҳои махсуси 
 ХМL, ки дар /res/drawable, 
 ҷойгир мебошанд, 
 росткунҷаҳои даврашакл ва 
 росткунҷаҳои градиентиро низ 
 пуштибонӣ мекунад. ХМL-теги 
 асосӣ барои drawable <shape> 
 ба ҳисоб меравад. 
 Идентификаторҳои чунин 
 манбаҳо дар файли R.java ба 
 сурати R.drawable.* ифода 
 карда мешаванд. Дар ин ҳолат 
 номи ҳар як файл ба шакли 
 идентификатори ягона табдил 
 дода мешавад. 
 Аниматсияҳо /res/anim/ Android метавонад, аниматсияи 
 номи_файлҳо содаро барои графикҳо ё 
 маҷмӯӣ расмҳо иҷро кунад. 
 Аниматсия метавонад дар худ 
 гардишҳо, пайдарпай 
 ивазшавӣ, ҳаракатҳо ва 
 ғайрарро дар бар гирад. 
 Файлҳои гуногуни /res/xml/*.xml Дар Android ба сифати манба 
 XML метавон аз файлҳои XML исти- 
 фода кард. Онҳо дар aapt 
 компилятсия мешаванд. Иден- 
 тификаторҳои чунин манбаҳо 
 дар файли R.java ҳамчун 
 R.xml.* ифода карда мешаванд. 
 Манбаҳои гуногуни /res/raw/*.* Дилхоҳ файлҳои 
 коркарднакардашуда компилятсиянашавандаи дуӣ ва 
 матнӣ. Ба монанди видео, аудио 
 ва ғайра. Идентификаторҳои 
 чунин манбаҳо дар файли 
 R.java ҳамчун R.raw.* ифода 
 карда мешаванд. 
 Активҳои гуногуни /assets/*.*/*.* Метавон файлҳои гуногунро 
 коркарднакардашуда дар каталогҳои гуногун, ки дар 
 зеркаталоги /assets ҷойгиранд, 
 истифода кард. Инҳо манба 
 набуда, фақат файлҳои 
 коркарднашаванда мебошанд. 
 Дар ин каталог баръакси 
 каталоги /res, зеркаталогҳо 
 метавонанд дар умқҳои гуногун 
 ҷойгир бошанд. Барои чунин 
 файлҳо идентификатори манба 
 сохта намешавад. Ҳангоми кор 
 кардан аз номи нисбии онҳо, ки 
 роҳи файл аз /assets оғоз 
 меёбад истифода карда 
 мешавад. 
 Идентификаторҳо 
 Ин гуна манбаҳо ба таври автоматӣ таҳия карда мешаванд. Аз ин рӯ баъзан
 барномасоз ба онҳо он қадар эътибор ҳам намедиҳад. Масалан, ҳангоми дар экран
 гузоштани Button ба таври автоматӣ идентификатори он ба сурати @+id/button
 (android:id="@+id/button") сохта мешавад. Барои аз барнома дастрас шудан ба ин
 элемент аз дастури R.id. button истифода бурда мешавад. 
 Илова бар ин, метавон манбаи типи item барои id-и додашуда сохт, ки ба
 ягон манба алоқаманд намебошад: 
 <resources> 
 <item type="id" name="Mytext"/> 
 </resources> 
 Дар ин ҷо type типи манбаро ифода мекунад, ки дар айни ҳол он id 
 мебошад. Манбаҳои сатрӣ асосан барои содакунии версияи маҳаллисозишудаи 
 барнома истифода мешаванд. Манбаҳои сатрӣ дар дохили теги <string> навишта
 мешаванд. 
 Дар Android Studio ҳангоми сохтани лоиҳа ба таври пешфарз дар файли 
 string.xml (/res/values/string.xml) манбаи матнии зерин сохта мешавад: 
 <resources> 
 <string name="app_name">MyFirstApplication</string> 
 </resources> 
 Дар ин ҷо MyFirstApplication номест, ҳангоми сохтани лоиҳа дар равзанаи
 зерин навишта мешавад. 
 Ҳангоми сохтани манбаи матнӣ, муҳити коркард ба таври автоматӣ класси
 R.java-ро месозад ё азнавсозӣ мекунад. Новобаста аз ҳаҷм ва миқдори манбаҳо,
 дар барнома танҳо як файли R.java мавҷуд мебошад. Агар файли мазкурро 
 кушоем, идентификатори навиштаамонро метавон ба шакли зерин мушоҳида 
 кард: 
 public static final int app_name=xfbd; 
 Дар як барнома метавон якчанд файли манба таҳия кард. Дар ин ҳолат 
 муҳим аст, ки XML-файлҳои сохташуда дорои сохтори лозимӣ ва номи ягона 
 буда, дар зеркаталоги res/values нигоҳ дошта шаванд. 
 Тавре ки мушоҳида кардем, сохтори файлҳои манбаи сатрӣ хело сода 
 мебошад. Теги асосии онҳо <resources> буда, дар охили он як ё якчанд элемент
 ҷойгир мебошад. Ҳар як манбаи матнӣ дорои name мебошад, ки дар файли R.java
 ба сурати атрибути id нигоҳ дошта мешаванд. 
 Дар аввал ва охири қимати манбаҳои сатрӣ ба таври автоматӣ фосила нест
 карда мешавад. Агар зарурати истифодаи фосила пеш ояд, пас ба ҷои фосила 
 метавон аз коди он, яъне \u истифода кард. 
 Манбаҳои сатриро метавон ба шаклҳои гуногун истифода кард. Ҳоло 
 истифодаи як чанд намуд, қимати манбаҳои сатриро бо мисоле дида мебароем.
 <resources> 
 <string name="app_name">MyFirstApplication</string> 
 <string name="simple_string">Сатри муқаррарӣ</string> 
 <string name="quoted_string">"Сатр дар дохили нохунак"</string> 
 <string name="double_quoted_string">\"Сатр дар дохили нохунаки 
 дутогӣ\"</string> 
 <string name="java_format_string">Салому алейкум %$s. Чӣ хел 
 Шумо? %$s</string> 
 <string name="tagged_string"><font color=’red’> <b> Душанбе</b> 
 </font> - <i>шаҳри зебост</i></string> 
 </resources> 
 Барои истифодаи ин манбаҳо қолаби асосии барномаро ба сурати зерин 
 тағйир медиҳем: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical"> 
 <TextView 
 android:id="@+id/textView" 
 android:textSize="sp" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="@string/simple_string" /> 
 <TextView 
 android:id="@+id/textView" 
 android:textSize="sp" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="@string/quoted_string" /> 
 <TextView 
 android:id="@+id/textView" 
 android:textSize="sp" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="@string/double_quoted_string" /> 
 <TextView 
 android:id="@+id/textView" 
 android:textSize="sp" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="@string/java_format_string" /> 
 <TextView 
 android:id="@+id/textView" 
 android:textSize="sp" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="@string/tagged_string" /> 
 </LinearLayout> 
 </android.support.constraint.ConstraintLayout> 
 Натиҷаи барнома: 
 Манбаҳои сатриро метавон ҳамчун параметри методи String.format низ 
 истифода кард. Методи мазкур матни тавассути тегҳои шакли <b>, <i>, 
 <u>,<font> ва ғайра навишташударо пуштибонӣ намекунад. Пас барои ҳал 
 намудани ин душворӣ метавон ба сифати қавси кушодашаванда (<) аз доимии 
 &lt; истифода кард. Мисол: 
 <string name="my_message">"&lt;font color=\"#ff\"> &lt;b> 
 Душанбе &lt;/>&lt;/font>-&lt;i>шаҳри зебост&lt;/i>"</string> 
 Барои истифода бурдани ин сатр дар Java-файл коди барномаро ба сурати
 зерин менависем: 
 package com.example.user.myfirstapplication; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.text.Html; 
 import android.widget.TextView; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 String rString = getString(R.string.my_message); 
 CharSequence styledString = Html.fromHtml(rString,); 
 TextView mytxt=(TextView)findViewById(R.id.textView); 
 mytxt.setText(styledString); 
 } 
 } 
 Дар ин ҷо барои табдилдиҳии сатр ба шакли лозимӣ аз методи 
 Html.fromHtml истифода шудааст. 
 Натиҷаи барнома: 
 Матнҳои муракаб дар дохили контейнери махсуси CDATA навишта 
 мешаванд. 
 <string name="long_message"> 
 <![CDATA[ 
 <html> 
 <body> 
 <h>Забонҳои барномасозӣ: </h> 
 <p>Забони Java:</p> 
 <p>Забони <b>Java</b>-яке аз забонҳои барноманависии хело маъмул 
 ва пурқудрат ба ҳисоб меравад.</p> 
 </body> 
 </html> 
 ]]> 
 </string> 
 Барои истифодабарии ин манбаи матнӣ низ монанди ҳолати қаблӣ амал 
 мекунем: 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 String rString = getString(R.string.long_message); 
 CharSequence styledString = Html.fromHtml(rString,); 
 TextView mytxt=(TextView)findViewById(R.id.textView); 
 mytxt.setText(styledString); 
 } 
 Натиҷаи барнома: 
 Дар бисёр ҳолатҳо метавон аз манбаҳои доимии матнӣ ба монанди: OK, 
 Cancel ва ғайра низ истифода кард. Масалан барои дар тугмачаи Button 
 навиштани сатри Cancel дар атрибути text -и он қимати "@android:string/cancel –
 ро мебахшем. 
 <Button 
 android:id="@+id/button" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="@android:string/cancel" /> 
 Илова бар ин, манбаҳои сатрӣ (типҳои стандартӣ) низ метавонанд ба сурати
 массив муаррифӣ гарданд. Дар ин сурат барои манбаи матнӣ як ном бахшида, ҳар
 як элемент дар дохили теги item навишта мешаванд. 
 <string-array name ="fruitsname"> 
 <item>Себ</item> 
 <item>Зардолӯ</item> 
 <item>Шафтолӯ</item> 
 <item>Гелос</item> 
 Барои тавассути барнома ба даст овардани элементҳои манбаи массивӣ, аз
 коди зерин истифода карда мешавад: 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 TextView mytxt = (TextView) findViewById(R.id.textView); 
 String[] fruitsname = getResources().getStringArray 
 (R.array.fruitsname); 
 for (int i =; i < fruitsname.length; i++) { 
 mytxt.append("fruitsname[" + i + "]: " + fruitsname[i] + "\n"); 
 } 
 } 
 Дар файлҳои манба метавон қиматҳои мантиқӣ: true ё false-ро низ нигоҳ
 дошт. Барои иҷрои ин амал, ибтидо бо номи bools дар папкаи res/values файли
 манба месозем. 
 Мӯҳтавои файли bools.xml. 
 <?xml version="." encoding="utf-"?> 
 <resources> 
 <bool name="mytrue">true</bool> 
 <bool name="myfalse">false</bool> 
 </resources> 
 Барои ба даст овардани қиматҳои мантиқии дар файл муайянкардаамон, 
 коди зеринро менависем: 
 @Override 
 protected void onCreate(Bundle savedInstanceState) 
 { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 TextView mytxt = (TextView) findViewById(R.id.textView); 
 Resources res = getResources(); 
 boolean mytrue = res.getBoolean(R.bool.mytrue); 
 mytxt.setEnabled(mytrue); 
 } 
 Ба ҳамин монанд, манбаҳои ададӣ низ сохта мешаванд. 
 Илова бар ин, метавон менюҳои асосии барномаро дар Android низ ба 
 сурати файли манба таҳия кард. Дар мавзӯи вобаста ба менюҳо ин масъаларо 
 пурра мавриди баҳс қарор медиҳем. 
 Барои кор кардан бо рангҳо аз теги <color> истифода карда, ранг дар шакли
 муайян дода мешавад. 
 #RGB; 
 #RRGGBB; 
 #ARGB; 
 #AARRGGBB; 
 Одатан барои манбаи рангҳо файли colors.xml аз зеркаталоги res/values
 истифода бурда мешавад. Ҳар як ранг дар дохили теги color навишта мешавад.
 Мисол. 
 <?xml version="." encoding="utf-"?> 
 <resources> 
 <color name="colorPrimary">#FB</color> 
 <color name="colorPrimaryDark">#FF</color> 
 <color name="colorAccent">#FF</color> 
 </resources> 
 Барои дар қолаби барнома истифода бурдани манбаи рангӣ аз атрибути 
 textColor истифода бурда мешавад, мисол android:textColor= "@android:color/
 colorPrimary. Дар барнома бошад, барои истифода намудани манбаи рангҳо аз
 коди зерин истифода бурдан мумкин аст: 
 package com.example.user.myfirstapplication; 
 import android.annotation.SuppressLint; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.widget.TextView; 
 public class MainActivity extends AppCompatActivity 
 { 
 @SuppressLint("ResourceAsColor") 
 @Override 
 protected void onCreate(Bundle savedInstanceState) 
 { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 TextView mytxt = (TextView) findViewById 
 (R.id.textView); 
 mytxt.setBackgroundColor(R.color.colorPrimary); 
 } 
 } 
 Монанди сатрҳо, рангҳоро низ дар манба метавон ба сурати массив 
 муаррифӣ кард. 
 <array name="myColor"> 
 <item>#ff</item> 
 <item>#ff</item> 
 <item>#ffff</item> 
 <item>#ff</item> 
 <item>#ff</item> 
 <item>#ff</item> 
 </array> 
 Барои ба даст овардани чунин массивҳо аз объекти TypedArray истифода
 бурда мешавад. 
 package com.example.user.myfirstapplication; 
 import android.annotation.SuppressLint; 
 import android.content.res.TypedArray; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.widget.TextView; 
 public class MainActivity extends AppCompatActivity { 
 @SuppressLint("ResourceType") 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 TextView mytxt = (TextView) findViewById(R.id.textView); 
 TypedArray arrayColors = getResources().obtainTypedArray 
 (R.array.myColor); 
 mytxt.setBackgroundColor(arrayColors.getColor 
 (, xFF)); 
 arrayColors.recycle(); 
 } 
 } 
 Дар Android воҳидҳои ченаки пикселҳо, дюймҳо, нуқта ва ғайра истифода
 бурда мешавад. Ҳамаи ин воҳидҳо дар таркиби ХМL-қолабҳо ва коди Jаvа 
 метавонанд, мавҷуд бошанд. Воҳидҳои мазкурро метавон тавассути теги 
 <dimen> ба сифати манба истифода кард. Одатан дар манба ин бузургиҳо дар 
 файли dimens.xml нигоҳ дошта мешаванд. 
 <?xml version="." encoding="utf-"?> 
 <resources> 
 <dimen name="in_pixels">px</dimen> 
 <dimen name="in_dp">dp</dimen> 
 <dimen name="in_sp">sp</dimen> 
 </resources> 
 Барои аз код ба даст овардани ягон қимат аз ин коди зерин истифода карда
 мешавад: 
 package com.example.user.myfirstapplication; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.widget.TextView; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) 
 { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 TextView mytxt = (TextView) findViewById(R.id.textView); 
 float dimen = getResources().getDimension(R.dimen.in_dp); 
 mytxt.setTextSize(dimen); 
 } 
 } 
 Дар XML-файлҳо бошад, аз синтаксиси зерин истифода бурда мешавад: 
 <TextView 
 android:id="@+id/textView" 
 android:textSize="sp" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="@string/simple_string" 
 android:layout_marginLeft="@dimen/in_dp"/> 
 Дар Android манбаҳои услуб низ мавҷуд мебошанд. Барои нигоҳдории онҳо
 аз файли styles.xml истифода бурда мешавад. 
 Барои сохтани услуб аз теги <style> бо атрибути name, инчунин як ё якчанд
 шохаҳои дохилиҳам (мураккаб) истифода бурда мешавад. Ҳар як теги item бояд
 дар навбати худ дорои атрибути name бошад. 
 Мисол. Услуби базавии лоиҳа. 
 <resources> 
 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
 <item name="colorPrimary">@color/colorPrimary</item> 
 <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
 <item name="colorAccent">@color/colorAccent</item> 
 </style> 
 </resources> 
 Дар папкаи res/drawable метавонад файлҳои манбаи расмӣ (аксҳо), 
 фигураҳо, градиентҳо ва ғайра нигоҳ дошта шаванд. 
 Ба ғайр аз расмҳои муқаррарӣ дар Android метавонанд манбаҳои тасвирӣ,
 ки рангҳои тасвирӣ (color-drawable) ном доранд, истифода шаванд. Мантиқан ин
 гуна тасвирҳо росткунаҳои ранга мебошанд. Барои эҷод намудани росткунҷаҳои
 ранга аз теги <drawable> истифода бурда мешавад. Тасвирҳои мазкур одатан дар
 зеркаталоги res/values/-и файли drawable.xml нигоҳ дошта мешаванд. 
 <?xml version="." encoding="utf-"?> 
 <resources> 
 <drawable name="blue_rectangle">#af</drawable> 
 <drawable name="white_rectangle">#ffffff</drawable> 
 </resources> 
 Дар XML-шаблон барои истифодаи ин гуна манбаҳо чунин амал карда 
 мешавад: 
 <TextView... 
 android:background="@drawable/blue_rectangle" /> 
 Дар коди барнома бошад, ин навъ манбаҳо ба шакли зерин дастрасӣ карда
 мешаванд: 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 TextView mytxt = (TextView) findViewById(R.id.textView); 
 ColorDrawable whiteDrawable =(ColorDrawable)getResources(). 
 getDrawable(R.drawable.blue_rectangle, getApplicationContext(). 
 getTheme()); 
 mytxt.setBackground(whiteDrawable); 
 } 
 Бо пайдо шудани Nexus ва Nexus, ширкати Google дар Android типи 
 нави манбаҳо – Mipmap-ро илова намуд. Мантиқан ин навъ манбаҳо барои иваз
 намудани манбаҳои Drawable пешбинӣ шуда, барои сохтани нишонаи лоиҳа 
 истифода мешаванд. Нишонаҳои лозимӣ бояд омода карда шуда, дар папкаҳои 
 mipmap-mdpi, mipmap-hdpi ва ғайра нигоҳ дошта шаванд. 
 Android ду типи аниматсияро пуштибонӣ мекунад: Типи якум дар асоси 
 кадрҳои фосилавӣ сохта шуда, барои тобдиҳӣ, ҳаракаткунӣ, васеъшавӣ ва 
 сиёҳтобшавии элементҳо истифода бурда мешаванд. Типи дуюм бошад, 
 аниматсияи қадам ба қадам буда, мунтазам дар экран расмҳои қаблан 
 тайёркардашудро нишон медиҳад. 
 Ҳангоми истифодаи аниматсияи фосилавии кадрҳо ҳар як нусхаи 
 аниматсия ба шакли файли алоҳидаи XML дар дохили каталоги res/anim нигоҳ 
 дошта мешавад. Номи файл бе пасванди он ҳамчун идентификатор барои манба,
 истифода бурда мешавад. 
 Аниматсияро метавон ба шакли параметрҳои тағйирёбанда alpha (шаффо- 
 фият), scale (миқёсронӣ), translate (ҳаракатдиҳӣ) ё rotate (чархиш) мушаххас кард.
 Истифодабаранда метавонад бо истифода аз теги set, ки дорои атрибутҳои
 зерин мебошад, комбинатсияи гуногуни нусхаи аниматсияро эҷод кунад: 
 duration – давомёбии аниматсия аз рӯӣ сония; 
 startOffset – нигоҳдории аниматсия пеш аз оғоз бо миллисекунд; 
 fillBefore – ҳангоми ба қимати true баробар будан, табдилдиҳӣ пеш аз оғози
 аниматсия ба амал меояд; 
 fillAfter - ҳангоми ба қимати true баробар будан, табдилдиҳӣ пас аз анҷоми
 аниматсия ба амал меояд; 
 interpolator – тағйирёбии суръати эфектҳоро тавсиф мекунад. 
 Ҳангоми истифода накардани атрибути startOffset, ҳамаи эффектҳои 
 аниматсионӣ дар дохили набор дар як вақт ба амал меоянд. 
 Аниматсияи мунтазам (қадам ба қадам) тавассути объектҳои Drawable, ки
 ҳар кадомашон ба сифати замина дар муддати вақти муайян нишон дода 
 мешаванд, сохта мешавад. 
 Қисми зиёди манбаҳо дар файлҳои дӯӣ тарҷума (compile) мешаванд. Аммо
 баъзе аз манбаҳое низ ҳастанд, ки бе коркарди иловагӣ истифода мешаванд. 
 Android манбаҳоро ду намуд файлҳо пуштибонӣ мекунад - XML ва RAW-файлҳо 
 (Дар типи дуюм, яъне RAW файлҳои аксӣ, аудио ва видео шомил мешаванд). 
 Қаблан тарзи истифода намудани файлҳои типи XML-ро мавриди баҳс 
 қарор дода будем. Файлҳои типи RAW-ро бошад, баъдтар бо мисолҳои мушаххас
 мавриди баҳс қарор медиҳем. 
 Дар Android ба ғайр аз XML –файлҳои муқаррарӣ, ки онҳоро мавриди баҳс
 қарор додем, низ метавон XML-файлҳои махсусро, ки дорои сохтори хос 
 мебошанд, истифода кард. Файлҳои мазкурро ба намуди дӯӣ табдил додан шарт
 мебошад, бинобар ин, барои осонии кор онҳоро дар зеркаталоги /res/xml нигоҳ
 медорем. Ҳоло мисоли XML-файлро дар поён меорем, ки дар зеркаталоги 
 res/xml/myxml.xml сохта шудааст: 
 <?xml version="." encoding="utf-"?> 
 <rootelement> 
 <subelement> 
 Душанбе шаҳри гулҳост 
 </subelement> 
 </rootelement> 
 Ҳангоми кор кардан бо XML – файл система онро нусхабардорӣ карда дар
 пакети барномаҳои амалӣ қарор медиҳад. Барои коркарди XML – файлҳо аз 
 нусхаи класси XmlPullParser истифода бурда мешавад: 
 Resources res = getResources(); 
 XmlResourceParser xpp = res.getXml(R.xml.myxml); 
 XmlResourceParser нусхаи XmlPullParser-ро бармегардонида, инчунин 
 java.util.AttributeSet-ро пиёдасозӣ мекунад. 
 Дар Android ба ғайр аз манбаҳои мавриди баҳс қарор додаамон, инчунин
 манбаҳои системавӣ (сатрҳо, расмҳо, аниматсияҳо, нишонаҳо, услубҳо ва ғайра)
 низ мавҷуданд, ки дар барномаҳои стандартии Android истифода бурда 
 мешаванд. Манбаҳои мазкурро метавон дар лоиҳа низ истифода кард. 
 Дастрасшавӣ ба ин элементҳо монанди дигар элементҳои мавриди баҳс 
 қарор додаамон мебошад. Фарқияти асосии дастрасшавӣ дар он аст, ки пеш аз
 класси R барои манбаҳои системавӣ калимаи android навишта мешавад. Масалан,
 барои ба даст овардани манбаи сатрие ки пайғом оиди хатогиро ифода мекунад,
 аз коди зерин истифода карда мешавад: 
 @Override 
 protected void onCreate(Bundle savedInstanceState) 
 { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 TextView mytxt = (TextView) findViewById(R.id.textView); 
 CharSequence errorMessage = getString 
 (android.R.string.httpErrorBadUrl); 
 mytxt.setText(errorMessage); 
 } 
 Дар файли қолаби барнома низ ба сурати зерин дастрас карда мешаванд:
 <TextView... 
 android:text="@android:string/httpErrorBadUrl"/> 
 Context – ин объекте мебошад, ки имконияти дастрасшавӣ ба функсияҳои
 асосии лоиҳаро фароҳам меорад. Ба монанди: дастрасӣ ба манба, файлҳои 
 системавӣ, даъвати activity ва ғайра. Activity зеркласси Context мебошад, бинобар
 ин дар коди барнома метавон онро ба сурати НомиАктивӣ.this (мисол. 
 MainActivity.this) ё кӯтоҳтар this. Истифода кард. Классҳои Service, Application ва
 ғайра низ бо контекст кор мекунанд. 
 Барои дастрасӣ пайдо кардан ба контекс метавон аз усулҳои зиёде 
 истифода кард. Барои иҷрои ин амал аз методҳои getApplicationContext(), 
 getContext(), getBaseContext() ё this истифода бурдан мумкин аст. 
 Дар диди аввал шояд ба моҳияти истифодаи контекст сарфаҳм рафтан 
 душвор бошад. Бинобар ин, танҳо усулҳои бадастоварии контекст ва истифодаи
 он дар вақти заруриро дида мебароем. 
 Дар навбати худ Context дорои методҳои худ мебошад, ки имконияти 
 дастрасӣ ба манба ва дигар объектҳоро фароҳам меоранд. 
 getAssets(); 
 getResources(); 
 getPackageManager(); 
 getString(); 
 getSharedPrefsFile(). 
 Ба сифати намуна методи getResources –ро мегирем. Барои дастрасшавӣ
 ба манбаи матнӣ (файли strings.xml дар зеркаталоги res/value) аз дастури зерин
 истифода бурда мешавад. 
 String txt= (String) getResources().getText(R.string.app_name); 
 Ҳангоми сохтани класси нав (хусусӣ), агар зарурати истифодаи контекст
 мавҷуд бошад, барои он конструктор сохта мешавад: 
 public MyClass(Context context) { 
 this.context = context; 
 } 
 // дар активитӣ 
 MyClass cat = new MyClass(this); 
 Барои ба даст овардани иттилооти пурра оиди лоиҳа – ном, пакет, класс ва
 ғайра низ аз контекст истифода бурда мешавад. 
 String info = this.getApplicationInfo().packageName; 
 Қайд кардан ба маврид аст, ки баъзан фарқ кардани контекст дар баъзе
 ҳолатҳо хело зарур мебошад. Масалан, агар дар лоиҳа аз активитиҳои зиёд 
 истифода шавад. Дар манифест метавон тема барои ҳамаи лоиҳа навишт ё барои
 ҳар як активитӣ алоҳида. Дар натиҷа интихоби контекст барои натиҷа 
 таъсиргузор мешавад. Мувофиқи қоида, ҳангоми истифодаи темаи хусусӣ аз 
 контексти активитӣ истифода мешавад, на аз контексти лоиҳа. 
 Дар классҳои анонимӣ калимаи калидии this кор намекунад, пас ба ҷойи он
 истифодаи номи Активитӣ.this (MainActivity.this) маслиҳат дода мешавад. Ин
 амал метавонад, дар методи onClick-и ҳодисаи пахши тугмачаҳо ва ғайра ба вуқуъ
 ояд. 
 Ҳангоми сохтани ададптер барои рӯйхатҳо низ ба контекст муроҷиат карда
 мешавад. 
 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
 android.R.layout.simple_list_item_, fruitsTaj); 
 listView.setAdapter(adapter); 
 Нодуруст истифода намудани контекст низ метавонад ба банд гардидани 
 хотира орад. Масалан, агар хоҳем, ки ягон класси сохтаи худамон, ки дорои
 тағйирёбандаҳои доимӣ аст, истифода барем. Ҳангоми муроҷиат ба контексти 
 активитӣ система истинод ба тағйирёбандаҳоро нигоҳ медорад. Агар активитӣ
 маҳкам карда шавад, низ тозакунандаи мусор наметавонад хотираро аз 
 тағйирёбандаҳо ва активитиҳои истифодашаванда тоза кунад. Дар ин ҳолатҳо 
 барои истифодаи контекст маслиҳат дода мешавад, ки аз методи 
 getApplicationContext() истифода карда шавад. 
 Дар китобхонаи ҳамҷоякоркунӣ класси нав барои контекст бо номи 
 ContextCompat ба вуҷуд омад. Класси мазкур метавонад, ҳангоми аз ҷониби 
 система ба шакли хатзада намоиш додани ягон метод (ҳамчун методи куҳнашуда)
 истифода шавад. Масалан, ҳангоми даъват намудани методи getColor() бо як 
 параметр (int color= getResources().getColor( R.color.colorPrimary)) Android Studio
 хабардор мекунад, ки бояд аз варианти getColor(int, Theme) истифода шавад.
 Ҳангоми истифодаи варинати зерин, чунин огоҳкунӣ ба амл намеояд. 
 int color = ContextCompat.getColor(this, R.color.colorPrimary) 
 Аз версияи API сар карда, метавон барои истифода намудани методи 
 getColor() аз сохтори зерин истифода кард. 
 int color=getResources().getColor(R.color.colorPrimary, getTheme());; 
 Айни ҳол дар Android Studio лоиҳаҳо дар асоси китобхонаи AppCompat 
 сохта мешаванд. Агар Шумо лоиҳаи қаблан навиштагӣ дошта бошед, пас зарур 
 аст, ки ба китобхонаи нав гузашта, аз имкониятҳои нав: ActionBar, Toolbar ва
 ғайра барои лоиҳаҳоятон истифода баред. 
 Пеш аз ҳама вобастагии лозимиро дар модули лоиҳаамон (дар файли 
 build.gradle) ҳамроҳ мекунем: 
 dependencies { 
 implementation 'com.android.support:appcompat-v:..' 
 } 
 Барои лоиҳаҳои нав ин пайвасткунӣ зарур намебошад. Китобхона дар худ
 вобастагӣ аз китобхонаи support-v-ро дорад, аз ин рӯ навиштани он аз сари нав
 ҳоҷат намебошад. 
 Маслиҳат дода мешавад, ки версияи охирони SDK истифода карда шавад: 
 defaultConfig { 
 minSdkVersion 
 targetSdkVersion 
 } 
 Дар лоиҳаи кӯҳна методҳо ва дастурҳои кӯҳнаро пайдо карда, ба дастурҳои
 нав иваз кардан зарур мебошад. Масалан, класси Activity-ро зарур аст, ки ба
 AppCompatActivity иваз кунем: 
 Барои иҷрои ин амал ба сифати import android.app.Activity аз дастури import
 android.support.v.app.AppCompatActivity ва ба сифати extends Activity аз extends
 AppCompatActivity истифода карда шавад. 
 Дар версияҳои кӯҳна шаблони кӯҳна бо истифода аз фрагментҳо истифода
 мешуд, масалан, FragmentActivity. Онро ёфта иваз мекунем. Ба сифати extends
 FragmentActivity аз extends AppCompatActivity, ба сифати import 
 android.support.v.app.FragmentActivity аз import android.support.v.app.
 AppCompatActivity, ба сифати import android.app.Fragment аз import 
 android.support.v.app.Fragment ва ба сифати getFragmentManager() аз 
 getSupportFragmentManager() истифода карда мешавад. 
 Компонент ActionBar низ бо ду вариант мавҷуд аст, варинати куҳнаи онро
 ёфта ба варинати нав иваз мекунем, яъне ба сифати import android.app.ActionBar
 аз import android.support.v.app.ActionBar ва ба сифати getActionBar() аз
 getSupportActionBar() истифода мекунем. 
 Ҳангоми истифода бурдани AlertDialog ба сифати import 
 android.app.AlertDialog аз import android.support.v.app.AlertDialog истифода
 мебарем. 
 Ба сифати хати болоии лоиҳа, ки дар Android.x темаи Holo 
 (android:Theme.Holo.Light) истифода мешуд, ба Theme.AppCompat иваз карда 
 шуд. 
 Агар дар лоиҳа аз ActionBar истифода нашавад ва барноманавис хоҳад, ки
 стили алоҳида истифода кунад, пас зарур аст, ки темаи нав ҳамчун меросбари
 темаи Theme.AppCompat сохта шуда, дар он Theme.AppCompat.NoActionBar 
 илова карда шавад. 
 <style name="MyTheme" parent="Theme.AppCompat">... 
 </style> 
 <style name="MyTheme.NoActionBar"> 
 <item name="windowActionBar">false</item> 
 <item name="windowNoTitle">true</item> 
 </style> 
 Дар меню низ тағйирот ба амал омад. Барои баъзе атрибутҳо ба сифати 
 фазои номии android аз app истифода карда мешавад. 
 Агар дар меню истифодаи SearchView зарур бошад, пас ба сифати 
 android.widget.SearchView аз android.support.v.widget. SearchView истифода
 бурда мешавад. 
 <item 
 android:id="@+id/contentSearch" 
 android:orderInCategory="" 
 android:title="@string/search" 
 android:showAsAction="ifRoom" 
 android:actionViewClass="android.support.v.widget.SearchView" /> 
 </menu> 
 Дар код бошад, аз MenuItemCompat истифода бурда мешавад. 
 @Override 
 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
 inflater.inflate(R.menu.main_menu, menu); 
 mSearchView = (SearchView) MenuItemCompat.getActionProvider 
 (menu.findItem(R.id.searchView)); 
 } 
 мешавад? 
 карда шуд? 
 Боби. Элементҳои идоракунанда 
 Компоненти EditText —майдони матнӣ барои дохилкунӣ ва хориҷкунии 
 матнҳо, ки имконияти таҳриркунии онҳо мавҷуд аст пешбинӣ шудааст. 
 Компоненти мазкур меросбари класси TextView мебошад. 
 Дар панели асбобҳои Android Studio майдонҳои матнӣ дар категорияиText
 Fields (EditText) таҳти номҳои гуногун ҷойгиранд: 
 Барои зуд сохтани майдони матнӣ метавон аз компонентҳои гуногун 
 истифода кард, ба мисли: Plain Text, Person Name, Password, Password (Numeric),
 E-mail, Phone, Postal Address, Multiline Text, Time, Date, Number, Number (Signed),
 NumberDecimal. 
 Элементи идоракунандаи Plain Text 
 Plain Text – варианти аз ҳама содатарини майдони матнӣ буда, ҳангоми дар
 қолаби лоиҳа гузоштани он дар XML-инъикос шакли зеринро мегирад: 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:inputType="textPersonName" 
 android:text="Name" /> 
 Элементи идоракунандаи Password ва Password (Numeric) 
 Ҳангоми истифодаи Password дар inputType қимати textPassword истифода
 мешавад. Ҳангоми дохилкунии матн ибтидо символҳое, ки ба ситорача иваз карда
 мешаванд, нишон дода мешавад. Агар элементи Password (Numeric) истифода 
 шавад, он гоҳ барои атрибути inputType қимати numberPassword истифода 
 мешавад. Дар ин ҳолат танҳо рақамҳо ба ҷойи ҳарф истифода мешавад. 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:inputType="textPassword" 
 tools:layout_editor_absoluteX="dp" 
 tools:layout_editor_absoluteY="dp" 
 tools:ignore="MissingConstraints" /> 
 Элементи идоракунандаи E-mail 
 Барои элементи E-mail атрибути android:inputType= "textEmailAddress"
 истифода мешавад. Дар ин ҳолат дар клавиатура тугмачаи иловагӣ бо нишонаи
 @ пайдо мешавад, ки дар дилхоҳ суроғаи электронӣ истифода бурда мешавад. 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:inputType="textEmailAddress" 
 tools:layout_editor_absoluteX="dp" 
 tools:layout_editor_absoluteY="dp" 
 tools:ignore="MissingConstraints" /> 
 Элементи идоракунандаи Phone 
 Барои элементи Phone атрибути android:inputType="phone" истифода бурда
 мешавад. Дар ин ҳолат клавиатура ба клавиатураҳои телефонҳои мобилии куҳна,
 ки аз рақамҳо ва тугмачаҳои ситорачаву панҷара иборат аст, монанд мешавад.
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:inputType="phone" 
 tools:layout_editor_absoluteX="dp" 
 tools:layout_editor_absoluteY="dp" 
 tools:ignore="MissingConstraints" /> 
 Элементи идоракунандаи Multiline Text 
 Дар компоненти Multiline Text аз атрибути android:inputType= 
 "textMultiLine" истифода мешавад, ки имконияти дохилкунии матни бисёрсатра
 дар он мавҷуд аст. Илова бар ин, метавон дар он хосияти Lines (атрибути 
 android:lines)-ро илова кард, ки тавассути он метавон миқдори сатрҳои 
 дидашавандаро дар экран муқаррар кард. 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:inputType="textMultiLine" 
 tools:layout_editor_absoluteX="dp" 
 tools:layout_editor_absoluteY="dp" 
 tools:ignore="MissingConstraints" /> 
 Элементи идоракунандаи Time ва Date 
 Дар ин компонент аз атрибути android:inputType="time" ё android:input-
 Type="date" истифода бурда мешавад. Дар ин ҳолат дар клавиатура рақамҳо, 
 нуқта, вергул, ва тире пайдо мешавад. 
 Number, Number (Signed), Number (Decimal) 
 Дар ин компонентҳо мувофиқан аз атрибути android:inputType="number" ё
 numberSigned ё numberDecimal истифода бурда мешавад. Дар ин ҳолат 
 клавиатура танҳо аз рақамҳо ва якчанд символҳои дигар иборат мебошад. 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:inputType="date" 
 tools:layout_editor_absoluteX="dp" 
 tools:layout_editor_absoluteY="dp" 
 tools:ignore="MissingConstraints" /> 
 Дар Android бисёр элементҳо дорои хосияти Hint (атрибути hint) мебошанд,
 ки барои муайянкунии пешгӯӣ барои компонент истифода бурда мешавад. 
 Ҳангоми муқарраркунии хосияти мазкур матни лозимӣ дар майдони матнӣ ба 
 сурати пешгӯӣ пайдо мешавад. 
 Мисол. 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:ems="" 
 android:hint="Ягон матн" 
 android:inputType="textPersonName" 
 android:textSize="dp" 
 tools:ignore="MissingConstraints" 
 tools:layout_editor_absoluteX="dp" 
 tools:layout_editor_absoluteY="dp" /> 
 Натиҷаи барнома: 
 Дар ҳама ҳолат истифодаи клавиатура бо ҳуруфот ва рақамҳо шарт 
 мебошад. Масалан Шумо агар калкулятор нависед, он гоҳ беҳтар мешавад, ки 
 фақат рақамҳо намоиш дода шаванд. Агар хоҳед, ки суроғаи электронӣ нависед,
 он гоҳ зарурати истифодаи клавиатураи дорои символи @ пеш меояд. 
 Барои иҷрои ин амал дар элементи EditText атрибути inputType мавҷуд аст:
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:hint="my Hint" 
 android:inputType="textCapWords"> 
 </EditText> 
 Дар ин ҳолат бо атрибути inputType="textCapWords" ҳарфи якуми ҳар як
 калимаи дохилкардашуда ба таври автомати калон карда мешавад. 
 Қимати textCapSentences бошад, ҳар як символи якуми ҷумларо ба ҳарфи
 калон табдил медиҳад. 
 Агар зарурати пайваст кардани реҷаи CapsLock пеш ояд, аз қимати 
 textCapCharacters истифода баред, дар ҳолат ҳамаи ҳарфҳои дохилкардашуда, ба
 ҳарфи калон табдил дода мешаванд. 
 Барои кор кардан бо набори рақами телефонҳо аз phone истифода бурда 
 мешавад, дар ин ҳолат танҳо рақамҳо, аломати ситорача (*) ва панҷара (#) дастрас
 мегарданд. 
 Барои дохилкунии веб-суроғаҳо қимати textural аст? қимати мувофиқ ба
 ҳисоб меравад. Дар ин ҳолат тугмачаи иловагии.com пайдо мешавад. Ҳангоми
 пахш карда истодани он вариантҳои алтернативӣ.net,.org ва ғайра пайдо 
 мешаванд. 
 Дар поён руйхати қиматҳои имконпазир оварда шудаанд. 
 text; 
 textCapCharacters; 
 textCapWords; 
 textCapSentences; 
 textAutoCorrect; 
 textAutoComplete; 
 textMultiLine; 
 textImeMultiLine; 
 textNoSuggestions (дохилкунии матн бе истифодаи пешгӯӣ); 
 textUrl; 
 textEmailAddress; 
 textEmailSubject; 
 textShortMessage; 
 textLongMessage; 
 textPersonName; 
 textPostalAddress; 
 textPassword; 
 textVisiblePassword; 
 textWebEditText; 
 textFilter; 
 textPhonetic; 
 number; 
 numberSigned; 
 numberDecimal; 
 phone; 
 datetime; 
 date; 
 time. 
 Барои маҳдуд намудани майдони матнӣ зарур аст, ки ба хосиятҳои Focusa-
 ble, Long clickable ва Cursor visible –и он қимати false бахшида шавад. 
 Хосиятҳои minLines ва maxLines- имконияти маҳдуд кардани миқдори 
 сатрҳои матнро, ки бояд дохил карда шаванд, фароҳам меорад. 
 Хосияти maxLength-барои муқарраркунии миқдори максималии 
 символҳои дохилшаванда истифода мешавад. 
 Методи асосии класси EditText — getText() ба ҳисоб меравад, ки қимати
 матни дар дохили компонент бударо бар мегардонад. Қимати баргардонидашуда
 дорои типи Editable мебошад, на String. Бинобар ин натиҷаи ба даст омада ба типи
 лозимӣ (дар айни ҳол сатрӣ) табдил дода мешавад. 
 String str = myEditText.getText().toString(); 
 Мувофиқан барои дар компонент навиштани матн аз методи setText() 
 истифода бурда мешавад. 
 Аксари методҳои барои кор бо матн меросгири класси базавии TextView 
 мебошанд: setTypeface(null, Typeface), setTextSize(int textSize), SetTextColor(int
 Color). 
 Дар EditText методҳои махсусе барои қайдкунии матн низ мавҷуд 
 мебошад: 
 selectAll() — қайдкунии ҳамаи матн; 
 setSelection(int start, int stop) — сар карда аз мавқеи start то мавқеи stop
 матро қайд мекунад; 
 setSelection(int index) — курсорро ба мавқеи index мекучонад; 
 Барои коркарди ҳодисаҳои пахши тугмача зарурати қайди ном кардани 
 коркарди View.OnKeyListener пеш меояд, аз методи setOnKeyListener()-и эле-
 менти EditText истифодва бурда мешавад. Масалан, барои коркарди ҳодисаи 
 пахши тугмачаи Enter ҳангоми дохилкунии сатр аз коди зерин истифода бурда
 мешавад: 
 Мӯҳтавои файли XML: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical"> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:inputType="textPersonName" 
 android:text="Name" 
 tools:layout_editor_absoluteX="dp" 
 tools:layout_editor_absoluteY="dp" 
 tools:ignore="MissingConstraints" /> 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:text="TextView" 
 tools:ignore="MissingConstraints" 
 tools:layout_editor_absoluteX="dp" 
 tools:layout_editor_absoluteY="dp" /> 
 </LinearLayout> 
 </android.support.constraint.ConstraintLayout> 
 Коди барнома: 
 package com.example.user.myapplication; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.KeyEvent; 
 import android.view.View; 
 import android.widget.EditText; 
 import android.widget.TextView; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 final TextView textView = (TextView) findViewById 
 (R.id.textView); 
 final EditText editText = (EditText)findViewById 
 (R.id.editText); 
 editText.setOnKeyListener(new View.OnKeyListener(){ 
 @Override 
 public boolean onKey(View v, int keyCode, KeyEvent event){ 
 if(event.getAction() == KeyEvent.ACTION_DOWN && (keyCode == 
 KeyEvent.KEYCODE_ENTER)){ 
 String str = editText.getText().toString(); 
 textView.setText(str.toString()); 
 return true; 
 } 
 return false; 
 } 
 }); 
 } 
 } 
 Барои тафтиши холӣ будани EditText метавон аз фармонҳои зерин исти- 
 фода кард: 
 if (editText.getText().toString().equals("")){ 
 // Амалҳое, ки дар вақти холӣ будани EditText иҷро мегарданд 
 } 
 else{ 
 // агар матн мавҷуд бошад, амалҳои дигар иҷро мешаванд 
 } 
 Инчунин, метавон барои иҷрои ин амал аз фармони зерин низ истифода 
 кард. 
 if (editText.getText().length() == ) 
 Барои майдони матниро ба нишона (Label) табдил додан, компонентро 
 дастнорас карда, курсорро нест мекунем ва заминаро шаффоф гардонида, 
 ҳодисаи пахши тугмаро боз медорем. 
 EditText editText = (EditText)findViewById(R.id.editText); 
 editText.setEnabled(false); 
 editText.setCursorVisible(false); 
 editText.setBackgroundColor(Color.TRANSPARENT); 
 editText.setKeyListener(null); 
 Ин амалро инчунин метавон тавассути XML ба ғайр аз банди охирон иҷро
 кард. 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:background="@android:color/transparent" 
 android:cursorVisible="false" 
 android:editable="false" 
 android:ems="" 
 android:text="Text" /> 
 Маълумоти умумӣ 
 Тугмача – яке аз элементҳои идоракунандаи маъмултарин дар барномасозӣ
 ба ҳисоб меравад, ки меросбари TextView буда, барои класси СompoundButton
 класси базавӣ мебошад. Дар навбати худ элементҳои ба монанди: CheckBox, 
 ToggleButton ва RadioButton меросбари класси CompoundButton мебошанд. Барои
 тугмача дар Android класси android.widget.Button истифода бурда мешавад. Дар
 тугмача метавон ягон итилоотро хориҷ кард ва ё тавассути он ягон ҳодисаро иҷро
 кард. Варинати алтернативӣ ба он метавонад компоненти ImageButton 
 (android.widget. ImageButton) бошад, ки дар он метавон ба ҷои матн аз расм низ
 истифода кард. 
 Барои идора кардани андозаи ҳуруфот, ранги матн ва дигар хосиятҳо 
 метавон аз атрибути textAppearance истифода кард. Руйхати пайдошавандаи ин
 хосият дорои миқдори зиёди вариантҳо мебошад. Илова бар ин, истифодабаранда
 метавонад ба таври дастӣ танзими мушаххаси фардиро тавассути хосиятҳои 
 алоҳида иҷро кунад. 
 Барои ба андозаи равзана (экран) дароз кардани андозаи тугмача метавон
 аз android:layout_width="match_parent" истифода бурд. Барои муайянкунии ҷойи
 холӣ дар тарафи рост ва чапи равзана аз атрибути android:layout_margin (ё
 layout_marginRight ва layout_marginLeft) истифода бурда мешавад. 
 Азбаски тугмача меросгири TextView аст, пас хосиятҳои маъмули ба 
 монанди: textColor, textSize ва ғайраро истифода мебарад. 
 Агар тугмачаро дар болои равзана (экран) гузошта дар болояш 
 нишондиҳандаи мушро пахш кунем (баъди иҷроиши барнома) ягон ҳодиса ба 
 амал намеояд. Барои ин зарур аст, ки код навишта шавад, ки ҳангоми тугмачаи
 мушро дар болои он пахш кардан ягон ҳодиса ба амал орад. Якчанд усули сохтани
 ҳодиса барои тугмача мавҷуд аст. 
 ) Усули якум - атрибути onClick 
 Вобаста ба усули нав махсусан барои Android-атрибути onClick (дар панели
 хосиятҳо ҳамчун OnClick намоиш дода мешавад)-ро коркард карданд: 
 android:onClick="onMyButtonClick" 
 Барои ҳодиса метавон ба таври ихтиёрӣ ном интихоб кард. Сипас, дар 
 класси фаъол вобаста ба номи интихобкарда, метод навиштан лозим аст, ки ҳан-
 гоми пахши тугмача иҷро карда шавад. Методи мазкур бояд кушода (public) буда,
 дорои як параметр аз навъи объекти View бошад. 
 public void onMyButtonClick(View view) 
 { 
 // Хориҷкунии пайғом 
 Toast.makeText(this, "Барои чӣ тугмачаро пахш кардӣ?", 
 Toast.LENGTH_SHORT).show(); 
 } 
 Ҳангоме ки истифодабаранда тугмачаро пахш мекунад, методи 
 onMyButtonClick() даъват карда мешавад, ки дар навбати худ пайғоми 
 пайдошавандаро нишон медиҳад. 
 Диққат дошта бошед, ки дар чунин усул зарурати эълони тугмача тавассути
 конструксияи ButtonfindViewById(R.id.button) пеш намеояд, чунки Android 
 худаш ин чизро пайдо мекунад. Усули мазкурро натанҳо барои тугмачаҳо, балки
 метавон барои дигар элементҳо низ истифода кард, ки имконияти кам шудани 
 ҳаҷми кодро фароҳам меорад. 
 ) Усули дуюм - методи setOnClickListener() 
 Яке аз усулҳои анъанавии Java барои сохтани ҳодиса – истифодаи методи
 setOnClickListener() мебошад, ки амали пахши тугмачаро мешунавад 
 (прослушивает). Ин усул барои нафароне, ки нав ба барноманависӣ оғоз 
 мекунанд камтар душвор ба назар мерасад, лекин маслиҳат дода мешавад, ки аз
 кумаки система истифода баранд. Фарз мекунем, ки дар равзана (экран) ду 
 тугмачаи button мавҷуд аст. Дар код одатан тугмача чунин муаррифӣ мегардад:
 Button button = (Button) findViewById(R.id.button); 
 Қадами оянда барои пахш кардан метод навишта мешавад. Номи тугмачаи 
 эълоншуда button-ро навишта, пас аз он аломати нуқта мегузорем, дар натиҷа
 МИК руйхати фармонҳои дастрасро барои давом додани код пешниҳод мекунад.
 Истифодабаранда метавонад, дастӣ варинанти даркориро интихоб кунад ва ё 
 якчанд ҳарфи методи лозимиро нависад, то интихоб осотар гардад. Аз ин руйхат
 ҳоло сатри зери интихоб карда мешавад: 
 button.setOnClickListener() 
 Пас аз ин, курсор дар дохили қавс қарор гирифта маслиҳати (подсказка)
 OnClickListener l пайдо мешавад. Дар ин ҷо сатри new OnClickListener –ро 
 навишта шакли зеринро соҳиб мешавем: 
 button.setOnClickListener(new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 } 
 }); 
 Акнун пас аз қавсҳои фигуравии методи onClick() метавон коди лозимиро
 навишт. 
 Дар варианти навишташуда, дарҳол барои методи setOnClickListener метод
 new OnClickListener... тавассути методи onClick() навишта шудааст. Илова бар
 ин, метавон ибтидо тағйирёбандаи алоҳида myButtonClickListener муаррифӣ 
 кард: 
 OnClickListener myBtnClLst= new OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 } 
 }; 
 Дар вақти навиштани ин дастурот маслиҳат дода мешавад, ки аз 
 якҷояпахшкунии тугмачаҳои Ctrl+Space истифода бурда шавад. Барои иҷрои ин
 амал якчанд символҳои калимаи авваларо навишта, тугмачаҳои мазкурро пахш 
 мекунем. Пас аз калимаи new якчанд ҳарфро навишта бори дигар ин тугмачаҳоро
 пахш мекунем, ки дар натиҷа пардозиши лозимӣ иҷро карда мешавад. 
 Пас аз сохтани тағйирёбандаи типи OnClickListener, яъне myBtnClLst 
 button.setOnClickListener –ро навишта, ба ҷойи new OnClickListener номи 
 тағйирёбандаи муаррифишуда (myBtnClLst) навишта мешавад. 
 ) Усули сеюм - интерфейси OnClickListener 
 Усули сеюм ба усули дуюм монанд буда, барои Java низ усули анъанавӣ ба
 ҳисоб меравад. Тавассути методи setOnClickListener (View.OnClickListener l)
 тугмача барои худаш коркарди ҳодиса мебахшад. Метавон нишон дод, ки класси
 Activity интерфейси View.OnClickListener-ро истифода мебарад. 
 Барои иҷрои ин усул пас аз калимаҳои extends Activity калимаҳои 
 implements OnClickListener-ро менависем. Дар натиҷа дар зери номи класс хат ва
 дар тарафи чапи он чароғча пайдо мешавад. Чароғчаи пайдошударо пахш карда,
 варианти Implement methods- ро интихоб мекунем. Дар натиҷа равзанаи 
 муколамавӣ дорои имконияти интихоби методи onClick пайдо мешавад. Пас аз 
 интихоби он, ба сурати зерин шакли аввала барои пахши тугмача пайдо мешавад.
 @Override 
 public void onClick(View v) { 
 } 
 Метод на ҳамчун объекте-коркарди ҳодисаи алоҳида, балки дар Activity
 татбиқ гардида, дар он ба сифати коркарди ҳодиса баромад мекунад. 
 Дар методи onCreate() номи пардозишгари тугмача навишта (бахшида) 
 мешавад, ки this аст, яъне объекти ҷории активност. 
 button.setOnClickListener(this); 
 Вобаста ба миқдори тугмачаҳо ва ҳодисаҳои вобаста ба онҳо метод сохта
 мешавад. 
 Барои дастнорас/дастрас кардани тугмача метавон аз методи setEnabled()
 истифода кард: 
 button.setEnabled(falser); // button.setEnabled(true); 
 Ба намуди стандартӣ дар равзана тугмачаи шакли барҷастагиро дорад. Дар
 баъзе ҳолатҳо онро метавон ба сурати ҳамвор низ нишон дод. Қаблан барои ин
 мақсад аз тугмачаи TextView бо ҳодисаи пахшкунӣ истифода бурда мешуд. Ҳоло
 бошад истифодаи стили borderlessButtonStyle маслиҳат дода мешавад: 
 <Button 
 android:id="@+id/button" 
 style="?android:attr/borderlessButtonStyle" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:onClick="onClick" 
 android:text="Button" /> 
 Бо пайдоиши Material Design стилҳои дигар низ илова гардид, масалан,
 style="@style/Widget.AppCompat.Button.Borderless", ё style="@style/ 
 Widget.AppCompat.Button.Borderless.Colored" 
 Монанди тугмачаҳои матнӣ метавон матни тугмачаро низ бадаст овард. 
 Барои бадаст овардани матни тугмача дар методи onClick() аз дастуроти зерин
 истифода карда мешавад. 
 public void onClick (View view) { 
 TextView infoTextView = (TextView) findViewById(R.id.textView); 
 Button button = (Button)view; 
 String buttonText = button.getText().toString(); 
 infoTextView.setText(buttonText); 
 } 
 Аз баски методи мазкур танҳо дорои параметри View мебошад (дар он 
 методи getText() мавҷуд нест), бинобар ин зарурати ба типи Button овардани он
 пеш меояд. 
 Мисоли. Барномае нависед, ки суммаи ду адади додашударо ҳисоб кунад.
 Мӯҳтавои файли XML чунин аст: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical" 
 tools:layout_editor_absoluteX="dp" 
 tools:layout_editor_absoluteY="dp" 
 tools:ignore="MissingConstraints"> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:hint="a=" 
 android:inputType="textPersonName" /> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:hint="b=" 
 android:inputType="textPersonName" /> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:hint="S=" 
 android:inputType="textPersonName" /> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="Summa" /> 
 </LinearLayout> 
 </android.support.constraint.ConstraintLayout> 
 Коди барнома: 
 package com.example.user.myapplication; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.widget.Button; 
 import android.widget.EditText; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 Button button=(Button)findViewById(R.id.button); 
 final EditText ed=(EditText)findViewById(R.id.editText); 
 final EditText ed=(EditText)findViewById(R.id.editText); 
 final EditText ed=(EditText)findViewById(R.id.editText); 
 button.setOnClickListener(new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 int a,b,S; 
 a=Integer.valueOf(String.valueOf(ed.getText())); 
 b=Integer.valueOf(String.valueOf(ed.getText())); 
 S=a+b; 
 ed.setText(String.valueOf(S)); 
 } 
 }); 
 } 
 } 
 Натиҷаи барнома: 
 Мисоли. Барномаи мисоли -ро мукаммал мекунем, ки барои ҳисобкунии
 ҳамаи амалҳои арифметикӣ истифода шавад. 
 Мӯҳтавои файли XML: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical" 
 tools:layout_editor_absoluteX="dp" 
 tools:layout_editor_absoluteY="dp" 
 tools:ignore="MissingConstraints"> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:hint="a=" 
 android:inputType="textPersonName" /> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:hint="b=" 
 android:inputType="textPersonName" /> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:hint="S=" 
 android:inputType="textPersonName" /> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="horizontal"> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:text="+" /> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:text="-" /> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:text="*" /> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:text="/" /> 
 </LinearLayout> 
 </LinearLayout> 
 </android.support.constraint.ConstraintLayout> 
 Коди барнома. 
 package com.example.user.myapplication; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.view.View.OnClickListener; 
 import android.widget.Button; 
 import android.widget.EditText; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 final EditText ed, ed, ed; 
 final Button btn, btn, btn, btn; 
 ed=(EditText)findViewById(R.id.editText); 
 ed=(EditText)findViewById(R.id.editText); 
 ed=(EditText)findViewById(R.id.editText); 
 btn=(Button)findViewById(R.id.button); 
 btn=(Button)findViewById(R.id.button); 
 btn=(Button)findViewById(R.id.button); 
 btn=(Button)findViewById(R.id.button); 
 OnClickListener btncl=new OnClickListener(){ 
 @Override 
 public void onClick(View v) { 
 int n=v.getId(); 
 float a,b,S=; 
 a=Float.valueOf(String.valueOf(ed.getText())); 
 b=Float.valueOf(String.valueOf(ed.getText())); 
 if (n==btn.getId()){ 
 S=a+b; 
 } 
 else if (n==btn.getId()){ 
 S=a-b; 
 } 
 else if (n==btn.getId()){ 
 S=a*b; 
 } 
 else if (n==btn.getId()){ 
 S=a/b; 
 } 
 ed.setText(String.valueOf(S)); 
 } 
 }; 
 btn.setOnClickListener(btncl); 
 btn.setOnClickListener(btncl); 
 btn.setOnClickListener(btncl); 
 btn.setOnClickListener(btncl); 
 } 
 } 
 Натиҷаи барнома: 
 Қайд. Тавре ки дида мешавад, дар ин ҷо ибтидо барои ҳар чор тугмача як
 ҳодиса навишта шудаааст. Сипас, ҳар як тугмача дар ин ҳодиса ба қайд 
 гирифта шудааст. Дар дохили методи onClick бошад, барои ба даст овардани 
 id-и тугача аз методи getId() истифода шудааст. 
 Мисоли. Барномаи калкуляторро менависем. 
 Мӯҳтавои файли XML. 
 <?xml version="." encoding="utf-"?> 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:id="@+id/activity_main" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical" 
 android:padding="dp"> 
 <LinearLayout 
 android:id="@+id/result" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content"> 
 <TextView 
 android:id="@+id/resultField" 
 android:layout_width="dp" 
 android:layout_weight="" 
 android:textSize="sp" 
 android:layout_height="wrap_content" /> 
 <TextView 
 android:id="@+id/operationField" 
 android:layout_width="dp" 
 android:layout_weight="" 
 android:textSize="sp" 
 android:layout_height="wrap_content" 
 /> 
 </LinearLayout> 
 <EditText 
 android:id="@+id/numberField" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:inputType="phone" /> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_marginTop="dp"> 
 <Button 
 android:layout_weight="" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:text="" 
 android:onClick="onNumberClick"/> 
 <Button 
 android:layout_weight="" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:text="" 
 android:onClick="onNumberClick"/> 
 <Button 
 android:layout_weight="" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:text="" 
 android:onClick="onNumberClick"/> 
 <Button 
 android:layout_weight="" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:text="/" 
 android:onClick="onOperationClick"/> 
 </LinearLayout> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content"> 
 <Button 
 android:layout_weight="" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:text="" 
 android:onClick="onNumberClick"/> 
 <Button 
 android:layout_weight="" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:text="" 
 android:onClick="onNumberClick"/> 
 <Button 
 android:layout_weight="" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:text="" 
 android:onClick="onNumberClick"/> 
 <Button 
 android:layout_weight="" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:text="*" 
 android:onClick="onOperationClick"/> 
 </LinearLayout> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content"> 
 <Button 
 android:layout_weight="" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:text="" 
 android:onClick="onNumberClick"/> 
 <Button 
 android:layout_weight="" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:text="" 
 android:onClick="onNumberClick"/> 
 <Button 
 android:layout_weight="" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:text="" 
 android:onClick="onNumberClick"/> 
 <Button 
 android:layout_weight="" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:text="-" 
 android:onClick="onOperationClick"/> 
 </LinearLayout> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content"> 
 <Button 
 android:layout_weight="" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:text="" 
 android:onClick="onNumberClick"/> 
 <Button 
 android:layout_weight="" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:text="," 
 android:onClick="onNumberClick"/> 
 <Button 
 android:layout_weight="" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:text="+" 
 android:onClick="onOperationClick"/> 
 <Button 
 android:layout_weight="" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:text="=" 
 android:onClick="onOperationClick"/> 
 </LinearLayout> 
 </LinearLayout> 
 Коди барнома: 
 package com.example.user.myapplication; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.widget.Button; 
 import android.widget.EditText; 
 import android.widget.TextView; 
 public class MainActivity extends AppCompatActivity { 
 TextView resultField; // майдони матнӣ барои хориҷкунии натиҷа 
 EditText numberField; // майдон барои дохилкунии адад 
 TextView operationField;// майдони матнӣ барои хориҷкунии аломати 
 //амал 
 Double operand = null; // амалвандҳои амал 
 String lastOperation = "="; // амали охирон 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 // Ба дастоварии ҳамаи майдонҳои тавассути id аз файли 
 //activity_main.xml 
 resultField =(TextView) findViewById(R.id.resultField); 
 numberField = (EditText) findViewById(R.id.numberField); 
 operationField = (TextView) findViewById(R.id.operationField); 
 } 
 // Нигоҳдории ҳолат 
 @Override 
 protected void onSaveInstanceState(Bundle outState) { 
 outState.putString("OPERATION", lastOperation); 
 if(operand!=null) 
 outState.putDouble("OPERAND", operand); 
 super.onSaveInstanceState(outState); 
 } 
 // Ба дастоварии ҳолати сабтшудаи охирон 
 @Override 
 protected void onRestoreInstanceState(Bundle savedInstanceState) { 
 super.onRestoreInstanceState(savedInstanceState); 
 lastOperation = savedInstanceState.getString("OPERATION"); 
 operand= savedInstanceState.getDouble("OPERAND"); 
 resultField.setText(operand.toString()); 
 operationField.setText(lastOperation); 
 } 
 // Коркардӣ пахши тугмачаи ададӣ 
 public void onNumberClick(View view){ 
 Button button = (Button)view; 
 numberField.append(button.getText()); 
 if(lastOperation.equals("=") && operand!=null){ 
 operand = null; 
 } 
 } 
 // Коркарди ҳодисаи пахши тугмачаи амал 
 public void onOperationClick(View view){ 
 Button button = (Button)view; 
 String op = button.getText().toString(); 
 String number = numberField.getText().toString(); 
 // Агар ягон чиз дохил карда бошед 
 if(number.length()>){ 
 number = number.replace(’,’, ’.’); 
 try{ 
 performOperation(Double.valueOf(number), op); 
 }catch (NumberFormatException ex){ 
 numberField.setText(""); 
 } 
 } 
 lastOperation = op; 
 operationField.setText(lastOperation); 
 } 
 private void performOperation(Double number, String operation){ 
 // Агар амалванд қаблан муқаррар нашуда бошад 
 if(operand ==null){ 
 operand = number; 
 } 
 else{ 
 if(lastOperation.equals("=")){ 
 lastOperation = operation; 
 } 
 switch(lastOperation){ 
 case "=": operand =number; break; 
 case "/": 
 if(number==){ 
 operand =.; 
 } 
 else{ 
 operand /=number; 
 } 
 break; 
 case "*": operand *=number;break; 
 case "+": operand +=number; break; 
 case "-": operand -=number; break; 
 } 
 } 
 resultField.setText(operand.toString().replace(’.’, ’,’)); 
 numberField.setText(""); 
 } 
 } 
 Натиҷаи барнома: 
 Компоненти RadioButton (пайвасткунак) дар дохили контейнери 
 RadioGroup истифода бурда мешавад. Дар контейнери мазкур ба ғайр аз 
 компоненти RadioButton, инчунин метавон аз дигар элементҳо, ба монанди 
 TextView низ истифода кард. 
 Методи асосӣ барои пайвасткунакҳо toggle() ба ҳисоб меравад, ки барои
 табдил додани ҳолати компонент истифода бурда мешавад. Инчунин методи 
 isChecked()-барои баргардонидани ҳолати тугмача ва setChecked() барои 
 ивазкунии ҳолати тугмача (вобаста аз параметрҳо) истифода бурда мешавад. 
 radioButton.setChecked(true); // тавассути программа барқарор кардани ҳолати
 radioButton 
 Барои хабардоркунӣ аз тағйирёбии ҳолати пайвастгар (яъне аз ҳолати 
 фаъол ба ғайрифаъол гузаштан ё баръакс) лозим аст, ки методи 
 setOnCheckedChangeListener() бо истифодаи OnCheckedChangeListener даъват 
 карда шавад. 
 Тавассути методи addView() ҳангоми ба даст овардани истинод ба гурӯҳи
 пайвастгарҳо, метавон ягон пайвастгари нав низ ҳамроҳ кард. 
 RadioGroup radioGroup = (RadioGroup )findViewByld(R.id.radioGroup); 
 RadioButton newRadioButton = new RadioButton(this); 
 newRadioButton.setText("Зан"); 
 radioGroup.addView(newRadioButton); 
 Барои дар ягон тарафи (рост, чап, боло, поён) пайвастгар ҳамроҳ кардани
 расм метавон тавассути барнома ё атрибути XML бо ёрии атрибути drawableRight
 ва ё ба он монанд расм ҳамроҳ кард. 
 <RadioButton 
 android:id="@+id/radioButton"... 
 android:drawableRight="@drawable/ic_launcher" 
 android:text="RadioButton" /> 
 Тавассути барнома бошад аз методи setCompoundDrawables(left, top, right,
 bottom) истифода карда мешавад. 
 radioButton.setCompoundDrawables(null, null, 
 getResources().getDrawable(R.drawable.rightpic), null); 
 Дар ин мисол танҳо барои тарафи рости пайвастгар расм ҳамроҳ карда 
 шудааст, яъне ба параметрҳои дигар null бахшида шудааст. Ин амалро метавон
 барои ҳамаи тарафҳои пайвастгар яку якбора низ анҷом дод. 
 Мисоли. Барномае менависем, ки дар он ду radioButton истифода бурда
 мешавад. Ҳангоми интихоб намудани radioButtonи якум бо пахш намудани 
 тугмачаи Ок суммаи ду адади додашуда ва ҳангоми интихоб намудани 
 radioButton-и дуюм фарқи ду адади додашударо ҳисоб кунад. 
 Файли XML: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical" 
 tools:layout_editor_absoluteX="dp" 
 tools:layout_editor_absoluteY="dp" 
 tools:ignore="MissingConstraints"> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:hint="a=" 
 android:inputType="textPersonName" /> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:hint="b=" 
 android:inputType="textPersonName" /> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:hint="S=" 
 android:inputType="textPersonName" /> 
 <RadioGroup 
 android:layout_width="match_parent" 
 android:layout_height="dp"> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:orientation="horizontal"> 
 <RadioButton 
 android:id="@+id/radioButton" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:text="Ҷамъ" /> 
 <RadioButton 
 android:id="@+id/radioButton" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:text="Тарҳ" /> 
 </LinearLayout> 
 </RadioGroup> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="Ок" /> 
 </LinearLayout> 
 </android.support.constraint.ConstraintLayout> 
 Коди барнома: 
 package com.example.user.myapplication; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.widget.Button; 
 import android.widget.EditText; 
 import android.widget.RadioButton; 
 import android.widget.TextView; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 final RadioButton plusRadioButton = (RadioButton)findViewById 
 (R.id.radioButton); 
 final RadioButton minusRadioButton=(RadioButton)findViewById 
 (R.id.radioButton); 
 Button button=(Button)findViewById(R.id.button); 
 final EditText ed=(EditText)findViewById(R.id.editText); 
 final EditText ed=(EditText)findViewById(R.id.editText); 
 final EditText ed=(EditText)findViewById(R.id.editText); 
 button.setOnClickListener(new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 int a,b,S=; 
 a=Integer.valueOf(String.valueOf(ed.getText())); 
 b=Integer.valueOf(String.valueOf(ed.getText())); 
 if (plusRadioButton.isChecked()) 
 S=a+b; 
 if (minusRadioButton.isChecked()) 
 S=a-b; 
 ed.setText(String.valueOf(S)); 
 } 
 }); 
 } 
 } 
 Мисоли. Формаи нав, ки иборат аз пайвастгар мебошад, месозем. 
 Тавассути онҳо замина формро бо интихоби ранги лозимӣ тағйир медиҳем. 
 Барои ин ибтидо манбаро омода мекунем. 
 <?xml version="." encoding="utf-"?> 
 <resources> 
 <string name="app_name">Мисол бо пайваст- 
 гари(RadioButton)</string> 
 <string name="current_pick">Интихоби ҷорӣ</string> 
 <string name="color_red">Сурх</string> 
 <string name="color_green">Сабз</string> 
 <string name="color_blue">Обӣ</string> 
 <string name="color_gray">Хокистарӣ</string> 
 </resources> 
 Дар асоси LinearLayout нишонаи сода месозем. Формаро бо блокҳои матнӣ
 пур карда, дар он матни "Ранги ҷорӣ"-ро мебахшем. Дар қисми поёнии форм се
 майдони матнии ранга ҷойгир буда, дар поёни онҳо чор пайвастгар мегузорем.
 Тавассути онҳо ранги блоки асосии матниро тағйир медиҳем. 
 <?xml version="." encoding="utf-"?> 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical"> 
 <TextView 
 android:id="@+id/current_pick" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:layout_weight="" 
 android:background="#" 
 android:gravity="center" 
 android:text="@string/current_pick" 
 android:textColor="#ffffff" /> 
 <LinearLayout 
 android:id="@+id/linearLayout" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:orientation="horizontal"> 
 <TextView 
 android:id="@+id/textViewRed" 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:layout_gravity="center" 
 android:layout_weight="" 
 android:background="#ff" 
 android:text="@string/color_red" 
 android:textColor="#" /> 
 <TextView 
 android:id="@+id/textViewGreen" 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:layout_gravity="center" 
 android:layout_weight="" 
 android:background="#ff" 
 android:text="@string/color_green" 
 android:textColor="#" /> 
 <TextView 
 android:id="@+id/textViewBlue" 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:layout_gravity="center" 
 android:layout_weight="" 
 android:background="#ff" 
 android:text="@string/color_blue" 
 android:textColor="#" /> 
 <TextView 
 android:id="@+id/textViewGray" 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:layout_gravity="center" 
 android:layout_weight="" 
 android:text="@string/color_gray" /> 
 </LinearLayout> 
 <RadioGroup 
 android:id="@+id/radioGroup" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:background="#" 
 android:orientation="horizontal"> 
 <RadioButton 
 android:id="@+id/radio_red" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_marginLeft="dp" 
 android:layout_weight="" /> 
 <RadioButton 
 android:id="@+id/radio_blue" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_marginLeft="dp" 
 android:layout_weight="" /> 
 <RadioButton 
 android:id="@+id/radio_green" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_marginLeft="dp" 
 android:layout_weight="" /> 
 <RadioButton 
 android:id="@+id/radio_gray" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_marginLeft="dp" 
 android:layout_weight="" 
 android:checked="true" /> 
 </RadioGroup> 
 </LinearLayout> 
 Диққат дошта бошед, ки элементҳои RadioButton дар контейнери 
 RadioGroup гузошта мешаванд. Агар ба форма нигоҳ кунем, мебинем, ки 
 RadioButton-и охирон дар ҳолати интихобшуда қарор дорад, яъне 
 (android:checked="true"). 
 Ба қисми барнома мегузарем. Барои тугмачаҳои пайвастгар код менависем.
 package com.example.user.myapplication; 
 import android.graphics.Color; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.widget.RadioButton; 
 import android.widget.TextView; 
 public class MainActivity extends AppCompatActivity { 
 private TextView mInfoTextView; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 mInfoTextView = (TextView)findViewById(R.id.current_pick); 
 RadioButton redRadioButton = (RadioButton)findViewById 
 (R.id.radio_red); 
 redRadioButton.setOnClickListener(radioButtonClickListener); 
 RadioButton greenRadioButton = (RadioButton)findViewById 
 (R.id.radio_green); 
 greenRadioButton.setOnClickListener(radioButtonClickListener); 
 RadioButton blueRadioButton = (RadioButton)findViewById 
 (R.id.radio_blue); 
 blueRadioButton.setOnClickListener(radioButtonClickListener); 
 RadioButton grayRadioButton = (RadioButton)findViewById 
 (R.id.radio_gray); 
 grayRadioButton.setOnClickListener(radioButtonClickListener); 
 } 
 View.OnClickListener radioButtonClickListener = new View. 
 OnClickListener() { 
 @Override 
 public void onClick(View v) 
 { 
 RadioButton rb = (RadioButton)v; 
 switch (rb.getId()) 
 { 
 case R.id.radio_red: mInfoTextView.setBackgroundColor 
 (Color.parseColor("#ff")); 
 break; 
 case R.id.radio_green: mInfoTextView.setBackgroundColor 
 (Color.parseColor("#ff")); 
 break; 
 case R.id.radio_blue: mInfoTextView.setBackgroundColor 
 (Color.parseColor("#ff")); 
 break; 
 case R.id.radio_gray: mInfoTextView.setBackgroundColor 
 (Color.parseColor("#")); 
 break; 
 default: 
 break; 
 } 
 } 
 }; 
 } 
 Натиҷаи барнома: 
 Мисоли. Барномаи тести санҷишӣ, барои тафтиши дониши хонанда аз 
 ягон фанни таълимӣ месозем. 
 Файли XML: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:orientation="vertical" 
 tools:ignore="MissingConstraints" 
 tools:layout_editor_absoluteX="dp" 
 tools:layout_editor_absoluteY="dp"> 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:background="#cccfff" 
 android:text="TextView" /> 
 <RadioGroup 
 android:layout_width="match_parent" 
 android:layout_height="dp"> 
 <RadioButton 
 android:id="@+id/radioButton" 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:layout_weight="" 
 android:background="#ec" 
 android:text="RadioButton" /> 
 <RadioButton 
 android:id="@+id/radioButton" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:background="#" 
 android:text="RadioButton" /> 
 <RadioButton 
 android:id="@+id/radioButton" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:background="#fefc" 
 android:text="RadioButton" /> 
 </RadioGroup> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:text="Next" /> 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:textSize="dp" 
 android:textAlignment="center" 
 android:text="" /> 
 </LinearLayout> 
 </android.support.constraint.ConstraintLayout> 
 Коди барнома: 
 package com.example.user.myapplication; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.view.View.OnClickListener; 
 import android.widget.Button; 
 import android.widget.RadioButton; 
 import android.widget.TextView; 
 public class MainActivity extends AppCompatActivity { 
 private String []savol=new String[]; 
 private String []J=new String[]; 
 private String []J=new String[]; 
 private String []J=new String[]; 
 private int i, k=; 
 private TextView txtSavol, txtjav; 
 private Button btnNext; 
 private RadioButton rJ; 
 private RadioButton rJ; 
 private RadioButton rJ; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 i=; 
 savol[]="+=?"; 
 J[]=""; 
 J[]=""; 
 J[]=""; 
 savol[]="+-=?"; 
 J[]=""; 
 J[]=""; 
 J[]=""; 
 savol[]="-+=?"; 
 J[]=""; 
 J[]="-"; 
 J[]=""; 
 txtSavol=(TextView)findViewById(R.id.textView); 
 txtjav=(TextView)findViewById(R.id.textView); 
 btnNext=(Button)findViewById(R.id.button); 
 rJ=(RadioButton) findViewById(R.id.radioButton); 
 rJ=(RadioButton) findViewById(R.id.radioButton); 
 rJ=(RadioButton) findViewById(R.id.radioButton); 
 txtSavol.setText(savol[i]); 
 rJ.setText(J[i]); 
 rJ.setText(J[i]); 
 rJ.setText(J[i]); 
 btnNext.setOnClickListener(new OnClickListener() { 
 @Override 
 public void onClick(View v) 
 { 
 if ((i==) & (rJ.isChecked())) 
 k++; 
 if ((i==) & (rJ.isChecked())) 
 k++; 
 if ((i==) & (rJ.isChecked())) 
 k++; 
 txtjav.setText(String.valueOf(k)); 
 i++; 
 txtSavol.setText(savol[i]); 
 rJ.setText(J[i]); 
 rJ.setText(J[i]); 
 rJ.setText(J[i]); 
 if (i>) 
 btnNext.setEnabled(false); 
 } 
 }); 
 } 
 } 
 Натиҷаи барнома: 
 Тавре дида мешавад, дар ин ҷо ҳангоми зиёд будани 
 миқдори саволҳо истифодаи операторҳои шартии зиёде лозим 
 меояд. Яке аз роҳҳои кӯтоҳкунии коди барнома истифодаи 
 хосияти tag-и компонентҳои RadioButton мебошад 
 (android:tag=""). Дар хосяити мазкур қимати ададӣ бахшида
 мешавад, масалан, дар RadioButton қимати, дар 
 RadioButton қимати ва дар RadioButton қимати бахшида
 мешавад. 
 <RadioButton 
 android:id="@+id/radioButton" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:background="#fefc" 
 android:tag="" 
 android:text="RadioButton" 
 /> 
 Пас аз ин, коди барномаро ба сурати зерин табдил медиҳем: 
 package com.example.user.myapplication; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.view.View.OnClickListener; 
 import android.widget.Button; 
 import android.widget.RadioButton; 
 import android.widget.TextView; 
 class Test{ 
 public String Savol; 
 public String J,J,J; 
 public int Jd; 
 } 
 public class MainActivity extends AppCompatActivity { 
 int n=; 
 Test []myTest=new Test[n]; 
 private int i, k=; 
 private TextView txtSavol, txtjav; 
 private Button btnNext; 
 private RadioButton rJ; 
 private RadioButton rJ; 
 private RadioButton rJ; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 for (int i=;i<n; i++) 
 myTest[i]=new Test(); 
 i=; 
 myTest[].Savol="+=?"; 
 myTest[].J=""; 
 myTest[].J=""; 
 myTest[].J=""; 
 myTest[].Jd=; 
 myTest[].Savol="+-=?"; 
 myTest[].J=""; 
 myTest[].J=""; 
 myTest[].J=""; 
 myTest[].Jd=; 
 myTest[].Savol="-+=?"; 
 myTest[].J=""; 
 myTest[].J="-"; 
 myTest[].J=""; 
 myTest[].Jd=; 
 txtSavol=(TextView)findViewById(R.id.textView); 
 txtjav=(TextView)findViewById(R.id.textView); 
 btnNext=(Button)findViewById(R.id.button); 
 rJ=(RadioButton) findViewById(R.id.radioButton); 
 rJ=(RadioButton) findViewById(R.id.radioButton); 
 rJ=(RadioButton) findViewById(R.id.radioButton); 
 txtSavol.setText(myTest[i].Savol); 
 rJ.setText(myTest[i].J); 
 rJ.setText(myTest[i].J); 
 rJ.setText(myTest[i].J); 
 btnNext.setOnClickListener(new OnClickListener() 
 { 
 @Override 
 public void onClick(View v) 
 { 
 if (myTest[i].Jd==Integer.valueOf 
 (rJ.getTag().toString())) 
 k++; 
 if (myTest[i].Jd==Integer.valueOf(rJ.getTag(). 
 toString())) 
 k++; 
 if (myTest[i].Jd==Integer.valueOf(rJ.getTag(). 
 toString())) 
 k++; 
 txtjav.setText(String.valueOf(k)); 
 i++; 
 txtSavol.setText(myTest[i].Savol); 
 rJ.setText(myTest[i].J); 
 rJ.setText(myTest[i].J); 
 rJ.setText(myTest[i].J); 
 if (i>) 
 btnNext.setEnabled(false); 
 } 
 }); 
 } 
 } 
 Компоненти RatingBar барои намоиш додани рейтинг ба намуди ситорача 
 истифода бурда мешавад. Барои гузоштани рейтинг метавон аз пахши ангушт ё
 тугмачаҳои қаблан гузошташуда истифода кард. 
 Класси RatingBar меросбари классҳои AbsSeekBar ва ProgressBar мебошад.
 Барои муайянкунии миқдори ситорачаҳо метавон аз атрибути 
 android:numStars дар дизайн истифода кард. 
 Барои компоненти RatingBar методҳои зерин истифода бурда мешаванд: 
 setNumStart(int) – муайянкунии миқдори ситорачаҳо 
 getRating() – ба даст оварии қимати рейтинг 
 setRating(float) – муайянкунии қимати рейтинг 
 isIndicator() – муқарраркунии реҷаи танҳо барои хондан бе имконияти 
 муқарраркунии қимати рейтинг аз ҷониби истифодабаранда 
 setStepSize(float) – қадами зиёдшавии рейтинг 
 Дар компоненти мазкур ду услуб ratingBarStyleSmall (ситорачаҳои хурд) ва
 ratingBarStyleIndicator (ситорачаҳои калон), мавҷуд аст, ки танҳо дар реҷаи
 индикатор кор мекунанд, яъне истифодабаранда наметавонад онҳоро иваз кунад.
 Ҳоло мисоли истифодабарии RatingBar –ро дида мебароем. Дар равзана се 
 компоненти RatingBar бо услубҳои гуногун мегузорем. 
 <?xml version="." encoding="utf-"?> 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical"> 
 <RatingBar 
 android:id="@+id/myRatingBar" 
 style="?android:attr/ratingBarStyle" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" /> 
 </LinearLayout> 
 Қисми барномаро ба сурати зерин менависем. 
 package com.example.user.myapplication; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.widget.RatingBar; 
 import android.widget.Toast; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 setTitle("Мисоли RatingBar"); 
 final RatingBar myRatingBar = (RatingBar) findViewById 
 (R.id.myRatingBar); 
 myRatingBar.setOnRatingBarChangeListener(new RatingBar. 
 OnRatingBarChangeListener() { 
 @Override 
 public void onRatingChanged(RatingBar ratingBar, float rating, 
 boolean fromUser) { 
 Toast.makeText(MainActivity.this, "Қимати рейтинг: " + 
 String.valueOf(rating), Toast.LENGTH_LONG).show(); 
 } 
 }); 
 } 
 } 
 Пас аз навиштани ин код барномаро иҷро карда бо пахш намудани 
 тугмачаи муш дар болои компонент рейтинг муқаррар мекунем. Қайд кардан ба
 маврид аст, ки дар ин компонент ҳангоми интихоб кардани ними компонент,
 рейтинг монда мешавад. 
 ) Элементҳои идоракунандаи матнӣ барои чӣ истифода бурда мешаванд? 
 ) Дар Android Studio чӣ гуна майдонҳои матнӣ маҷуданд? 
 ) Матни пешгӯикунанда чӣ гуна матн аст? 
 ) Чӣ тавр клавиатураи лозимӣ даъват карда мешавад? 
 ) Тугмачаи Button чӣ гуна тугмача аст? 
 ) Бо кадом усулҳо барои тугмачаи Button ҳодиса сохтан мумкин аст? 
 ) Компоненти RadioButton чӣ гуна компонент аст? 
 ) Компоненти RetingBar чӣ гуна компонент аст? 
 ) Чанд усули истифодабарии ситорачаҳо барои компоненти RetingBar 
 мавҷуд аст? 
 )Чӣ тавр қимати тугмачаи RetingBar-ро ба даст овардан мумкин аст? 
 Боби. Кор бо расм ва садо 
 Ибтидо барои сохтани инерфейс аз пикселҳо истифода бурда мешуд. Бо 
 тараққӣ ёфтани технология, экранҳои нав пайдо гардида, барои онҳо ҳангоми
 ғунҷоишҳои баланд (высоких разрешениях) элементҳо хело кӯчак гардида, 
 истифодаи пикселҳо хело душвор гардид. Бинобар ин, зарурати истифодаи 
 воҳидҳои ченкунии нав пеш омад. 
 Android воҳидҳои ченкунии зиёдеро истифода мебарад, ҳоло ба сифати 
 намуна муҳимтарини онҳоро меорем. 
 px (pixels) — пикселҳо. Як нуқта дар экран-воҳиди хурдтарини ченкунӣ;
 dp (density-independent pixels) — аз зичии пиксел новобаста. Воҳиди 
 абстрактии ченкунӣ, ки дар асоси зичии физикии экран бо иҷозати dpi
 асос ёфтааст. Дар ин ҳолат dp = px аст; 
 dip – синоним барои dp. Баъзан дар мисолҳои Google истифода бурда 
 мешавад; 
 sp (scale-independent pixels) — аз масштаби пиксел новобаста. Иҷозати
 танзими андозаро аз ҷониби истифодабаранда фароҳам меорад. Ҳангоми 
 кор бо ҳуруфот муфид мебошад; 
 in (inches) — дюймҳо, дар асоси андозаи физикии экран сохта шудааст.
 Метавон тавассути ҷадвали муқаррарӣ чен кард; 
 mm (millimeters) — миллиметрҳо, дар асоси андозаи физикии экран сохта
 шудааст. Метавон тавассути ҷадвали муқаррарӣ чен кард; 
 pt (points) — / дюйм, дар асоси андозаи физикии экран сохта шудааст;
 Мувофиқи қоида ҳангоми муқарраркунии андозаи матн аз воҳиди sp истифода
 бурда мешавад: 
 android:textSize="sp" 
 Дар ҳолатҳои боқимонда метавон аз dp истифода кард. 
 Барои dp –ро ба px табдил додан мувофиқи пешниҳоди роҳбарияти 
 созандагони Android метавон аз формулаи зерин истифода кард: 
 px = dp * (dpi / ) 
 Барои px –ро ба dp табдил додан бошад аз формулаи зерин истифода 
 бурда мешавад: 
 dp = px / (dpi / ) 
 Агар мо таҷҳизоти дорои ғунҷоиши нуқта бо дюйм-ро истифода барем,
 он гоҳ ин муносибат ба, баробар мешавад (Тавре ки дар боло қайд шуда буд).
 Аз ин ҷо аломати пиксел дар лоиҳа ба dp баробар мешавад. 
 Метод барои қимати dp-ро ба px табдил додан. 
 public static int dpToPx(int dp) 
 { 
 return (int) (dp*Resources.getSystem().getDisplayMetrics().density); 
 } 
 Метод барои қимати px-ро ба dp табдил додан. 
 public static int pxToDp(int px) 
 { 
 return (int) (px / Resources.getSystem().getDisplayMetrics(). 
 density); 
 } 
 Агар андозаҳо дар XML-файл муайян карда нашуда бошанд, пас тавассути
 коди зерин ҷойи холигӣ барои компонентҳо муайян карда мешаванд: 
 package com.example.user.myfirstapplication; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.ViewGroup; 
 import android.widget.Button; 
 import android.widget.LinearLayout; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 public void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 final float scale = getResources().getDisplayMetrics().density; 
 int padding_dp = (int) ( * scale +.f); 
 int padding_dp = (int) ( * scale +.f); 
 int padding_dp = (int) ( * scale +.f); 
 Button btn = new Button(this); 
 btn.setText("Сабти ном"); 
 btn.setLayoutParams(new ViewGroup.LayoutParams 
 (padding_dp,padding_dp*)); 
 btn.setPadding(padding_dp,padding_dp,padding_dp, 
 padding_dp); 
 LinearLayout li=(LinearLayout)findViewById(R.id.linearLayout); 
 li.addView(btn); 
 } 
 } 
 CountDownTimer дар Android барои насбнамоии шуморандаи баръакс (аз 
 боло ба поён) истифода бурда мешавад. Тарзи истифодабарии CountDownTimer 
 чунин аст: 
 CountDownTimer (long millisecInFuture, long countDownInterval ) 
 Дар ин ҷо millisecInFuture – ин вақт бо миллисекунд аст, ки қаблан муайян
 карда мешавад ва countDownInterval – ин интервали вақт бо миллисекунд мебо-
 шад, ки ба сифати қадам истифода бурда мешавад. 
 Дар CountDownTimer методҳои зиёде мавҷуд мебошанд, ки якчандтои 
 онҳоро бо мисоли мушаххас дида мебароем. 
 Ибтидо XML-файлро ба сурати зерин таҳия мекунем: 
 <?xml version="." encoding="utf-"?> 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:id="@+id/activity_main" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" > 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_alignParentBottom="true" 
 android:layout_centerHorizontal="true" 
 android:layout_marginBottom="dp" 
 android:text="Start" 
 android:textAppearance="?android:attr/textAppearanceLarge" 
 android:textStyle="bold|italic" /> 
 <TextView 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_above="@+id/button" 
 android:layout_centerHorizontal="true" 
 android:layout_marginBottom="dp" 
 android:id="@+id/textView" 
 android:textAppearance="?android:attr/textAppearanceLarge" 
 android:textSize="sp" /> 
 </RelativeLayout> 
 Сипас, коди барномаро ба намуди зерин менависем: 
 package com.example.user.myapplication; 
 import android.os.Bundle; 
 import android.os.CountDownTimer; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.widget.Button; 
 import android.widget.TextView; 
 public class MainActivity extends AppCompatActivity { 
 public int counter; 
 Button button; 
 TextView textView; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 button= (Button) findViewById(R.id.button); 
 textView= (TextView) findViewById(R.id.textView); 
 button.setOnClickListener(new View.OnClickListener() 
 { 
 @Override 
 public void onClick(View v) { 
 //Конструктори CountDownTimer 
 new CountDownTimer(, ){ 
 //Миқдори миллисекундҳо то ба охиррасии вақт 
 public void onTick(long millisUntilFinished){ 
 textView.setText(String.valueOf(counter)); 
 counter++; 
 } 
 /*Ҳангоми ба охиррасии вақти гузошташуда, ин метод иҷро 
 мегардад.*/ 
 public void onFinish(){ 
 textView.setText("FINISH!!"); 
 } 
 }.start(); 
 } 
 }); 
 } 
 } 
 Барои сохтани таймер ибтидо дар файли манба сатрҳои зеринро илова 
 мекунем: 
 <resources> 
 <string name="app_name">AndroidTimerExample</string> 
 <string name="action_settings">Settings</string> 
 <string name="hello_world">Hello world!</string> 
 <string name="timerVal">::</string> 
 <string name="pauseButtonLabel">Pause</string> 
 <string name="startButtonLabel">Start</string> 
 </resources> 
 Файли активитиро бошад ба сурати зерин омода мекунем: 
 <?xml version="." encoding="UTF-"?> 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="match_parent" 
 android:background="#" 
 android:layout_height="match_parent" > 
 <TextView 
 android:id="@+id/timerValue" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_above="@+id/pauseButton" 
 android:layout_centerHorizontal="true" 
 android:layout_marginBottom="dp" 
 android:textSize="sp" 
 android:textColor="#ffffff" 
 android:text="@string/timerVal" /> 
 <Button 
 android:id="@+id/startButton" 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:layout_alignParentLeft="true" 
 android:layout_centerVertical="true" 
 android:layout_marginLeft="dp" 
 android:text="@string/startButtonLabel" /> 
 <Button 
 android:id="@+id/pauseButton" 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:layout_alignBaseline="@+id/startButton" 
 android:layout_alignBottom="@+id/startButton" 
 android:layout_alignParentRight="true" 
 android:layout_marginRight="dp" 
 android:text="@string/pauseButtonLabel" /> 
 </RelativeLayout> 
 Коди барнома бошад, ба сурати зерин омода карда мешавад: 
 package com.example.user.myapplication; 
 import android.os.Bundle; 
 import android.os.Handler; 
 import android.os.SystemClock; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.widget.Button; 
 import android.widget.TextView; 
 public class MainActivity extends AppCompatActivity { 
 private Button startButton; 
 private Button pauseButton; 
 private TextView timerValue; 
 private long startTime = L; 
 //Сохтани объекти Handler 
 private Handler customHandler = new Handler(); 
 long timeInMilliseconds = L; 
 long timeSwapBuff = L; 
 long updatedTime = L; 
 @Override 
 public void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 timerValue = (TextView) findViewById(R.id.timerValue); 
 startButton = (Button) findViewById(R.id.startButton); 
 startButton.setOnClickListener(new View.OnClickListener() { 
 public void onClick(View view) { 
 startTime = SystemClock.uptimeMillis(); 
 customHandler.postDelayed(updateTimerThread, ); 
 } 
 }); 
 pauseButton = (Button) findViewById(R.id.pauseButton); 
 pauseButton.setOnClickListener(new View.OnClickListener() { 
 public void onClick(View view) { 
 timeSwapBuff += timeInMilliseconds; 
 customHandler.removeCallbacks(updateTimerThread); 
 } 
 }); 
 } 
 private Runnable updateTimerThread = new Runnable() { 
 public void run() { 
 timeInMilliseconds = SystemClock.uptimeMillis() - startTime; 
 updatedTime = timeSwapBuff + timeInMilliseconds; 
 int secs = (int) (updatedTime / ); 
 int mins = secs /; 
 secs = secs %; 
 int milliseconds = (int) (updatedTime % ); 
 timerValue.setText("" + mins + ":" 
 + String.format("%d", secs) + ":" 
 + String.format("%d", milliseconds)); 
 customHandler.postDelayed(this, ); 
 } 
 }; 
 } 
 Натиҷаи кори барнома 
 Компоненти ImageButton ба тугмачаи муқаррарӣ монанд буда, имконияти 
 дар худ нигоҳ доштани расмҳоро фароҳам меорад. 
 Ҳангоми тугмачаи ImageButton ро дар болои активити мондан равзанаи 
 зерин пайдо мешавад. 
 Аз банди Project ин равзана расми лозимиро, ки қаблан дар папкаи app->res-
 >drawable гузошта будем (dushanbe.png) интихоб мекунем. 
 Қайд. Барои истифодаи расмҳо ибтидо папкаи app->res папкаи drawable 
 –ро интихоб карда, тугмачаи рости мушро пахш мекунем. 
 Аз ин ҷо банди Show in Explorer –ро пахш карда, пас аз кушодашавӣ 
 расмҳои лозимиро дар он ҷо мегузорем. 
 Номи расм набояд бо ҳарфи калон навишта шавад, ҳатто дар таркиби ном
 мавҷуд будани ҳарфи калон метавонад ба хатогӣ орад. 
 Илова бар ин метавон дар реҷаи дизайн расми лозимиро тавассути хосияти
 android:src дар тугмача гузошт. 
 <ImageButton 
 android:id="@+id/imageButton" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:src="@drawable/dushanbe" /> 
 </LinearLayout> 
 Пас аз иҷроиш натиҷа шакли зеринро мегирад: 
 Методҳои асосии тугмаи ImageButton 
 Барои тавассути барнома илова намудани расмҳо ба компонент метавон аз
 методҳои гуногун истифода кард. 
 setImageBitmap()-барои истифодабарии нусхаи класси Bitmap ба сифати 
 расм. 
 Bitmap — барои дар худ нигоҳ доштани расми дар хотира буда истифода 
 мешавад. Объекти класси мазкур маълумот оиди ҳар як пиксели расмро дар
 худ нигоҳ медорад. Қайд кардан ба маврид аст, ки Bitmap хотираи 
 зиёдтареро нисбат ба файлҳои расмӣ банд мекунад. 
 Барои истифодабарӣ ибтидо объекти Bitmap сохта шуда, сипас тавассути
 методи BitmapFactory.decodeResource() аз куҷо гирифтани расм муайян карда
 мешавад. Пас аз гирифтани расм барои дар компоненти ImageButton нигоҳдорӣ
 намудан методи setImageBitmap даъват карда мешавад. 
 Мисол. Дар файли Java фармонҳои зерин навишта мешаванд. 
 package com.example.user.myapplication; 
 import android.graphics.Bitmap; 
 import android.graphics.BitmapFactory; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.widget.ImageButton; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 ImageButton imageButton = (ImageButton) findViewById 
 (R.id.imageButton); 
 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), 
 R.drawable.dushanbe); 
 imageButton.setImageBitmap(bitmap); 
 } 
 } 
 Пас аз иҷроиш дида мешавад, ки натиҷаи пешина тағйир наёфтааст. 
 setImageDrawable()- Барои ба сифати расми компонент истифодабарии 
 нусхаи класси Drawable истифода бурда мешавад. 
 Drawable — ин объекте мебошад, ки метавонад тасвири дар ягон объекти
 View мавҷудбударо нигоҳ дорад. Drawable шарт нест ки расм бошад, он 
 метавонад форма (shape)-и дар манба сохташуда ё комбинатсияи расмҳо бошад.
 Барои истифодабарии методи setImageDrawable ибтидо объекти класси 
 BitmapDrawable сохта мешавад, ки дар конструктори он манба ва объекти типи
 Bitmap истифода мешавад. 
 BitmapDrawable bitmapDrawable = new BitmapDrawable(getResources(), bitmap);
 Пас аз ин методи ImageView.setImageDrawable() даъват карда мешавад. 
 Мисол. Истифодаи методи setImageDrawable. 
 package com.example.user.myapplication; 
 import android.graphics.Bitmap; 
 import android.graphics.BitmapFactory; 
 import android.graphics.drawable.BitmapDrawable; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.widget.ImageButton; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 ImageButton imageButton = (ImageButton) findViewById 
 (R.id.imageButton); 
 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), 
 R.drawable.dushanbe); 
 BitmapDrawable bitmapDrawable = new BitmapDrawable 
 (getResources(), bitmap); 
 imageButton.setImageDrawable(bitmapDrawable); 
 } 
 } 
 setImageResource()- барои ба сифати расми компонент истифода бурдани
 расми дар манба буда, истифода бурда мешавад. 
 Мисол. Истифодаи методи setImageResource(). 
 package com.example.user.myapplication; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.widget.ImageButton; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 ImageButton imageButton = (ImageButton) findViewById 
 (R.id.imageButton); 
 imageButton.setImageResource(R.drawable.dushanbe); 
 } 
 } 
 setImageURI()-барои ба сифати расми компонент истифодабарии Uri 
 пешбинӣ шудааст. Баъзан компонент расмро дар кеш нигоҳ дошта ҳангоми
 ивазкунии Uri низ расми пешинаро нишон медиҳад. Барои ҳар маротиба 
 тоза кардани кеш истифодаи дастури setImageURI(null) маслиҳат дода 
 мешавад. 
 Мисол. Истифодаи методи setImageURI(). 
 package com.example.user.myapplication; 
 import android.net.Uri; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.widget.ImageButton; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 ImageButton imageButton = (ImageButton) findViewById 
 (R.id.imageButton); 
 imageButton.setImageResource(R.drawable.dushanbe); 
 imageButton.setImageURI(null); 
 Uri uri = Uri.parse("android.resource://com.example.user.my 
 application/drawable/dushanbe"); 
 imageButton.setImageURI(uri); 
 } 
 } 
 Монанди тугмачаҳои муқаррарӣ барои тугмачаи ImageButton низ метавон 
 ҳодисаи пахш карданро истифода (даъват) кард. Ҳоло бо як мисол ин амалро дида
 мебароем. Пеш аз ҳама дар папкаи drawable ду расм, масалан nishon.png ва 
 parcham.png илова мекунем. 
 Пас иловакунии расмҳо дар файли Java коди зеринро менависем. 
 package com.example.user.myapplication; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.widget.ImageButton; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 final ImageButton imageButton=(ImageButton) findViewById 
 (R.id.imageButton); 
 final boolean[] flag = {true}; 
 imageButton.setOnClickListener(new View.OnClickListener() 
 { 
 public void onClick(View v) 
 { 
 // Расми тугмача иваз мешавад 
 if (flag[]) 
 imageButton.setImageResource(R.drawable.nishon); 
 else 
 // Ба расми аввала бар мегардад 
 imageButton.setImageResource(R.drawable.parcham); 
 flag[] =!flag[]; 
 } 
 }); 
 } 
 } 
 Пас аз иҷроиши барнома, бо пахш кардани тугмача расм тағйир меёбад. 
 Натиҷаи барнома 
 Барои андозаи расмро тағйир додан, ибтидо объекти Bitmap сохта мешавад,
 сипас дар конструктори он андозаи лозимӣ нишон дода мешавад. 
 Мисол. 
 package com.example.user.myapplication; 
 import android.annotation.SuppressLint; 
 import android.graphics.Bitmap; 
 import android.graphics.BitmapFactory; 
 import android.graphics.Color; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.widget.ImageButton; 
 public class MainActivity extends AppCompatActivity { 
 @SuppressLint("WrongConstant") 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 int height =; 
 int width =; 
 Bitmap bmp; 
 bmp = BitmapFactory.decodeResource(getResources(), 
 R.drawable.dushanbe); 
 bmp = Bitmap.createScaledBitmap(bmp, width, height, true); 
 ImageButton imageButton = (ImageButton) findViewById 
 (R.id.imageButton); 
 imageButton.setImageBitmap(bmp); 
 imageButton.setBackgroundColor(Color.TRANSPARENT); 
 } 
 } 
 Қайд. Дар ин ҷо методи setBackgroundColor барои ранги заминаи қисми 
 боқимондаи тугмачаро ба ранги заминаи объекти волидайнӣ (активити асосӣ) 
 монанд кардан истифода бурда шудааст. 
 Барои иваз кардани андозаи расм ин усули ягона намебошад, усулҳои дигар
 низ мавҷуданд. 
 Масштабронии расмҳо 
 Барои ивазкунии мавқеи ҷойгиршавии расмҳо дар дохили тугмача аз 
 android:scaleType ва методи ImageView.setScaleType() истифода бурда мешавад.
 Методи мазкур метавонад яке аз қиматҳои зеринро қабул намояд: 
 center — расмро дар байни компоненти қарор медиҳад. 
 centerCrop — маштаби расмро мунтазам (бо нигоҳдошти нисбият) тағйир 
 медиҳад. Баландӣ ва паҳноии расм калон ё баробари баландӣ ва паҳноии 
 тугмача қарор мегирад. Пас аз ин расм дар мобайни тугмача ҷойгир мешавад.
 centerInside — миқёси расмро расмро мунтазам (бо нигоҳдошти нисбият) 
 тағйир медиҳад. Баландӣ ва паҳноии расм хурд ё баробари баландӣ ва паҳноии
 тугмача қарор мегирад. Пас аз ин расм дар мобайни тугмача ҷойгир мешавад.
 fitCenter — миқёси расмро бо нигоҳдошти нисбият тағйир медиҳад. Дар ин
 ҳангом ақаллан яке аз тарафҳои расм ба тарафи мувофиқи тугмача баробар
 карда мешавад. Пас аз ин расм дар мобайни тугмача ҷойгир мешавад. 
 fitEnd — миқёси расмро бо нигоҳдошти нисбият тағйир медиҳад. Дар ин 
 ҳангом ақаллан яке аз тарафҳои расм ба тарафи мувофиқи тугмача баробар
 карда мешавад. Пас аз ин расм дар тарафи рости поёнии кунҷи тугмача ҷойгир
 мешавад. 
 fitStart — миқёси расмро бо нигоҳдошти нисбият тағйир медиҳад. Дар ин 
 ҳангом ақаллан яке аз тарафҳои расм ба тарафи мувофиқи тугмача баробар
 карда мешавад. Пас аз ин расм дар тарафи чапи болоии кунҷи тугмача ҷойгир
 мешавад. 
 fitXY — миқёси ҳар як тарафи расмро новобаста аз тарафи дигар тағйир 
 медиҳад. Дар ин ҳангом ҳар яке аз тарафҳои расм ба тарафи мувофиқи тугмача
 баробар карда мешавад. 
 matrix — миқёси расмро бо истифодаи матритса (тавассути методи 
 ImageView.setImageMatrix() ба даст омада) тағйир медиҳад. 
 Мисол. 
 package com.example.user.myapplication; 
 import android.annotation.SuppressLint; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.widget.ImageButton; 
 import android.widget.ImageView; 
 public class MainActivity extends AppCompatActivity { 
 @SuppressLint("WrongConstant") 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 ImageButton imageButton=(ImageButton) findViewById 
 (R.id.imageButton); 
 imageButton.setImageResource(R.drawable.parcham); 
 ImageView.ScaleType scaleType=FIT_END; 
 imageButton.setScaleType(scaleType); 
 } 
 } 
 Қайд. Ҳамаи амалҳои иҷрокардааамонро метавон тавассути XML-файл 
 низ иҷро кард. 
 <ImageButton 
 android:id="@+id/imageButton" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:src="@drawable/parcham" 
 android:scaleType="center" /> 
 Дар ин ҳолат ҳамаи атрибутҳои лозимӣ бо ҳарфи хурд навишта мешаванд,
 ба монанди: android:scaleType="centerInside". 
 Илова бар ин имкониятҳо, компоненти мазкур дорои хосиятҳо ва методҳои
 зиёде мебошад, ки ҳангоми кор кардан метавон бо онҳо шинос шуд. Яке аз ин
 методҳо методи setAlpha() мебошад, ки барои шафофияти компонентро муайян 
 кардан, истифода бурда мешавад. 
 Мисол. Шаффоф намудани расм. 
 package com.example.user.myapplication; 
 import android.annotation.SuppressLint; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.widget.ImageButton; 
 public class MainActivity extends AppCompatActivity{ 
 @SuppressLint("WrongConstant") 
 @Override 
 protected void onCreate(Bundle savedInstanceState){ 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 ImageButton imageButton=(ImageButton) findViewById 
 (R.id.imageButton); 
 imageButton.setImageResource(R.drawable.parcham); 
 imageButton.setAlpha((float).); 
 } 
 } 
 Натиҷаи барнома: 
 Компоненти ImageView барои нигоҳ доштани расмҳо истифода бурда 
 мешавад. Барои аз XML-файл ба даст овардани расм аз атрибути android:src 
 истифода бурда мешавад. Дар класси ImageView методҳои зиёде барои ба 
 дастоварии расм мавҷуд аст. 
 setImageResource(int resId); 
 setImageBitmap(Bitmap bitmap); 
 setImageDrawable(Drawable drawable); 
 setImageURI(Uri uri). 
 Мо бо ин методҳо аллакай аз компоненти ImageButton шинос ҳастем. 
 Барои истифодабарии компоненти мазкур ибтидо дар активити як тугмачаи
 ImageView мемонем, ки дар натиҷа XML-файл шакли зеринро мегирад: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context="com.devqa.example.image.ShowImageActivity"> 
 <LinearLayout 
 android:id="@+id/idShowImageLayout" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="horizontal" 
 tools:ignore="MissingConstraints" 
 tools:layout_editor_absoluteX="dp" 
 tools:layout_editor_absoluteY="dp"> 
 <ImageView 
 android:id="@+id/imageView" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:src="@drawable/parcham" /> 
 </LinearLayout> 
 </android.support.constraint.ConstraintLayout> 
 Барои компоненти ImageView ҳамаи методҳои миқёсгирии қаблан барои 
 компоненти ImageButton мавриди баҳс қарор додаамонро метавон истифода кард.
 Илова бар ин, методҳои масштабиронии: setMaxHeight(), setMaxWidth(), 
 getMinimunHeight(), getMinimunWidth(), getScaleType(), setScaleType() низ
 истифода бурда мешаванд. 
 Яке аз атрибутҳои дигари компоненти ImageView 
 android:adjustViewBounds="true" мебошад. Тавре ки медонем, ҳангоми 
 истифодабарии атрибути scaleType="fitCenter" Android андозаи расмро ҳисоб
 карда, андозаи ImageView-ро сарфи назар мекунад. Дар ин ҳолат расм метавонад
 аз контейнер хориҷ шавад. Атрибути adjustViewBounds бошад, расмро маҷбур 
 месозад, ки ба андозаи компоненти контейнер итоат кунад. Ин атрибут баъзан
 метавонад кор накунад. Масалан, агар дар ImageView атрибути 
 layout_width="dip" истифода шуда бошад, он гоҳ ҳангоми ImageView-ро дар 
 RelativeLayout ё FrameLayout гузоштан, истифодаи қимати dip барои ин 
 контейнерҳо маслиҳат дода мешавад. 
 Мисол. Бигзор дар активити компоненти ImageView мавҷуд буда, мехоҳем,
 ки бо пахш намудани тугмачаи фармонӣ ягон расм аз нигористон дар он нишон
 дода шавад: 
 package com.example.user.myapplication; 
 import android.content.Intent; 
 import android.graphics.Bitmap; 
 import android.net.Uri; 
 import android.os.Bundle; 
 import android.provider.MediaStore; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.widget.Button; 
 import android.widget.ImageView; 
 import java.io.IOException; 
 public class MainActivity extends AppCompatActivity { 
 static final int GALLERY_REQUEST =; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 Button button = (Button)findViewById(R.id.button); 
 button.setOnClickListener(new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); 
 photoPickerIntent.setType("image/*"); 
 startActivityForResult(photoPickerIntent, GALLERY_REQUEST); 
 } 
 }); 
 } 
 @Override 
 protected void onActivityResult(int requestCode, int resultCode, 
 Intent imageReturnedIntent) { 
 super.onActivityResult(requestCode, resultCode, 
 imageReturnedIntent); 
 Bitmap bitmap = null; 
 ImageView imageView = (ImageView) findViewById(R.id.imageView); 
 switch(requestCode) { 
 case GALLERY_REQUEST: 
 if(resultCode == RESULT_OK){ 
 Uri selectedImage = imageReturnedIntent.getData(); 
 try { 
 bitmap = MediaStore.Images.Media.getBitmap 
 (getContentResolver(), selectedImage); 
 } catch (IOException e) { 
 e.printStackTrace(); 
 } 
 imageView.setImageBitmap(bitmap); 
 } 
 } 
 } 
 } 
 Мақсади даъвати ACTION_PICK намоиш додани ҳамаи расмҳои 
 нигористон буда, (дар телефон нигоҳ дошта мешаванд) имконияти интихоби яке
 аз онҳоро фароҳам меорад. Дар ин ҳол суроғаи URI, ки мавқеи ҷойгиршавии 
 расмро ифода мекунад, баргардонида мешавад. Барои ба дастоварии URI методи
 getData() истифода бурда мешавад. Барои URI-ро ба объекти мувофиқи класси
 Bitmap табдил додан методи Media.getBitmap() даъват карда мешавад. Пас аз ин,
 имконияти ба ImageView бахшидани расм тавассути методи setImageBitmap() 
 фароҳам мешавад. 
 Қайд кардан ба маврид аст, ки ин амалро метавон ба таври дигар (содатар)
 бо истифодаи методи setImageURI иҷро кард: 
 Uri selectedImage = imageReturnedIntent.getData(); 
 imageView.setImageURI(selectedImage); 
 Тавре ки қайд кардем, элементи ImageView дорои ду метод getWidth() ва
 getHeight() мебошад, ки мувофиқан барои ба дастоварии васегӣ ва баландии он
 хизмат мекунанд. Агар ин методҳо дар onCreate() даъват карда шаванд, он гоҳ
 қимати сифр бармегардонанд. Пас, барои қимати дуруст баргардонидан, зарур
 аст, ки онҳо дар ҳодисаи пахши ягон тугмача ё дигар ҳодиса даъват карда шаванд.
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 final ImageView imageView = (ImageView) findViewById 
 (R.id.imageView); 
 final TextView infoTextView = (TextView) findViewById 
 (R.id.textView); 
 //Дарозӣ ва бари компоненти ImageView ҳамчун сифр баргардонида 
 мешавад. 
 infoTextView.setText("Размеры ImageView: " + String.valueOf 
 (imageView.getWidth()) 
 + ": " + String.valueOf(imageView.getHeight())); 
 Button button = (Button) findViewById(R.id.button); 
 button.setOnClickListener(new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 /*дар ҳодисаи onClick бошад, қимати дурусти бар ва баландии 
 ImageView баргардонида мешавад*/ 
 infoTextView.setText("Размеры ImageView: " + String.valueOf 
 (imageView.getWidth())+ ": " +String.valueOf(imageView. 
 getHeight())); 
 } 
 }); 
 } 
 Баъзан зарурати нусхабардорӣ намудани расм аз як ImageView ба 
 ImageView –и дигар пеш меояд. Барои иҷрои ин амал ибтидо объекти Drawable-
 ро тавассути методи getDrawable() ба даст оварда, ба компоненти дуюм 
 мебахшем. 
 //Компоненти якум, расмдор 
 ImageView ivSource = (ImageView) findViewById(R.id.sourceImageView); 
 //Компоненти якум, берасм 
 ImageView ivTarget = (ImageView) findViewById(R.id.targetImageView); 
 //Ба дастоварии расм аз компоненти якум 
 Drawable drawable = ivSource.getDrawable(); 
 //Ба компоненти дуюм бахшидани расм 
 ivTarget.setImageDrawable(drawable); 
 Мисол. Барномае месозем, ки бо пахш намудани расм дар активити 
 расмҳои дигарро нишон диҳад. 
 Барои ҳалли ин мисол ибтидо лоиҳаи нав сохта, дар папкаи drawable 
 расмҳои лозимиро мегузорем. 
 Пас аз ин активитиамонро ба сурати зерин тағйир медиҳем: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context="com.devqa.example.image.ShowImageActivity"> 
 <LinearLayout 
 android:id="@+id/idShowImageLayout" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="horizontal" 
 tools:layout_editor_absoluteX="dp" 
 tools:layout_editor_absoluteY="dp" 
 tools:ignore="MissingConstraints"> 
 </LinearLayout> 
 </android.support.constraint.ConstraintLayout> 
 Дар охир коди барномаро ба сурати зерин менависем: 
 package com.example.user.myapplication; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.widget.ImageView; 
 import android.widget.LinearLayout; 
 public class MainActivity extends AppCompatActivity { 
 int imagesIdArr[]= new int[]{R.drawable.parcham, 
 R.drawable.nishon, R.drawable.muzey, R.drawable.sport, 
 R.drawable.ateatr, R.drawable.poytaxt}; 
 int currImage =; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) 
 { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 LinearLayout showImageLayoutView = (LinearLayout)this. 
 findViewById(R.id.idShowImageLayout); 
 // Сохтани объекти ImageView 
 final ImageView imgView = new ImageView(this); 
 // Илова намудани ImageView ба объекти LinearLayout. 
 showImageLayoutView.addView(imgView); 
 // Намоиш додани расми нахустини массиви imagesIdArr. 
 imgView.setImageResource(this.imagesIdArr[currImage]); 
 // Барои объекти image view қайд намудани ҳодиса. 
 imgView.setOnClickListener(new View.OnClickListener() 
 { 
 // Ҳодисаи onClick. 
 @Override 
 public void onClick(View view) 
 { 
 if(currImage==){ 
 currImage = -; 
 } 
 currImage++; 
 imgView.setImageResource(imagesIdArr[currImage]); 
 } 
 } 
 ); 
 } 
 } 
 Пас аз иҷроиш дар активити як расм нишон дода мешавад, ки бо пахш 
 кардани он навбат ба навбат расмҳои дигар нишон дода мешаванд. 
 Дар таркиби Android SDK воситаҳои зиёде барои хатозудои (ислоҳи 
 хатогиҳо) мавҷуд мебошанд. Яке аз ин воситаҳо LogCat ба ҳисоб меравад, ки
 барои намоиш доддани журнали логҳо пешбинӣ шудаст. 
 Баъзан ба барноманавис зарурати баровардани натиҷаи фосилавӣ пеш 
 меояд. Дар Android класси махсуси android.util.Log барои баровардани натиҷаҳои
 фосилавӣ мавҷуд аст. 
 Класси android.util.Log иҷозати тақсимкунии пайғомро ба категорияҳо 
 вобаста аз зарурат фароҳам меорад. Барои ба категорияҳо ҷудо намудани пайғом
 аз методҳои зерин истифода бурда мешавад: 
 Log.e() - хатогӣ (error); 
 Log.w() - огоҳӣ (warning); 
 Log.i() - иттилоот (info); 
 Log.d() - хатозудоӣ (degub); 
 Log.v() - муфассал (verbose); 
 Log.wtf() – хатогии бениҳоят зиёд, сар карда аз Android. кор мекунад;
 Ба сифати параметри якуми методҳои мазкур тағйирёбандаи сатрӣ, ки тег ном
 дорад истифода мешавад. Одатан, дар ибтидои барнома тағйирёбандаи мазкур ба
 сурати зерин муаррифӣ карда мешавад: 
 private static final String TAG = "MyFirstApplication"; 
 Баъзан барноманависон дар барномаҳои мураккаб варианти зеринро 
 истифода мебаранд, ки дар кадом класс ба амал омадани фурухониро муайян 
 мекунад: 
 private final String TAG = getClass().getSimpleName(); 
 Пас аз муаррификунии тағйирёбандаи мазкур, дар дилхоҳ ҷойи барнома 
 метавон методи мувофиқро даъват кард: 
 Log.i(TAG, "Пайғом барои навиштан дар журнал"); 
 Барои пешгирӣ намудани ҳолатҳои истисноӣ низ метавон аз Log истифода
 кард: 
 try { 
 //... 
 } catch (Exception exception) { 
 Log.e(TAG, "Ҳолати истисноӣ:", exception); 
 } 
 Истифодабаранда ин журналро наметавонад мушоҳида кунад. 
 Барноманавис бошад, метавонад онро дар LogCat мушоҳида кунад. 
 Дар лоиҳаҳои тайёр маслиҳат дода мешавад, ки ҳамаи даъватҳои LogCat 
 нест карда шаванд. Баъзе барноманависони моҳир чунин амал мекунанд: 
 package com.example.user.myfirstapplication; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.util.Log; 
 public class MainActivity extends AppCompatActivity { 
 private static final String TAG = "MyFirstApplication"; 
 public static final boolean isDebug = false; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 MyLogger("Пайғом барои навиштан дар журнал"); 
 } 
 public void MyLogger(String statement){ 
 if (isDebug) { 
 Log.v(TAG, statement); 
 } 
 } 
 } 
 Компоненти VideoView барои намоиш додани видеоклипҳо истифода 
 бурда мешавад. Android файлҳои қолаби gp ва mp-ро пуштибонӣ мекунад. 
 Истифодаи ин компонент хело сода мебошад. Дар ин компонент объекти Surface
 мавҷуд аст, ки ҳамаи амалҳои идоракунии видеоро капсуласозӣ мекунад ва дар
 он видео намоиш дода мешавад. Метавон файлҳои видеоиро аз флешкарта, манба
 ва ё шабакаи интернет истифода кард. 
 Барои видеоро намоиш додан метавон аз методи setVideoPath() ё 
 setVideoUri() истифода кард. Ба сифати параметри ягона ин методҳо суроғаи
 файли локалӣ, URI-суроғаи манба ё суроғаи файли дастраси дури 
 виддеопоток(интернет)-ро қабул мекунанд. 
 Пас аз қимати ибтидоӣ бахшидан имконияти идоракунии видео тавассути 
 методҳои start(), stopPlayback(), pause() ва seekTo() VideoView фароҳам оварда
 мешавад. Илова бар ин, методи setKeepScreenOn() низ дастрас мешавад, ки барои
 пешгирии рангивазкунии равзана дар вақти иҷрои видео истифода мешавад. 
 Ҳоло мисоли истифодаи компоненти мазкурро дида мебароем. Барои 
 иҷрои ин амал ибтидо дар папкаи Values бо номи raw папкаи нав месозем: 
 Сипас, файли видеоиро нусхабардорӣ карда, дар ин папка мегузорем. 
 Ҳангоми гузоштан пас аз пахши тугмачаи Paste, равзанаи зерин пайдо 
 мешавад, дар ин равзана метавон, номи файл ва мавқеи ҷойгиршавии онро тағйир
 дод. 
 Пас аз гузоштани файли лозимӣ, ба сурати зерин пайдо мешавад. 
 Баъди омодакунии видео, XML-файл-ро ба сурати зерин ҳосил мекунем: 
 <?xml version="." encoding="UTF-"?> 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="match_parent" 
 android:background="#" 
 android:layout_height="match_parent"> 
 <VideoView 
 android:id="@+id/videoView" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_alignParentStart="true" 
 android:layout_alignParentTop="true" /> 
 </RelativeLayout> 
 Сипас, дар Java-файл ба сурати зерин код менависем: 
 package com.example.user.myapplication; 
 import android.net.Uri; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.widget.MediaController; 
 import android.widget.VideoView; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 public void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 String videoSource ="android.resource://com.example.user. 
 myapplication/" + R.raw.mysong; 
 VideoView videoView = (VideoView) findViewById 
 (R.id.videoView); 
 videoView.setVideoURI(Uri.parse(videoSource)); 
 videoView.setMediaController(new MediaController(this)); 
 videoView.requestFocus(); 
 videoView.start(); // Оғози иҷроиши файли видео*/ 
 } 
 } 
 Пас аз иҷроиш барнома шакли зеринро соҳиб мешавад: 
 Барои иҷронамоии файли видеои дар SD-карта ҷойгирбуда, аз методи 
 setVideoPath() истифода бурда мешавад. 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 // роҳ ба файл дар SD-карта 
 String videoSource ="/sdcard/Movies/cat.gp"; 
 VideoView videoView = (VideoView) findViewById(R.id.videoView); 
 videoView.setVideoPath(videoSource); 
 videoView.setMediaController(new MediaController(this)); 
 videoView.requestFocus(); 
 videoView.start(); 
 } 
 Методи videoView.setMediaController(new MediaController(this)) барои
 намоиш додани тугмачаҳои Pause ва Play истифода бурда мешавад. 
 Методи requestFocus() барои қабул намудани фокус истифода бурда 
 мешавад. Методи start() бошад, боиси ба таври автоматӣ иҷрошавии файли видео
 мегардад. 
 Барои MediaPlayer –и сохтаамон метавон тугмачаҳои Pause ва Play илова
 кард. 
 Барои иҷрои ин амал, ибтидо XML-файлро ба сурати зерин тағйир 
 медиҳем. 
 <?xml version="." encoding="UTF-"?> 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="match_parent" 
 android:background="#" 
 android:layout_height="match_parent"> 
 <VideoView 
 android:id="@+id/videoView" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_alignParentStart="true" 
 android:layout_alignParentTop="true" /> 
 <Button 
 android:id="@+id/buttonPause" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:layout_alignParentBottom="true" 
 android:layout_alignParentStart="true" 
 android:layout_marginStart="dp" 
 android:text="Pause" /> 
 <Button 
 android:id="@+id/buttonPlay" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:layout_alignParentBottom="true" 
 android:layout_alignParentEnd="true" 
 android:text="Play" /> 
 </RelativeLayout> 
 Коди барнома бошад шакли зеринро мегирад: 
 package com.example.user.myapplication; 
 import android.net.Uri; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.widget.Button; 
 import android.widget.MediaController; 
 import android.widget.VideoView; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 public void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 String videoSource ="android.resource://com.example.user. 
 myapplication/" + R.raw.mysong; 
 final VideoView videoView = (VideoView) findViewById 
 (R.id.videoView); 
 final Button buttonPause=(Button) findViewById 
 (R.id.buttonPause); 
 final Button buttonPlay=(Button) findViewById 
 (R.id.buttonPlay); 
 videoView.setMediaController(new MediaController(this)); 
 videoView.setVideoURI(Uri.parse(videoSource)); 
 videoView.setMediaController(new MediaController(this)); 
 videoView.requestFocus(); 
 videoView.start(); // Оғози иҷроиши файли видео*/ 
 buttonPause.setOnClickListener(new View.OnClickListener(){ 
 @Override 
 public void onClick(View v) { 
 videoView.pause(); 
 } 
 }); 
 buttonPlay.setOnClickListener(new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 videoView.start(); 
 } 
 }); 
 } 
 } 
 Натиҷаи барнома: 
 Барои иҷро намудани файлҳои садоӣ дар Android класси 
 MediaPlayer.пешбинӣ шудааст. 
 Барои иҷро намудани ягон аудио MediaPlayer қаблан бояд донад, ки кадом
 файл(манба) бояд иҷро карда шавад. Барои муайян намудани файли аудиоӣ се 
 усул вуҷуд дорад: 
 дар методи create() ба объекти mediaplayer id-и манбаи аудиои бахшида 
 мешавад; 
 дар методи create() ба объекти mediaplayer объекти uri-и манбаи аудиои
 бахшида мешавад; 
 дар методи setdatasource() ба объекти mediaplayer роҳи пурраи аудиофайл
 равон карда мешавад. 
 Пас аз муайянкунии манба методи prepare() ё prepareAsync() даъват карда
 мешавад. Ин метод файли садоиро барои иҷро шудан омода мекунад. Агар 
 зарурати иҷроиши файл аз шабака пеш ояд, он гоҳ истифодаи методи 
 prepareAsync() маслиҳат дода мешавад. 
 Барои идоракунии файли садоӣ дар класси MediaPlayer методҳои зерин 
 муайян гардидаанд: 
 start() - оғози (иҷроиши) аудио; 
 pause() - танаффус ё истодани иҷроиш; 
 stop() - манъи ё боздоштани иҷроиш. 
 Ҳоло бо мисоле истифодаи файлҳои садоиро дида мебароем. Барои иҷрои ин 
 амал, ибтидо монанди ҳолати видео файлҳои садоиро дар папкаи res/raw 
 мегузорем. 
 Барои идора намудани ҷараёни иҷроиши файли садоӣ ба сурати зерин 
 activity_main.xml –ро омода месозем, яъне дар он се тугмачаи идоракунанда
 мегузорем: 
 <?xml version="." encoding="utf-"?> 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="horizontal" 
 android:background="#" 
 android:padding="dp"> 
 <Button 
 android:id="@+id/start" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:text="Play" 
 android:onClick="play"/> 
 <Button 
 android:id="@+id/pause" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:text="Pause" 
 android:onClick="pause"/> 
 <Button 
 android:id="@+id/stop" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:text="Stop" 
 android:onClick="stop"/> 
 </LinearLayout> 
 Коди класси MainActivity-ро бошад ба сурати зайл тағйир медиҳем: 
 package com.example.user.myapplication; 
 import android.media.MediaPlayer; 
 import android.net.Uri; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.widget.Button; 
 import android.widget.MediaController; 
 import android.widget.Toast; 
 import android.widget.VideoView; 
 public class MainActivity extends AppCompatActivity { 
 MediaPlayer mPlayer; 
 Button startButton, pauseButton, stopButton; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 mPlayer=MediaPlayer.create(this, R.raw.mysong); 
 //int idsong=getResourceId("mysong", "raw", getPackageName()); 
 //mPlayer=MediaPlayer.create(this, id); 
 mPlayer.setOnCompletionListener(new MediaPlayer. 
 OnCompletionListener() { 
 @Override 
 public void onCompletion(MediaPlayer mp) { 
 stopPlay(); 
 } 
 }); 
 startButton = (Button) findViewById(R.id.start); 
 pauseButton = (Button) findViewById(R.id.pause); 
 stopButton = (Button) findViewById(R.id.stop); 
 pauseButton.setEnabled(false); 
 stopButton.setEnabled(false); 
 } 
 private void stopPlay(){ 
 mPlayer.stop(); 
 pauseButton.setEnabled(false); 
 stopButton.setEnabled(false); 
 try { 
 mPlayer.prepare(); 
 mPlayer.seekTo(); 
 startButton.setEnabled(true); 
 } 
 catch (Throwable t) { 
 Toast.makeText(this, t.getMessage(), 
 Toast.LENGTH_SHORT).show(); 
 } 
 } 
 public void play(View view){ 
 mPlayer.start(); 
 startButton.setEnabled(false); 
 pauseButton.setEnabled(true); 
 stopButton.setEnabled(true); 
 } 
 public void pause(View view){ 
 mPlayer.pause(); 
 startButton.setEnabled(true); 
 pauseButton.setEnabled(false); 
 stopButton.setEnabled(true); 
 } 
 public void stop(View view){ 
 stopPlay(); 
 } 
 @Override 
 public void onDestroy() { 
 super.onDestroy(); 
 if (mPlayer.isPlaying()) { 
 stopPlay(); 
 } 
 } 
 } 
 Барномаро иҷро мекунем, ки шакли зеринро мегирад: 
 Ҳангоми иҷроиш ва боздории (Pause) садо ягон душворӣ пеш намеояд. 
 Вале дар вақти пахш намудани тугмачаи Stop мо метавонем ба баъзе душвориҳо
 рӯбарӯ шавем. Масалан, агар хоҳем, ки аз барнома бароем (тугмачаи ба қафоро
 аз телефон пахш мекунем), он гоҳ барои Activity ҷорӣ методи onDestroy даъват
 карда шуда, activity нест мегардад, аммо MediaPlayer корашро давом медиҳад.
 Акнун ба лоиҳа аз сари нав баргардем, он гоҳ activity аз сари нав сохта мешавад,
 вале тавассути тугмачаҳои гузоштаамон наметавонем файли садоиро идора 
 кунем. Аз ин хотир, дар ин ҷо методи onDestroy барои ба анҷом расонидани кори
 MediaPlayer азнав муаррифӣ гардидааст. 
 Барои дуруст, бехато ва ба таври табии ба охиррасонии кори MediaPlayer
 коркарди ҳодисаи OnCompletionListener муайян карда шудааст, ки бо пахши 
 тугмачаи Stop баробарқувва мебошад. 
 Барои файли садоиямон тугмачаи идоракунии садоро ҳамроҳ мекунем. 
 Барои иҷрои ин амал дар файли activity_main.xml як тугмачаи SeekBar мегузорем:
 <?xml version="." encoding="utf-"?> 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical" 
 android:padding="dp"> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content"> 
 <Button 
 android:id="@+id/start" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:text="Play" 
 android:onClick="play"/> 
 <Button 
 android:id="@+id/pause" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:text="Pause" 
 android:onClick="pause"/> 
 <Button 
 android:id="@+id/stop" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:text="Stop" 
 android:onClick="stop"/> 
 </LinearLayout> 
 <SeekBar 
 android:id="@+id/volumeControl" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_marginTop="dp"/> 
 </LinearLayout> 
 Коди барномаро дар MainActivity ба сурати зерин тағйир медиҳем: 
 package com.example.user.myapplication; 
 import android.content.Context; 
 import android.media.AudioManager; 
 import android.media.MediaPlayer; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.widget.Button; 
 import android.widget.SeekBar; 
 import android.widget.Toast; 
 public class MainActivity extends AppCompatActivity { 
 MediaPlayer mPlayer; 
 Button startButton, pauseButton, stopButton; 
 SeekBar volumeControl; 
 AudioManager audioManager; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 mPlayer=MediaPlayer.create(this, R.raw.mysong); 
 mPlayer.setOnCompletionListener(new MediaPlayer. 
 OnCompletionListener() { 
 @Override 
 public void onCompletion(MediaPlayer mp) { 
 stopPlay(); 
 } 
 }); 
 startButton = (Button) findViewById(R.id.start); 
 pauseButton = (Button) findViewById(R.id.pause); 
 stopButton = (Button) findViewById(R.id.stop); 
 audioManager = (AudioManager) getSystemService(Context. 
 AUDIO_SERVICE); 
 int maxVolume = audioManager.getStreamMaxVolume(AudioManager. 
 STREAM_MUSIC); 
 int curValue = audioManager.getStreamVolume(AudioManager. 
 STREAM_MUSIC); 
 volumeControl = (SeekBar) findViewById(R.id.volumeControl); 
 volumeControl.setMax(maxVolume); 
 volumeControl.setProgress(curValue); 
 volumeControl.setOnSeekBarChangeListener(new SeekBar. 
 OnSeekBarChangeListener() { 
 @Override 
 public void onProgressChanged(SeekBar seekBar, 
 int progress, boolean fromUser) { 
 audioManager.setStreamVolume(AudioManager. 
 STREAM_MUSIC, progress, ); 
 } 
 @Override 
 public void onStartTrackingTouch(SeekBar seekBar) { 
 } 
 @Override 
 public void onStopTrackingTouch(SeekBar seekBar) { 
 } 
 }); 
 pauseButton.setEnabled(false); 
 stopButton.setEnabled(false); 
 } 
 private void stopPlay(){ 
 mPlayer.stop(); 
 pauseButton.setEnabled(false); 
 stopButton.setEnabled(false); 
 try { 
 mPlayer.prepare(); 
 mPlayer.seekTo(); 
 startButton.setEnabled(true); 
 } 
 catch (Throwable t) { 
 Toast.makeText(this, t.getMessage(), 
 Toast.LENGTH_SHORT).show(); 
 } 
 } 
 public void play(View view){ 
 mPlayer.start(); 
 startButton.setEnabled(false); 
 pauseButton.setEnabled(true); 
 stopButton.setEnabled(true); 
 } 
 public void pause(View view){ 
 mPlayer.pause(); 
 startButton.setEnabled(true); 
 pauseButton.setEnabled(false); 
 stopButton.setEnabled(true); 
 } 
 public void stop(View view){ 
 stopPlay(); 
 } 
 @Override 
 public void onDestroy() { 
 super.onDestroy(); 
 if (mPlayer.isPlaying()) { 
 stopPlay(); 
 } 
 } 
 } 
 Барои идоракунии садо класси AudioManager татбиқ карда шудааст. 
 Тавассути даъвати методи зерин, 
 audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 
 progress, ); 
 ки ба сифати аргументи дуюм метавон аргументи лозимии баландкуниро равон 
 кард. Натиҷаи барнома шакли зеринро дорад: 
 Мисол. Барномае менависем, ки дар активити он расми ҳайвоноти хонагӣ
 ҷойгир буда, бо пахш намудани расм овози мувофиқи он пайдо гардад. 
 Барои иҷрои ин амал, ибтидо расмҳои лозимиро нусхабардорӣ карда дар 
 папкаи drawable мегузорем. 
 Ба ҳамин монанд файлҳои садоиро низ дар папкаи raw мегузорем. 
 Пас аз гузоштани расм ва файлҳои садоӣ, XML-файлро ба сурати зайл 
 омода мекунем. 
 <?xml version="." encoding="utf-"?> 
 <GridLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_gravity="center" 
 android:columnCount="" 
 android:orientation="horizontal" 
 tools:context=".MainActivity"> 
 <ImageButton 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:id="@+id/ibsag" 
 android:src="@drawable/sag" 
 android:layout_centerHorizontal="true" 
 android:adjustViewBounds="true" 
 android:cropToPadding="false" 
 android:layout_below="@+id/hlTopBar" 
 android:background="#" 
 android:scaleType="fitXY" /> 
 <ImageButton 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:id="@+id/ibasp" 
 android:src="@drawable/asp" 
 android:layout_centerHorizontal="true" 
 android:adjustViewBounds="true" 
 android:cropToPadding="false" 
 android:layout_below="@+id/hlTopBar" 
 android:background="#" 
 android:layout_rowSpan="" 
 android:scaleType="fitXY" /> 
 <ImageButton 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:id="@+id/ibgov" 
 android:src="@drawable/gov" 
 android:layout_centerHorizontal="true" 
 android:adjustViewBounds="true" 
 android:cropToPadding="false" 
 android:layout_below="@+id/hlTopBar" 
 android:background="#" 
 android:layout_rowSpan="" 
 android:scaleType="fitXY" /> 
 <ImageButton 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:id="@+id/ibguspand" 
 android:src="@drawable/guspand" 
 android:layout_centerHorizontal="true" 
 android:adjustViewBounds="true" 
 android:cropToPadding="false" 
 android:layout_below="@+id/hlTopBar" 
 android:background="#" 
 android:scaleType="fitXY" /> 
 <ImageButton 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:id="@+id/ibgurba" 
 android:src="@drawable/gurba" 
 android:layout_centerHorizontal="true" 
 android:adjustViewBounds="true" 
 android:cropToPadding="false" 
 android:layout_below="@+id/hlTopBar" 
 android:background="#" 
 android:scaleType="fitXY" /> 
 <ImageButton 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:id="@+id/ibkhar" 
 android:src="@drawable/khar" 
 android:layout_centerHorizontal="true" 
 android:adjustViewBounds="true" 
 android:cropToPadding="false" 
 android:layout_below="@+id/hlTopBar" 
 android:background="#" 
 android:scaleType="fitXY" /> 
 </GridLayout> 
 Коди барномаро дар файли Java ба сурати зерин омода мекунем: 
 package com.example.user.myapplication; 
 import android.media.MediaPlayer; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.widget.ImageButton; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 final MediaPlayer[] mPlayer = new MediaPlayer[]; 
 class CustomClickListener implements View.OnClickListener 
 { 
 int myid=-; 
 @Override 
 public void onClick(final View v) { 
 switch (v.getId()) { 
 case R.id.ibkhar: 
 myid = R.raw.khar; 
 break; 
 case R.id.ibasp: 
 myid = R.raw.asp; 
 break; 
 case R.id.ibgov: 
 myid = R.raw.gov; 
 break; 
 case R.id.ibguspand: 
 myid = R.raw.guspand; 
 break; 
 case R.id.ibsag: 
 myid = R.raw.sag; 
 break; 
 case R.id.ibgurba: 
 myid = R.raw.gurba; 
 break; 
 } 
 try { 
 if (mPlayer[].isPlaying()) { 
 mPlayer[].stop(); 
 mPlayer[].release(); 
 } 
 mPlayer[] = MediaPlayer.create(MainActivity.this, myid); 
 mPlayer[].start(); 
 } catch(Exception e) { e.printStackTrace(); } 
 } 
 } 
 ImageButton kharImageButton = (ImageButton) findViewById 
 (R.id.ibkhar); 
 kharImageButton.setOnClickListener(new 
 CustomClickListener()); 
 ImageButton aspImageButton = (ImageButton) findViewById 
 (R.id.ibasp); 
 aspImageButton.setOnClickListener(new CustomClickListener()); 
 ImageButton govImageButton = (ImageButton) findViewById 
 (R.id.ibgov); 
 govImageButton.setOnClickListener(new CustomClickListener()); 
 ImageButton guspandImageButton = (ImageButton) findViewById 
 (R.id.ibguspand); 
 guspandImageButton.setOnClickListener(new 
 CustomClickListener()); 
 ImageButton sagImageButton = (ImageButton) findViewById 
 (R.id.ibsag); 
 sagImageButton.setOnClickListener(new CustomClickListener()); 
 ImageButton gurbaImageButton = (ImageButton) findViewById 
 (R.id.ibgurba); 
 gurbaImageButton.setOnClickListener(new 
 CustomClickListener()); 
 } 
 } 
 Натиҷаи барнома шакли зеринро дорад: 
 Барои иҷро намудани файлҳои садоӣ дар Android Studio аз класси Sound-
 Pool низ метавон истифода кард. Фарқияти асосии класси SoundPool аз класси
 MediaPlayer дар он аст, ки SoundPool дар як вақт метавонад, якчанд видеофайлро
 иҷро кунад (хонад). Аз ин рӯ онро дар бозиҳо васеъ истифода мебаранд 
 Одатан класси SoundPool барои хондани файлҳои садоии андозаашон хурд
 (максимум ба Мб баробар) истифода бурда мешавад. Файли садои метавонад 
 такроран низ иҷро карда шавад. Дар ин ҳолат барои боздории хониши файли 
 садои бояд методи боздорӣ даъват карда шавад. 
 Класси мазкур метавонад файлҳои қолабҳои гуногун ба монанди: mp, ogg,
 wav, aac, gp ва flac –ро пушибонӣ кунад. 
 Тарзи истифодабарии класси SoundPool шакли зайлро дорад: 
 SoundPool (int maxStreams, int streamType, int srcQuality) 
 дар ин ҷо: 
 maxStreams – миқдори максималии ҷараёнҳои аудиоӣ (аудиосел), ки дар як 
 вақт метавонанд иҷро шаванд; 
 streamType - тип аудиосел –доимии класси AudioManager. Одатан 
 AudioManager.STREAM_MUSIC истифода бурда мешавад. 
 srcQuality – сифати кодиронӣ. Одатан ба сифати ин параметр истифода 
 бурда мешавад. 
 Барои боргузорӣ намудани фалҳои садои дар SoundPool метавон аз 
 методҳои зерин истифода кард: 
 int load(AssetFileDescriptor afd, int priority)-боргузорӣ аз папкаи assets.
 Барои истифодаи ин метод ибтидо донистани суроғаи файл зарур мебошад. 
 Класси AssetManager барои дастрасшавии файл аз папкаи assets истифода 
 бурда мешавад. Барои ба даст овардани нусхаи класс дар лоиҳа метавон аз
 getAssets() истифода кард. AssetFileDescriptor – дескриптор файли дар папкаи
 assets мавҷудбударо муайян мекунад. 
 int load(Context context, int resId, int priority)-боргузории файл тавассути
 идентификатори манба. Файлҳои садоӣ метавонанд дар папкаи res/raw низ 
 ҷойгир бошанд, дар ин ҳолат идентификатори мувофиқ R.raw.номи файли 
 садоӣ мешавад. 
 int load(String path, int priority)-боргузории файл аз роҳи нишондодашуда.
 int load(FileDescriptor fd, long offset, long length, int priority) - боргузории
 файл аз системаи файлии таҷҳизот. Дар ин ҷо параметри offset оғоз аз аввал,
 length дарозии садоро муайян мекунад. Ба сифати priority - авлавияти файл
 равон карда мешавад. 
 Методҳои мазкур идентификатори файли боргузоришударо бармегардонанд, 
 ки баъдтар барои хондани файл истифода мешавад. 
 Боргузории файли ҳамоҳангшуда иҷро мегардад, яъне пас аз даъвати методи
 load() дарҳол файл барои хондан дастрас намешавад, чунки барои боргузорӣ ва
 кодиронии он вақт лозим меояд. Барои назорат кардани ба охиррасии ин амалҳо
 бояд ҳодисаи OnLoadCompleteListener коркард карда шавад. Барои иҷрои ин амал
 коркарди ҳодиса бояд тавассути методи void 
 setOnLoadCompleteListener(SoundPool.OnLoadCompleteListener listener), муайян
 карда шавад. Дар ин ҷо 
 SoundPool.OnLoadCompleteListener – интерфейси дорои методи ягонаи void
 onLoadComplete(SoundPool soundPool, int sampleId, int status), мебошад, ки
 ҳангоми боргузории файл даъват карда мешавад. 
 sampleId – идентификатори файли боргузошташуда, (яъне аз тарафи 
 методи load() баргардонидашуда) 
 status – ҳолати боргузорӣ (қимати агар бо мувафақият боргузори 
 шавад). 
 Барои коркарди садо аз методи зерин истифода бурда мешавад: 
 ) int play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float
 rate) 
 дар ин ҷо: 
 soundID – идентификатори садо (тавассути методи load() баргардонида 
 мешавад) 
 leftVolume – сатҳи баландкунӣ барои канали чап (аз. то.) 
 rightVolume – сатҳи баландкунӣ барои канали рост (аз. то.) 
 priority – бартарияти сел ( – аз ҳама паст) 
 loop – миқдори такроршавӣ ( – бе такроршавӣ, (-) - такрорран) 
 rate – суръати хониш (аз. то.) 
 Методи мазкур адади бутун бармегардонад, ки дар дигар методҳо ба 
 сифати параметри streamID истифода мешавад. 
 ) void stop(int streamID)-пурра боздории садо 
 ) void pause(int streamID)- муваққатан боздории садо 
 ) void resume(int streamID)- азнавсозии хондани садо 
 ) void setLoop(int streamID, int loop)-муайянкунии миқдори такроршавӣ. 
 ) void setPriority(int streamID, int priority)- муайянкунии бартарияти сел садоӣ
 ) void setRate(int streamID, float rate)-муайнкунии суръати иҷроиш 
 ) void setVolume(int streamID, float leftVolume, float rightVolume)- 
 муқарраркунии сатҳи овоз 
 ) void autoPause()-боздории садо 
 ) void autoResume() – азнавсозии сели садоӣ 
 ) boolean unload(int soundID) –несткунии садо аз SoundPool. Метод қимати true
 бармегардонад, агар амалиёт бо муваффақият ба анҷом расад ва дар акси ҳол(агар
 чунин SoundID мавҷуд набошанд) қимати false 
 ) void release() – ҳамаи файлҳои боргузоришударо аз SoundPool нест карда,
 хотираро озод мекунад. Пас аз даъвати ин метод истифодабарии нусхаи 
 SoundPool ғайриимкон мегардад. Метод одатан ҳангоми баромадан аз барнома 
 барои озодкунии манба истифода бурда мешавад. 
 Ҳоло мисолеро дида мебароем. Ибтидо дар XML-файл ду тугмачаи Button 
 ҳамроҳ намуда, файли садоиро ба папкаи res/raw нусхабардорӣ мекунем. 
 <?xml version="." encoding="utf-"?> 
 <GridLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_gravity="center" 
 android:columnCount="" 
 android:orientation="horizontal" 
 tools:context=".MainActivity"> 
 <Button 
 android:id="@+id/buttonPlay" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Play" 
 android:layout_row="" /> 
 <Button 
 android:id="@+id/buttonPause" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Pause" /> 
 </GridLayout> 
 Коди барнома бошад, шакли зеринро мегирад: 
 package com.example.user.myapplication; 
 import android.content.Context; 
 import android.media.AudioManager; 
 import android.media.MediaPlayer; 
 import android.media.SoundPool; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.widget.Button; 
 import android.widget.ImageButton; 
 import android.widget.Toast; 
 public class MainActivity extends AppCompatActivity { 
 private SoundPool mSoundPool; 
 private int mSoundId =; 
 private int mStreamId; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 mSoundPool = new SoundPool(, AudioManager.STREAM_MUSIC, ); 
 mSoundPool.load(this, R.raw.asp, ); 
 Button playButton = (Button) findViewById(R.id.buttonPlay); 
 Button pauseButton = (Button) findViewById(R.id.buttonPause); 
 playButton.setOnClickListener(onPlayButtonClickListener); 
 pauseButton.setOnClickListener(onPauseButtonClickListener); 
 } 
 Button.OnClickListener onPlayButtonClickListener 
 = new Button.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 AudioManager audioManager = (AudioManager) getSystemService 
 (Context.AUDIO_SERVICE); 
 float curVolume = audioManager.getStreamVolume(AudioManager. 
 STREAM_MUSIC); 
 float maxVolume = audioManager.getStreamMaxVolume 
 (AudioManager.STREAM_MUSIC); 
 float leftVolume = curVolume / maxVolume; 
 float rightVolume = curVolume / maxVolume; 
 int priority =; 
 int no_loop =; 
 float normal_playback_rate = f; 
 mStreamId = mSoundPool.play(mSoundId, leftVolume, 
 rightVolume, priority, no_loop, normal_playback_rate); 
 Toast.makeText(getApplicationContext(), 
 "soundPool.play()", 
 Toast.LENGTH_LONG).show(); 
 } 
 }; 
 Button.OnClickListener onPauseButtonClickListener 
 = new Button.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 mSoundPool.pause(mStreamId); 
 Toast.makeText(getApplicationContext(), 
 "soundPool.pause()", 
 Toast.LENGTH_LONG).show(); 
 } 
 }; 
 } 
 Шурӯъ аз Android. (API ) даъвати конструктор кӯҳна буда, бар ивази
 он класси SoundPool.Builder пайдо шуд. 
 Мисол. Барномае менависем, ки бо пахш кардани расми ҳайвон овози 
 мувофиқи онро барорад. 
 Барои ҳалли ин мисол, монанди ҳолати қаблӣ ибтидо дар папкаи 
 res/drawable расмҳои лозимиро мегузорем: 
 <?xml version="." encoding="utf-"?> 
 <GridLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_gravity="center" 
 android:columnCount="" 
 android:orientation="horizontal" 
 tools:context=".MainActivity"> 
 <ImageButton 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:id="@+id/ibsag" 
 android:src="@drawable/sag" 
 android:layout_centerHorizontal="true" 
 android:adjustViewBounds="true" 
 android:cropToPadding="false" 
 android:layout_below="@+id/hlTopBar" 
 android:background="#" 
 android:scaleType="fitXY" /> 
 <ImageButton 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:id="@+id/ibgurba" 
 android:src="@drawable/gurba" 
 android:layout_centerHorizontal="true" 
 android:adjustViewBounds="true" 
 android:cropToPadding="false" 
 android:layout_below="@+id/hlTopBar" 
 android:background="#" 
 android:scaleType="fitXY" /> 
 <ImageButton 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:id="@+id/ibasp" 
 android:src="@drawable/asp" 
 android:layout_centerHorizontal="true" 
 android:adjustViewBounds="true" 
 android:cropToPadding="false" 
 android:layout_below="@+id/hlTopBar" 
 android:background="#" 
 android:layout_rowSpan="" 
 android:scaleType="fitXY" /> 
 <ImageButton 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:id="@+id/ibgov" 
 android:src="@drawable/gov" 
 android:layout_centerHorizontal="true" 
 android:adjustViewBounds="true" 
 android:cropToPadding="false" 
 android:layout_below="@+id/hlTopBar" 
 android:background="#" 
 android:layout_rowSpan="" 
 android:scaleType="fitXY" /> 
 <ImageButton 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:id="@+id/ibguspand" 
 android:src="@drawable/guspand" 
 android:layout_centerHorizontal="true" 
 android:adjustViewBounds="true" 
 android:cropToPadding="false" 
 android:layout_below="@+id/hlTopBar" 
 android:background="#" 
 android:scaleType="fitXY" /> 
 <ImageButton 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:id="@+id/ibkhar" 
 android:src="@drawable/khar" 
 android:layout_centerHorizontal="true" 
 android:adjustViewBounds="true" 
 android:cropToPadding="false" 
 android:layout_below="@+id/hlTopBar" 
 android:background="#" 
 android:scaleType="fitXY" /> 
 </GridLayout> 
 Сипас, файлҳои садоии қаблан омодакардааамонро дар папкаи assets 
 мегузорем. Ба намуди пешфарз чунин папка дар лоиҳа мавҷуд нест. Барои 
 сохтани ин папка аз лоиҳа, дар болои папкаи res тугмачаи рости мушро пахш
 карда аз менюи пайдошуда фармони New->Folder->Assets Folder-ро интихоб 
 мекунем: 
 дар натиҷа равзанаи зерин пайдо мешавад: 
 аз ин равзана тугмачаи ОК-ро пахш мекунем. Пас аз иҷрои ин амал файлҳои 
 садоиро нусхабардорӣ карда дар папкаи сохтаамон мегузорем. 
 Пас аз омодакунии нишона ва папкаҳои лозимӣ дар Java-файл ба 
 навиштани код шуруъ мекунем. Ибтидо объекти SoundPool сохта, тавассути 
 методи load() аз папкаи assets файлҳои садоиро боргузорӣ мекунем. 
 package com.example.user.myapplication; 
 import android.annotation.TargetApi; 
 import android.content.res.AssetFileDescriptor; 
 import android.content.res.AssetManager; 
 import android.media.AudioAttributes; 
 import android.media.AudioManager; 
 import android.media.SoundPool; 
 import android.os.Build; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.MotionEvent; 
 import android.view.View; 
 import android.widget.ImageButton; 
 import android.widget.Toast; 
 import java.io.IOException; 
 public class MainActivity extends AppCompatActivity { 
 private SoundPool mSoundPool; 
 private AssetManager mAssetManager; 
 private int asp, sag, guspand, gov, khar, gurba; 
 private int mStreamID; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 ImageButton kharImageButton = (ImageButton) findViewById 
 (R.id.ibkhar); 
 kharImageButton.setOnClickListener(onClickListener); 
 ImageButton aspImageButton = (ImageButton) findViewById 
 (R.id.ibasp); 
 aspImageButton.setOnClickListener(onClickListener); 
 ImageButton govImageButton = (ImageButton) findViewById 
 (R.id.ibgov); 
 govImageButton.setOnClickListener(onClickListener); 
 ImageButton guspandImageButton = (ImageButton) findViewById 
 (R.id.ibguspand); 
 guspandImageButton.setOnClickListener(onClickListener); 
 ImageButton sagImageButton = (ImageButton) findViewById 
 (R.id.ibsag); 
 sagImageButton.setOnClickListener(onClickListener); 
 ImageButton gurbaImageButton = (ImageButton) findViewById 
 (R.id.ibgurba); 
 gurbaImageButton.setOnClickListener(onClickListener); 
 govImageButton.setOnTouchListener(new View.OnTouchListener() { 
 public boolean onTouch(View v, MotionEvent event) { 
 int eventAction = event.getAction(); 
 if (eventAction == MotionEvent.ACTION_UP) { 
 // гирифтани ангушт 
 if (mStreamID > ) 
 mSoundPool.stop(mStreamID); 
 } 
 if (eventAction == MotionEvent.ACTION_DOWN) { 
 // пахши тугмача 
 mStreamID = playSound(gov); 
 } 
 if (event.getAction() == MotionEvent.ACTION_CANCEL) { 
 mSoundPool.stop(mStreamID); 
 } 
 return true; 
 } 
 }); 
 } 
 View.OnClickListener onClickListener = new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 switch (v.getId()) { 
 case R.id.ibgov: 
 playSound(gov); 
 break; 
 case R.id.ibasp: 
 playSound(asp); 
 break; 
 case R.id.ibgurba: 
 playSound(gurba); 
 break; 
 case R.id.ibkhar: 
 playSound(khar); 
 break; 
 case R.id.ibguspand: 
 playSound(guspand); 
 break; 
 case R.id.ibsag: 
 playSound(sag); 
 break; 
 } 
 } 
 }; 
 @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
 private void createNewSoundPool() { 
 AudioAttributes attributes = new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_GAME).setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION).build(); 
 mSoundPool = new SoundPool.Builder().setAudioAttributes(attributes).build(); 
 } 
 @SuppressWarnings("deprecation") 
 private void createOldSoundPool() { 
 mSoundPool = new SoundPool(, AudioManager.STREAM_MUSIC, ); 
 } 
 private int playSound(int sound) { 
 if (sound > ) { 
 mStreamID = mSoundPool.play(sound,,,,, ); 
 } 
 return mStreamID; 
 } 
 private int loadSound(String fileName) { 
 AssetFileDescriptor afd; 
 try { 
 afd = mAssetManager.openFd(fileName); 
 } catch (IOException e) { 
 e.printStackTrace(); 
 Toast.makeText(getApplicationContext(), "Файл наметавонад 
 боргузорӣ шавад!" + fileName, Toast.LENGTH_SHORT).show(); 
 return -; 
 } 
 return mSoundPool.load(afd, ); 
 } 
 @Override 
 protected void onResume() { 
 super.onResume(); 
 if (android.os.Build.VERSION.SDK_INT < 
 Build.VERSION_CODES.LOLLIPOP) { 
 // барои таҷҳизотҳои то Android 
 createOldSoundPool(); 
 } else { 
 // Барои таҷҳизотҳои нав 
 createNewSoundPool(); 
 } 
 mAssetManager = getAssets(); 
 // Ба дастоварии идентификаторҳо 
 asp = loadSound("asp.mp"); 
 khar = loadSound("khar.mp"); 
 gov = loadSound("gov.mp"); 
 guspand = loadSound("guspand.mp"); 
 gurba = loadSound("gurba.mp"); 
 sag = loadSound("sag.mp"); 
 } 
 @Override 
 protected void onPause() { 
 super.onPause(); 
 mSoundPool.release(); 
 mSoundPool = null; 
 } 
 } 
 Ҳангоми боргузорӣ методи load() идентификатори soundID-ро 
 бармегардонад, ки барои баъдан истифодабарӣ нигоҳ дошта мешавад. 
 Дескриптори файлии AssetFileDescriptor барои аз папкаи assets тавассути
 методи openFd() ба дастоварии файл истифода шуда, ба сифати параметр номи
 файлро қабул мекунад. Агар файл мавҷуд набошад ва ё кушода нашавад ба 
 сифати параметри soundID қимати - баргардонида мешавад. 
 Ҳангоми пахши тугмача методи playSound() даъват карда мешавад, ки ба
 сифати параметри он идентификатори садои лозимӣ равон карда мешавад. Дар 
 сурати мавҷуд набудани файли садои методи loadSound() қимати - 
 бармегардонад, агар load() файлро боргузорӣ карда натавонад, он гоҳ soundID
 ба қимати баробар мешавад. Аз ин рӯ шарти SoundID > барои бо муваффақият
 кушода шудани файл истифода бурда мешавад. Агар ҳамаи амалҳои лозимӣ бо 
 муваффақият иҷро шаванд, он гоҳ методи play() даъват карда мешавад. 
 Сар карда аз версияи Android. конструктори класси SoundPool 
 куҳнашуда ба ҳисоб меравад. Бинобар ин, дар код шарти if барои тафтиши версия
 истифода шудааст. 
 Файли боргузошташударо барнома нигоҳ медорад, пас барои озод кардани
 ҳофиза дар методи onPause(), коди лозимӣ навишта шудаст. 
 Барномаро иҷро мекунем, ки шакли зеринро мегирад: 
 Агар хоҳем, ки ҳангоми бо ангушт пахш карда истодани расм (тугмача) 
 овоз хонда шавад, ва ҳангоми гирифтани ангушт овоз боздошта шавад. Барои 
 иҷрои ин амал коди тугмачаи govImageButton –ро ба сурати зерин менависем.
 govImageButton.setOnTouchListener(new View.OnTouchListener() { 
 public boolean onTouch(View v, MotionEvent event) { 
 int eventAction = event.getAction(); 
 if (eventAction == MotionEvent.ACTION_UP) { 
 // гирифтани ангушт 
 if (mStreamID > ) 
 mSoundPool.stop(mStreamID); 
 } 
 if (eventAction == MotionEvent.ACTION_DOWN) { 
 // пахши тугмача бо ангушт 
 mStreamID = playSound(gov); 
 } 
 if (event.getAction() == MotionEvent.ACTION_CANCEL) { 
 mSoundPool.stop(mStreamID); 
 } 
 return true; 
 } 
 }); 
 } 
 Мисоли. Барномае нависед, ки ҳангоми аз руйхат интихоб кардани 
 номи ҳайвонот, овози онро барорад. 
 <?xml version="." encoding="utf-"?> 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:padding="dp" > 
 <ImageView 
 android:id="@+id/imageViewIcon" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" /> 
 <LinearLayout 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:orientation="vertical" 
 android:paddingLeft="dp" > 
 <TextView 
 android:id="@+id/textViewNom" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:textColor="#FF" 
 android:textSize="sp" 
 android:textStyle="bold" /> 
 </LinearLayout> 
 </LinearLayout> 
 Коди барнома. 
 package com.example.user.mysound; 
 import android.os.Bundle; 
 import android.app.ListActivity; 
 import android.content.Context; 
 import android.view.LayoutInflater; 
 import android.view.View; 
 import android.view.ViewGroup; 
 import android.widget.BaseAdapter; 
 import android.widget.ImageView; 
 import android.widget.ListView; 
 import android.widget.TextView; 
 import android.widget.LinearLayout; 
 import android.media.MediaPlayer; 
 public class MainActivity extends ListActivity { 
 private String[] nomihaivonot = {"Асп", "Хар", "Буз", "Гов", 
 "Гурба", "Гуспанд","Хурус", "Саг"}; 
 int[] sadoihaivonot = {R.raw.asp, R.raw.khar, 
 R.raw.buz, R.raw.gov, R.raw.gurba, 
 R.raw.guspand, R.raw.khurus, R.raw.sag, 
 }; 
 int[] rasmihaivonot = {R.drawable.asp, R.drawable.khar, 
 R.drawable.buz, R.drawable.gov, R.drawable.gurba, 
 R.drawable.guspand, R.drawable.khurus, R.drawable.sag, 
 }; 
 private myAdapter mAdapter; 
 final MediaPlayer[] mPlayer = new MediaPlayer[]; 
 int myid=; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 mAdapter = new myAdapter(this); 
 setListAdapter(mAdapter); 
 myid = R.raw.asp; 
 mPlayer[] = MediaPlayer.create(this, myid); 
 } 
 @Override 
 protected void onListItemClick(ListView l, View v, int position, 
 long id){ 
 super.onListItemClick(l, v, position, id); 
 myid=sadoihaivonot[position]; 
 try { 
 if (mPlayer[].isPlaying()) { 
 mPlayer[].stop(); 
 mPlayer[].release(); 
 } 
 mPlayer[] = MediaPlayer.create(this, myid); 
 mPlayer[].start(); 
 } catch(Exception e) { e.printStackTrace(); } 
 } 
 private class myAdapter extends BaseAdapter { 
 private LayoutInflater mLayoutInflater; 
 myAdapter(Context context) { 
 mLayoutInflater = LayoutInflater.from(context); 
 } 
 @Override 
 public int getCount() { 
 return nomihaivonot.length; 
 } 
 @Override 
 public Object getItem(int position) { 
 return position; 
 } 
 @Override 
 public long getItemId(int position) { 
 return position; 
 } 
 @Override 
 public View getView(int position, View convertView, 
 ViewGroup parent) { 
 if (convertView == null) 
 convertView = mLayoutInflater.inflate 
 (R.layout.activity_main, null); 
 ImageView image = (ImageView) convertView.findViewById 
 (R.id.imageViewIcon); 
 //ивазкунии андозаи расмҳо 
 LinearLayout.LayoutParams params =(LinearLayout.LayoutParams) 
 image.getLayoutParams(); // ба дастоварии параметрҳо 
 int myHeight =; 
 int myWidth=; 
 params.height = myHeight; 
 params.width=myWidth; 
 image.setLayoutParams(params); // ивазкунии андоза 
 image.setImageResource(rasmihaivonot[position]); 
 TextView myTextView = (TextView) convertView. 
 findViewById(R.id.textViewNom); 
 myTextView.setText(nomihaivonot[position]); 
 return convertView; 
 } 
 } 
 } 
 Бо номи listVieWithimageAndText як лоиҳа месозем. 
 зеринро мегузорем: 
 <LinearLayout xmlns:android="http://schemas.an- 
 droid.com/apk/res/android" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="horizontal" 
 > 
 <ImageView 
 android:id="@+id/rasm" 
 android:layout_width="dip" 
 android:layout_height="dip" 
 android:contentDescription="@string/app_name" 
 android:paddingTop="dp" 
 android:paddingRight="dp" 
 android:paddingBottom="dp" 
 android:background="#" 
 android:scaleType="fitXY" /> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical" 
 > 
 <TextView 
 android:id="@+id/nom" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:textSize="dp" /> 
 </LinearLayout> 
 </LinearLayout> 
 ) Файли activity_listview_with_image_and_text.xml бошад шакли зеринро дорад:
 <?xml version="." encoding="utf-"?> 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 android:orientation="vertical"> 
 <TextView 
 android:id="@+id/textview" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 /> 
 <ListView 
 android:id="@+id/listview" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 /> 
 </LinearLayout> 
 Коди барнома бошад шакли зеринро дорад: 
 package com.example.user.mylist; 
 import android.app.Activity; 
 import android.os.Bundle; 
 import android.widget.ListView; 
 import android.widget.SimpleAdapter; 
 import java.util.ArrayList; 
 import java.util.HashMap; 
 import java.util.List; 
 class MainActivity extends Activity { 
 // Array of strings storing country names 
 String[] nomihaivonot = {"Асп", "Хар", "Буз", "Гов", "Гурба", 
 "Гуспанд","Хурус", "Саг"}; 
 int[] rasmihaivonot = new int[]{R.drawable.asp, R.drawable.khar, 
 R.drawable.buz, R.drawable.gov, R.drawable.gurba, 
 R.drawable.guspand, R.drawable.khurus, R.drawable.sag}; 
 @Override 
 public void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_listview_with_image_and_text); 
 List<HashMap<String,String>> aList = new ArrayList 
 <HashMap<String,String>>(); 
 for(int i=;i<;i++){ 
 HashMap<String, String> hm = new HashMap 
 <String,String>(); 
 hm.put("nom", nomihaivonot[i]); 
 hm.put("rasm", Integer.toString(rasmihaivonot[i]) ); 
 aList.add(hm); 
 } 
 String[] from = { "rasm","nom" }; 
 int[] to = { R.id.rasm,R.id.nom}; 
 SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), 
 aList, R.layout.listview_layout, from, to); 
 ListView listView = ( ListView ) findViewById(R.id.listview); 
 listView.setAdapter(adapter); 
 } 
 } 
 ImageButton чӣ фарқ дорад? 
 Боби. Кор бо контейнерҳо дар Android Studio 
 Компоненти ListView – ин руйхати элементҳое, мебошад, ки имконияти 
 ҳаракат (тоб) додани онҳо мавҷуд аст. Виджети мазкур дар телефонҳои мобилӣ
 хело маъмул буда, барои кор кардан хело мувофиқ мебошад. Дар муқоиса бо 
 компоненти TextView истифодаи компоненти ListView нисбатан душвортар 
 мебошад. Барои кор кардан бо компоненти мазкур ибтидо он дар форм илова 
 карда шуда, сипас элементҳои лозимӣ ба он ҳамроҳ карда мешаванд. 
 Ҳангоми дар форма гузоштани ListView дида мешавад, ки дар он якчандто
 элементҳои Item ва Sub Item мавҷуд аст. 
 Дар ин сурат агар XML-код нигарем, дар он ҷо ҳеҷ чиз мавҷуд намебошад.
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <ListView 
 android:id="@+id/listView" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" /> 
 </android.support.constraint.ConstraintLayout> 
 Ба класси MainActivity омада дар методи onCreate()-и он формонҳои 
 зеринро илова мекунем. 
 package com.example.user.mylistview; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.widget.ArrayAdapter; 
 import android.widget.ListView; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 // Ба даст овардани нусхаи элементи идоракунандаи ListView 
 ListView listView = (ListView)findViewById(R.id.listView); 
 // муаррификунии массиви типи String 
 final String[] fruitsTaj = new String[] { 
 "Себ", "Зардолу", "Шафтолу", "Олуболӯ", "Гелос","Анор", 
 "Ангур", "Анҷир", "Нок", "Чормағз","Бодом", "Писта" 
 }; 
 // Истифодаи адаптери додаҳо 
 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
 android.R.layout.simple_list_item_, fruitsTaj); 
 listView.setAdapter(adapter); 
 } 
 } 
 Порчаи ё қисмати коди овардашударо пурра мавриди баҳс қарор медиҳем.
 Компоненти ListView барои пур кардани элементҳояш иттилоотеро талаб 
 мекунад, ки онҳо метавонанд массивҳо, ПД-ҳо ва ғайра бошанд. Барои 
 иттилоотро ба руйхат пайваст (илова) кардан аз адаптерҳо истифода бурда меша-
 вад. Адаптер ин – қабат (слой)-е байни контролҳое, ки интерфейси AdapterView-
 ро пиёдасози кунанда буда, додаҳое мебошад, ки дар ин компонент намоиш дода
 мешаванд. Тавассути адаптерҳо усулҳои инъикоси додаҳо дар контроллерҳо му-
 айян карда мешавад. Адаптерҳо ҳангоми кор кардан бо виджетҳое, ки 
 android.widget.AdapterView мукаммал мекунанд ба монанди: ListView, 
 ExpandableListView, GridView, Spinner, Gallery, инчунин дар ListActivity ва ғайра
 истифода бурда мешаванд. Худи AdapterView бошад android.widget. ViewGroup-
 ро мукаммал мекунад. 
 Одатан адаптер тавассути дастури (конструкторӣ) зерин сохта мешавад:
 new ArrayAdapter(Context context, int textViewResourceId, String[] objects).
 дар инҷо: 
 context – контексти ҷорӣ; 
 textViewResourceId – идентификатори манба (ресурс) бо нишонагузорӣ 
 (разметка) барои ҳар як сатр; 
 objects – массиви сатрҳо. 
 Метавон нишонагузории системавиро бо идентификатори 
 android.R.layout.simple_list_item_ истифода кард ва ё нишонагузории хусусӣ
 сохт. 
 Натиҷаи барнома шакли зеринро дорад: 
 Дар ҳолати лозимӣ метавон мӯҳтавои файли simple_list_item_-ро аз назар
 гузаронид. Барои иҷрои ин амал, нишондиҳандаи мушро дар болои сатри 
 simple_list_item_ монда, тугмачаи рости онро пахш мекунем, дар равзанаи 
 пайдошуда фармони Go To->Declaration-ро интихоб мекунем: 
 Дар натиҷа файли simple_list_item_.xml кушода мешавад, ки мӯҳтавои он 
 чунин аст: 
 <?xml version="." encoding="utf-"?> 
 <!-- Copyright (C) The Android Open Source Project 
 Licensed under the Apache License, Version. (the "License"); 
 you may not use this file except in compliance with the License. 
 You may obtain a copy of the License at 
 http://www.apache.org/licenses/LICENSE-. 
 Unless required by applicable law or agreed to in writing, soft- 
 ware 
 distributed under the License is distributed on an "AS IS" BA- 
 SIS, 
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
 implied. 
 See the License for the specific language governing permissions 
 and 
 limitations under the License. 
 --> 
 <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
 android:id="@android:id/text" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:textAppearance="?android:attr/textAppearanceListItemS- 
 mall" 
 android:gravity="center_vertical" 
 android:paddingStart="?android:attr/listPreferredItem- 
 PaddingStart" 
 android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" 
 android:minHeight="?android:attr/listPreferredItemHeightSmall" /> 
 Тавре ки айён аст, дар дохили он TextView бо набори параметрҳо мавҷуд
 аст. 
 Қайд кардан ба маврид аст, ки элементҳои массивро аз як xml –файл низ 
 метавон ба даст овард. Барои он ибтидо файли типи манба <string-array> бо номи
 strings.xml дар он res/values/ сохта мешавад, сипас дар дохили он элементҳои
 массивро ҳамроҳ мекунем: 
 <resources> 
 <string name="app_name">Меваҳои Тоҷикистон</string> 
 <string-array name="fruitsTaj"> 
 <item>Себ</item> 
 <item>Зардолу</item> 
 <item>Шафтолу</item> 
 <item>Олуболӯ</item> 
 <item>Гелос</item> 
 <item>Анор</item> 
 <item>Ангур</item> 
 <item>Анҷир</item> 
 <item>Нок</item> 
 <item>Чормағз</item> 
 <item>Бодом</item> 
 <item>Писта</item> 
 </string-array> 
 </resources> 
 Пас аз ин, сатри муаррификуниии массиви сатри шакли зеринро мегирад:
 String[] fruitsTaj = getResources().getStringArray(R.array. fruitsTaj);
 Матни пурраи барнома бошад, чунин аст: 
 package com.example.user.mylistview; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.widget.ArrayAdapter; 
 import android.widget.ListView; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 // Ба даст овардани нусхаи элементи идоракунандаи ListView 
 ListView listView = (ListView)findViewById 
 (R.id.listView); 
 // муаррификунии массиви типи String ва аз манба ба 
 даст овардани элементҳои он 
 final String[] fruitsTaj = getResources(). 
 getStringArray(R.array.fruits_Taj); 
 //Истифодаи адаптери додаҳо 
 ArrayAdapter<String> adapter = new ArrayAdapter 
 <String>(this, android.R.layout. 
 simple_list_item_,fruitsTaj); 
 listView.setAdapter(adapter); 
 } 
 } 
 Қайд. Барои аз рӯӣ ном ба даст овардани қимати файли манба аз фармонҳои
 зерин истифода карда мешавад. 
 String poet= (String) ((TextView)view).getText(); 
 int resID = getResources().getIdentifier(poet,"string", get- 
 PackageName()); 
 String s=getResources().getString(resID); 
 Акнун java-кодро мавриди баҳс қарор медиҳем. Ибтидо дар методи onCreate()
 нусхаи элементи ListView –ро ба даст меорем. Сониян, массиви типи String 
 муаррифӣ мекунем. Ва дар охир барои додаҳоро ба қолаби нишонагузорӣ ҳамроҳ
 кардан аз адаптери додаҳо истифода мебарем. Интихоби адаптер аз типи додаҳои
 истифодашаванда вобастагӣ дорад. Дар ҳолати мо аз класси ArrayAdapter 
 истифода шудааст. 
 Қадами навбати барои руйхати сохтаамон ҳодиса менависем. Барои содагӣ 
 ибтидо ба сурати зерин ҳодисаи OnItemClickListener-ро дар охири класси 
 MainActivity ҳамроҳ мекунем. 
 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() 
 { 
 public void onItemClick(AdapterView<?> parent, View view, 
 int position, long id) 
 { 
 Toast.makeText(getApplicationContext(), "itemClick: position = " 
 + position + ", id = " + id + ", " + parent.getAdapter(). 
 getItem(position),Toast.LENGTH_SHORT).show(); 
 } 
 }); 
 дар ин ҷо: Toast- пайғоми пайдошаванда (Toast Notification) -пайғоме мебошад,
 ки дар болои равзанаи лоиҳа пайдо шуда, вобаста ба муҳтавояш ҷои лозимиеро
 банд мекунад. Пайғоми мазкур ба рафти кори лоиҳа ҳеҷ таъсире намерасонад ва
 пас аз пайдошавӣ дар муддати якчанд сония нест мешавад. Одатан барои намоиш
 додани пайғомҳои хабардоркунандаи кӯтоҳ аз Toast истифода мебаранд. Барои
 сохтани чунин пайғомҳо ибтидо зарур аст, ки ба объекти типи Toast тавассути
 методи Toast.makeText() қимати ибтидоӣ бахшида шуда, сипас методи show() 
 барои дар экран намоиш (отображения) додани он даъват карда шавад. 
 Мисол. 
 Toast toast = Toast.makeText(getApplicationContext(), 
 "Шумо меваи ширини "+parent.getAdapter().getItem(position)+"- 
 ро интихоб кардед!", Toast.LENGTH_SHORT); 
 toast.show(); 
 Методи makeText() дорои се параметр мебошад, ки мувофиқан: 
 Контексти лоиҳа; 
 пайғоми матнӣ; 
 вақти намоиши пайғом, яъне пайғом бояд пас аз чанд сония нест шавад.
 ба сифати параметри сеюм метавон яке аз ин доимиҳоро истифода кард; 
 LENGTH_SHORT — (ба намуди пешфарзӣ) пайғоми хабардоркунии 
 матниро дар муддати кӯтоҳ нишон медиҳад; 
 LENGTH_LONG — пайғоми хабардоркунии матниро дар муддати кӯтоҳ 
 нишон медиҳад; 
 Ба намуди пешфарзӣ пайғоми хабардоркунандаи матнӣ дар қисми поёнии 
 экран зоҳир мешавад. Барои тағйир додани мавқеи намоиши он метавон аз 
 методи setGravity(int, int, int) истифода кард. Методи мазкур дорои се параметр
 мебошад: 
 Доимии стандартӣ барои гузоштани объект дар ҳудуди контейнерҳои 
 калон ба монанди GRAVITY.CENTER, GRAVITY.TOP ва ғайра; 
 ҷойгузорӣ аз рӯи тири X; 
 ҷойгузорӣ аз рӯи тири Y. 
 Масалан, барои дар миёнаҷойи экран баровардани пайғоми хабардоркунанда 
 аз дастури зерин истифода бурда мешавад: 
 toast.setGravity(Gravity.CENTER,, ); 
 Мисол. 
 Toast toast = Toast.makeText(getApplicationContext(), 
 "Шумо меваи ширини "+parent.getAdapter().getItem(position)+"- 
 ро интихоб кунед!", Toast.LENGTH_SHORT); 
 toast.setGravity(Gravity.CENTER,,); 
 toast.show(); 
 Қайд кардан ба маврид аст, ки дар Toast на танҳо пайғоми матнӣ, инчунин
 метавон дилхоҳ пешниҳод (представление)-ро истифода кард. Барои иҷрои ин 
 амал аз методи setView() истифода бурда мешавад, ки ба объекти Toast тааллуқ
 дорад. 
 Илова бар ин, метавон дар Toast расмҳоро низ истифода кард. Барои иҷрои
 ин амал ибтидо расми лозимиро дар папкаи res/drawable-xxhdpi мегузорем. Дар
 ин ҷо расм ҳамчун манба дастрас мебошад, яъне номи файл бе пасванд. Масалан,
 агар расми мо myPict.png ном дошта бошад, пас барои ба он дастрас шудан 
 метавон аз дастури R.drawable. myPict истифода кард. Пас аз ин объекти 
 ImageView сохта мешавад. Баъди сохтани ин объект тавассути методи 
 setImageResource расми лозими ба он бахшида мешавад. Ба намуди пешфарз 
 шакли зоҳирии Toast аз контейнери LinearLayout ташкил ёфтааст, ки бояд дар он
 объекти сохташудаи ImageView илова карда шавад. Илова бар ин, метавон 
 мавқеи намоиш додани расмро муайян кард. Агар қимати нишон дода шуда 
 бошад, расм дар болои матн ҷойгир мешавад. Коди умумии ин амал чунин аст:
 btn=(Button) findViewById(R.id.button); 
 btn.setOnClickListener(new OnClickListener(){ 
 @Override 
 public void onClick(View v) { 
 Toast toast = Toast.makeText(getApplicationContext(), 
 "my String", Toast.LENGTH_LONG); 
 toast.setGravity(Gravity.CENTER,, ); 
 LinearLayout toastContainer = (LinearLayout) toast. 
 getView(); 
 ImageView myImageView = new ImageView(getApplicationContext()); 
 myImageView.setImageResource(R.drawable.myPict); 
 toastContainer.addView(myImageView, ); 
 toast.show(); 
 } 
 }); 
 Қайд кардан ба маврид аст, ки ба ғайр аз усулҳои дар боло овардашуда
 инчунин метавон элементҳои руйхатро ба таври динамикӣ ҳамроҳ кард. Барои 
 иҷрои ин амал дар форм як майдони матнӣ мегузорем. Пас аз навиштани ягон 
 матн бо пахш кардани тугмачаи Enter он ба руйхат ҳамроҳ мегардад. 
 Файли XML: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical"> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:inputType="textPersonName"/> 
 <ListView 
 android:id="@+id/listView" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" /> 
 </LinearLayout> 
 </android.support.constraint.ConstraintLayout> 
 Коди барнома: 
 package com.example.user.mylistview; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.KeyEvent; 
 import android.view.View; 
 import android.widget.ArrayAdapter; 
 import android.widget.EditText; 
 import android.widget.ListView; 
 import java.util.ArrayList; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 // Ба даст овардани нусхаи элементи идоракунандаи ListView 
 ListView listView = (ListView)findViewById(R.id.listView); 
 // муаррификунии ArrayList-и типи String 
 final ArrayList<String> fruitsTaj = new ArrayList<String>(); 
 //Истифодаи адаптери додаҳо 
 final ArrayAdapter<String> adapter = new ArrayAdapter<String> 
 (this,android.R.layout.simple_list_item_, fruitsTaj); 
 listView.setAdapter(adapter); 
 final EditText editText = (EditText) findViewById 
 (R.id.editText); 
 // бо адаптер пайваст кардани ListView 
 listView.setAdapter(adapter); 
 // Ходисаи пахши тугмача 
 editText.setOnKeyListener(new View.OnKeyListener() { 
 @Override 
 public boolean onKey(View v, int keyCode, KeyEvent event){ 
 if (event.getAction() == KeyEvent.ACTION_DOWN) 
 if (keyCode == KeyEvent.KEYCODE_ENTER) { 
 fruitsTaj.add(, editText.getText().toString()); 
 adapter.notifyDataSetChanged(); 
 editText.setText(""); 
 return true; 
 } 
 return false; 
 } 
 }); 
 } 
 } 
 ListView дорои якчанд атрибути муҳим мебошад, ки имконияти руйхатро 
 ҷолибтар нишон додан мебошанд. Масалан, атрибути divider намуди зоҳирии 
 тақсимкунанда ва атрибути dividerHeight баландии тақсимкунандаро ифода 
 мекунад. Метавон барои тақсимкунанда, ягон ранг ва ҳатто расм муайян кард.
 Масалан, барои тақсимкунанда манбаи ранг ва манбаи андозаи баландӣ месозем.
 Барои иҷрои ин амал бо номи myResource дар папкаи res/values файли манба 
 месозем, ки мӯҳтавои он чунин аст: 
 <?xml version="." encoding="utf-"?> 
 <resources> 
 <color name="reddivider">#FF</color> 
 <dimen name="twodp">dp</dimen> 
 </resources> 
 Пас аз ин, ресурси сохтаамонро ба атрибути divider, ва dividerHeight –и
 ListView мебахшем: 
 <ListView 
 android:id="@+id/listView" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:divider="@color/reddivider" 
 android:dividerHeight="@dimen/twodp"> 
 </ListView> 
 Агар хоҳем, ки дар зери руйхат тугмача гузорем, ки аз миқдори элементҳои
 ListView вобаста набошад, он гоҳ зарур аст, ки аз вазн(layout_weight) истифода
 барем. 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <?xml version="." encoding="utf-"?> 
 <LinearLayout xmlns:android="http://schemas.an- 
 droid.com/apk/res/android" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical" > 
 <ListView 
 android:id="@+id/listView" 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:layout_weight="" > 
 </ListView> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:text="Button" /> 
 </LinearLayout> 
 </android.support.constraint.ConstraintLayout> 
 Компонети GridView тасмаи ҷадвалӣ буда, дар он метавон элементҳои 
 гуногунро барои намоиш додани иттилоот истифода кард. Барои компоненти 
 мазкур метавон майдони махсус дар асоси классҳои ArrayAdapter ё BaseAdapter
 ва ғайра сохт. 
 Миқдори сутунчаҳои компоненти GridView одатан ба шакли динамикӣ 
 дода мешаванд. Миқдори сатрҳо бошанд, дар асоси миқдори элементҳои 
 адаптер сохта мешаванд. 
 Хосиятҳои асосии компоненти GridView дар поён оварда шудаанд. 
 android:numColumns — миқдори сутунчаҳо. Агар ба қимати auto_fit 
 баробар бошад, он гоҳ система дар асоси фазои холӣ миқдори сутунчаҳоро
 ҳисоб мекунад; 
 android:verticalSpacing — фазои холигии байни катакчаҳои ҷадвал; 
 android:columnWidth — бари ё паҳноии ҷадвал; 
 android:stretchMode — минтақаи гузоштани фазои боқимондаи холигиро 
 дар ҷадвал бо қимати android:numColumns="auto_fit" муайян мекунад. 
 Барои дар байни катакчаҳо гузоштани ҷойи холигии боқимонда, қимати 
 columnWidth истифода бурда мешавад. Қимати spacingWidth бошад, барои 
 зиёдкунии ҷойи холигии байни катакчаҳо истифода мешавад. 
 Ҳоло мисоли соддаеро дида мебароем. Барои иҷрои ин амал, дар 
 активитиамон як тугмачаи GridView мегузорем. 
 Мӯҳтавои файли activity_main.xml: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <GridView 
 android:id="@+id/gridview" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:numColumns="" 
 android:verticalSpacing="dp" 
 android:horizontalSpacing="dp" 
 android:textAlignment="center" 
 android:stretchMode="columnWidth" /> 
 </android.support.constraint.ConstraintLayout> 
 Коди барнома бошад, шакли зеринро мегирад: 
 package com.example.user.mygridviewapplication; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.View; 
 import android.widget.AdapterView; 
 import android.widget.ArrayAdapter; 
 import android.widget.GridView; 
 import android.widget.Toast; 
 public class MainActivity extends AppCompatActivity { 
 final String[] fruitsTaj = new String[] { 
 "Себ", "Зардолу", "Шафтолу", "Олуболӯ", "Гелос","Анор", 
 "Ангур", "Анҷир", "Нок", "Чормағз","Бодом", "Писта"}; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 // ба дастоварии элементи GridView 
 final GridView fruitList = (GridView) findViewById 
 (R.id.gridview); 
 // сохтани адаптер 
 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
 android.R.layout.simple_list_item_, fruitsTaj); 
 fruitList.setAdapter(adapter); 
 final AdapterView.OnItemClickListener itemListener = new 
 AdapterView.OnItemClickListener() { 
 @Override 
 public void onItemClick(AdapterView<?> parent, View view, 
 int position, long id) { 
 Toast.makeText(getApplicationContext(), "Шумо "+ parent. 
 getItemAtPosition(position).toString()+"-ро интихоб 
 кардед.", Toast.LENGTH_SHORT).show(); 
 } 
 }; 
 fruitList.setOnItemClickListener(itemListener); 
 } 
 } 
 Дар ин ҷо ибтидо массиви сатрӣ бо номи fruitsTaj сохта шудааст, сипас
 тағйирёбандаи типи GridView бо номи fruitList муаррифӣ карда 
 шуда, ба он элементи GridView-и дар қолаб гузошташудаамон 
 бахшида шудааст. Пас аз ин, тағйирёбандаи ArrayAdapter 
 муаррифӣ карда шуда, ба он ба сифати элемент массиви 
 fruitsTaj нишон дода шудааст. Баъди муаррифии 
 тағйирёбандаҳои лозимӣ барои ба даст овардани қимати 
 элементи интихобшуда шунавандаи OnItemClickListener сохта 
 шуда, дар охир ба параметри методи setOnItemClickListener –и 
 fruitList бахшида шудааст. 
 Натиҷаи барнома: 
 Ба сифати матн дар ин ҷо метавон аз расмҳо низ истифода кард. Барои ин
 қолаби GridView –ро ба сурати зерин тағйир медиҳем: 
 <GridView xmlns:android="http://schemas.android.com/apk/res/android" 
 android:id="@+id/gridview" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:columnWidth="dp" 
 android:numColumns="auto_fit" 
 android:verticalSpacing="dp" 
 android:horizontalSpacing="dp" 
 android:stretchMode="columnWidth" 
 android:gravity="center"> 
 </GridView> 
 Барои пайвастшавӣ бо расмҳо бо номи ImageAdapter адаптери класси 
 дохили месозем, яъне коди зеринро пеш аз қавси маҳкамшавандаи охирони 
 класси асосӣ менависем. 
 //Сохтани адаптери ImageAdapter 
 private class ImageAdapter extends BaseAdapter { 
 private Context mContext; 
 public ImageAdapter(Context c) { 
 mContext = c; 
 } 
 public int getCount() { 
 return rasmihaivonot.length; 
 } 
 public Object getItem(int position) { 
 return null; 
 } 
 public long getItemId(int position) { 
 return; 
 } 
 public View getView(int position, View convertView, 
 ViewGroup parent) { 
 ImageView mImageView; 
 if (convertView == null) { 
 mImageView = new ImageView(mContext); 
 //андозаи расм 
 mImageView.setLayoutParams(new GridView. 
 LayoutParams(, )); 
 mImageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
 //фазоҳои холигии расм 
 mImageView.setPadding(,,, ); 
 } else { 
 mImageView = (ImageView) convertView; 
 } 
 mImageView.setImageResource(rasmihaivonot[position]); 
 return mImageView; 
 } 
 } 
 Коди асосии барнома: 
 package com.example.user.mygridviewapplication; 
 import android.content.Context; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.view.ViewGroup; 
 import android.widget.AdapterView; 
 import android.widget.BaseAdapter; 
 import android.widget.GridView; 
 import android.widget.ImageView; 
 import android.widget.Toast; 
 public class MainActivity extends AppCompatActivity { 
 int[] rasmihaivonot = {R.drawable.asp, R.drawable.khar, 
 R.drawable.buz, R.drawable.gov, R.drawable.gurba, 
 R.drawable.guspand, R.drawable.khurus, R.drawable.sag, 
 }; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 GridView androidGridView = (GridView) findViewById 
 (R.id.gridview); 
 androidGridView.setAdapter(new ImageAdapter(this)); 
 androidGridView.setOnItemClickListener(new AdapterView. 
 OnItemClickListener(){ 
 public void onItemClick(AdapterView<?> parent, View v, 
 int position, long id){ 
 Toast.makeText(getBaseContext(), "Расми дар хоначаи " 
 + (position + ) + " -ум буда интихоб карда шуд", 
 Toast.LENGTH_LONG).show(); 
 } 
 }); 
 } 
 //Сохтани адаптери ImageAdapter 
 } 
 Натиҷаи барнома: 
 Ба ҳамин монанд метавон дар поёни ҳар як расм номи онро низ навишт. 
 Барои иҷрои ин чунин амал мекунем: 
 ) Дар папкаи res бо номи custom_grid.xml як файл месозем, ки барои сохтани
 ҷадвали расмҳо истифода бурда мешавад. 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent"> 
 <ImageView 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:id="@+id/imageView" 
 android:layout_alignParentTop="true" 
 android:layout_centerHorizontal="true" 
 android:layout_marginTop="dp" /> 
 <TextView 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="New Text" 
 android:id="@+id/textView" 
 android:layout_below="@+id/imageView" 
 android:layout_centerHorizontal="true" 
 android:layout_marginTop="dp" /> 
 </RelativeLayout> 
 ) Бо номи ImageTextAdapter як класс месозем, ки мӯҳтавои он чунин аст: 
 package com.example.user.mygridviewapplication; 
 import android.content.Context; 
 import android.view.LayoutInflater; 
 import android.view.View; 
 import android.view.ViewGroup; 
 import android.widget.BaseAdapter; 
 import android.widget.ImageView; 
 import android.widget.TextView; 
 class ImageTextAdapter extends BaseAdapter { 
 private Context context; 
 private String [] nomihaivonot; 
 private int [] rasmihaivonot; 
 public ImageTextAdapter(Context context, String [] nomihaivonot, 
 int [] rasmihaivonot) { 
 this.context=context; 
 this.rasmihaivonot=rasmihaivonot; 
 this.nomihaivonot=nomihaivonot; 
 } 
 @Override 
 public int getCount() { 
 return nomihaivonot.length; 
 } 
 @Override 
 public Object getItem(int position) { 
 return null; 
 } 
 @Override 
 public long getItemId(int position) { 
 return; 
 } 
 @Override 
 public View getView(int position, View convertView, 
 ViewGroup parent) { 
 LayoutInflater inflater= (LayoutInflater)context. 
 getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
 convertView=inflater.inflate(R.layout.custom_grid, null); 
 TextView name=(TextView)convertView.findViewById 
 (R.id.textView); 
 ImageView mImageView=(ImageView)convertView. 
 findViewById(R.id.imageView); 
 name.setText(nomihaivonot[position]); 
 mImageView.setImageResource(rasmihaivonot[position]); 
 return convertView; 
 } 
 } 
 )Файли MainActivity–ро ба сурати зерин тағйир медиҳем: 
 package com.example.user.mygridviewapplication; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.widget.AdapterView; 
 import android.widget.GridView; 
 import android.widget.Toast; 
 public class MainActivity extends AppCompatActivity { 
 public GridView androidGridView; 
 private String[] nomihaivonot = {"Асп", "Хар", "Буз", "Гов", 
 "Гурба", "Гуспанд","Хурус", "Саг"}; 
 int[] rasmihaivonot = {R.drawable.asp, R.drawable.khar, 
 R.drawable.buz, R.drawable.gov, R.drawable.gurba, 
 R.drawable.guspand, R.drawable.khurus, R.drawable.sag, 
 }; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 androidGridView=(GridView)findViewById(R.id.gridView); 
 // setting up Adapter tp GridView 
 androidGridView.setAdapter(new ImageTextAdapter 
 (this,nomihaivonot,rasmihaivonot)); 
 androidGridView.setOnItemClickListener(new AdapterView. 
 OnItemClickListener() { 
 public void onItemClick(AdapterView<?> parent, View v, 
 int position, long id) { 
 Toast.makeText(getBaseContext(), "Расми дар хоначаи " 
 + (position + ) + " -ум буда интихоб карда шуд", 
 Toast.LENGTH_LONG).show(); 
 } 
 }); 
 } 
 } 
 Натиҷаи барнома: 
 Метавон барномаро мукаммал кард, ки бо донистани рақами расм, 
 имконияти расмро ба адозаи экран калон кардан мавҷуд бошад. Барои иҷрои ин
 амал дар папкаи res бо номи full_image файли нав месозем, ки мӯҳтавои он чунин
 аст: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 xmlns:tools="http://schemas.android.com/tools" 
 tools:context=".FullImageActivity"> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical"> 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:textSize="sp" 
 android:textAlignment="center" 
 android:text="TextView" /> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="horizontal"> 
 <ImageView 
 android:id="@+id/full_image_view" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:scaleType="fitXY" /> 
 </LinearLayout> 
 </LinearLayout> 
 </android.support.constraint.ConstraintLayout> 
 Дар папкаи Java бо номи FullImageActivity.java як класси нав месозем:
 package com.example.user.mygridviewapplication; 
 import android.content.Intent; 
 import android.os.Bundle; 
 import android.support.v.app.ActionBar; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.MenuItem; 
 import android.widget.ImageView; 
 import android.widget.TextView; 
 public class FullImageActivity extends AppCompatActivity { 
 public TextView myInfo; 
 @Override 
 public void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.full_image); 
 //Намоиш додани тугмачаи ба хона 
 ActionBar actionBar = getSupportActionBar(); 
 actionBar.setHomeButtonEnabled(true); 
 actionBar.setDisplayHomeAsUpEnabled(true); 
 actionBar.setTitle("Расми ҳайвон"); 
 myInfo = (TextView) findViewById(R.id.textView); 
 ImageView imageView = (ImageView) findViewById(R.id. 
 full_image_view); 
 Intent intent = getIntent(); 
 int position = intent.getExtras().getInt("id"); 
 myInfo.setText(MainActivity.nomihaivonot[position]); 
 imageView.setImageResource(MainActivity. 
 rasmihaivonot[position]); 
 } 
 //Ҳодиса барои тугмачаи ба хона 
 @Override 
 public boolean onOptionsItemSelected(MenuItem item){ 
 switch (item.getItemId()) { 
 case android.R.id.home: { 
 Intent ind = new Intent(getApplicationContext(), 
 MainActivity.class); 
 startActivity(ind); 
 return true; 
 } 
 default:return super.onOptionsItemSelected(item); 
 } 
 }; 
 } 
 Пас аз иҷрои ин амал дар файли манифест фармони зеринро илова мекунем.
 <activity android:name=".FullImageActivity"></activity> 
 Акнун коди класси асосиро ба сурати зерин тағйир медиҳем: 
 package com.example.user.mygridviewapplication; 
 import android.content.Intent; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.widget.AdapterView; 
 import android.widget.GridView; 
 public class MainActivity extends AppCompatActivity { 
 public GridView androidGridView; 
 public static String[] nomihaivonot = {"Асп", "Хар", "Буз", 
 "Гов", "Гурба", "Гуспанд","Хурус", "Саг"}; 
 public static int[] rasmihaivonot = {R.drawable.asp, 
 R.drawable.khar,R.drawable.buz, R.drawable.gov, 
 R.drawable.gurba, R.drawable.guspand, R.drawable.khurus, 
 R.drawable.sag, 
 }; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 androidGridView=(GridView)findViewById(R.id.gridView); 
 // setting up Adapter tp GridView 
 androidGridView.setAdapter(new ImageTextAdapter 
 (this,nomihaivonot,rasmihaivonot)); 
 androidGridView.setOnItemClickListener(new AdapterView. 
 OnItemClickListener() { 
 public void onItemClick(AdapterView<?> parent, View v, 
 int position, long id){ 
 Intent i = new Intent(getApplicationContext(), 
 FullImageActivity.class); 
 // passing array index 
 i.putExtra("id", position); 
 startActivity(i); 
 } 
 }); 
 } 
 } 
 Пас аз ин, барномаро иҷро мекунем: 
 Агар ягон расмро интихоб карда, бо нишондиҳандаи муш онро пахш 
 кунем,(масалан расми асп) натиҷаи зерин ба даст меояд: 
 Қайд. Ин навъ барномаҳоро метавон бо усулҳои дигар низ таҳия кард. Баъдан
 ба ин масъала бармегардем. 
 Контейнери ScrollView барои таҳия намудани воситаи тобдиҳанда дар 
 интерфеси барномае, ки элементҳои он аз андозаи экран бештаранд, яъне дар
 экран ҷойгир кардани онҳо душвор аст, истифода бурда мешавад. Дар дохили 
 ScrollView ба таври пешфарз танҳо метавон як элементро гузошт, барои 
 гузоштани элементҳои зиёд аз контейнерҳои дигар истифода бурда мешавад. 
 Мисол. Гузоштани тугмачаи фармонӣ дар формаи лоиҳа: 
 <?xml version="." encoding="utf-"?> 
 <ScrollView xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context="com.example.user.myfirstapplication.MainActivity"> 
 <android.support.constraint.ConstraintLayout 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content"> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button One" 
 android:layout_marginLeft="dp" 
 app:layout_constraintLeft_toLeftOf="parent" 
 android:layout_marginRight="dp" 
 app:layout_constraintRight_toRightOf="parent" 
 app:layout_constraintTop_toTopOf="parent" 
 android:layout_marginTop="dp"></Button> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button Two" 
 android:layout_marginTop="dp" 
 app:layout_constraintTop_toBottomOf="@+id/button" 
 android:layout_marginLeft="dp" 
 app:layout_constraintLeft_toLeftOf="parent" 
 android:layout_marginRight="dp" 
 app:layout_constraintRight_toRightOf="parent"></Button> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button Three" 
 android:layout_marginTop="dp" 
 app:layout_constraintTop_toBottomOf="@+id/button" 
 android:layout_marginRight="dp" 
 app:layout_constraintRight_toRightOf="parent" 
 android:layout_marginLeft="dp" 
 app:layout_constraintLeft_toLeftOf="parent"></Button> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button Four" 
 android:layout_marginTop="dp" 
 app:layout_constraintTop_toBottomOf="@+id/button" 
 android:layout_marginLeft="dp" 
 app:layout_constraintLeft_toLeftOf="parent" 
 android:layout_marginRight="dp" 
 app:layout_constraintRight_toRightOf="parent"></Button> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button Five" 
 android:layout_marginTop="dp" 
 app:layout_constraintTop_toBottomOf="@+id/button" 
 android:layout_marginRight="dp" 
 app:layout_constraintRight_toRightOf="parent" 
 android:layout_marginLeft="dp" 
 app:layout_constraintLeft_toLeftOf="parent"></Button> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button Six" 
 android:layout_marginLeft="dp" 
 app:layout_constraintLeft_toLeftOf="parent" 
 android:layout_marginRight="dp" 
 app:layout_constraintRight_toRightOf="parent" 
 android:layout_marginTop="dp" 
 app:layout_constraintTop_toBottomOf="@+id/button"></Button> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button Seven" 
 android:layout_marginLeft="dp" 
 app:layout_constraintLeft_toLeftOf="parent" 
 android:layout_marginRight="dp" 
 app:layout_constraintRight_toRightOf="parent" 
 android:layout_marginTop="dp" 
 app:layout_constraintTop_toBottomOf="@+id/button" ></Button> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button Eight" 
 android:layout_marginLeft="dp" 
 app:layout_constraintLeft_toLeftOf="parent" 
 android:layout_marginRight="dp" 
 app:layout_constraintRight_toRightOf="parent" 
 android:layout_marginTop="dp" 
 app:layout_constraintTop_toBottomOf="@+id/button"></Button> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button Nine" 
 android:layout_marginLeft="dp" 
 app:layout_constraintLeft_toLeftOf="parent" 
 android:layout_marginRight="dp" 
 app:layout_constraintRight_toRightOf="parent" 
 android:layout_marginTop="dp" 
 app:layout_constraintTop_toBottomOf="@+id/button"></Button> 
 </android.support.constraint.ConstraintLayout> 
 </ScrollView> 
 Азбаски дар ScrollView имконияти гузоштани танҳо як элемент мавҷуд аст,
 бинобар ин, ҳамаи элементҳои Button дар дохили LinearLayout гузошта шудаанд.
 Агар масоҳати элементҳои дар LinearLayout гузошташуда, аз масоҳати экран зиёд
 бошад, он гоҳ дар LinearLayout тобдиҳанда дастрас мегардад. 
 Натиҷаи барнома: 
 Контейнери ScrollView-ро низ метавон ба HorizontalScrollView низ 
 истифода бурд. 
 Барои истифода бурдани HorizontalScrollView коди барномаро ба сурати
 зерин тағйир медиҳем: 
 <?xml version="." encoding="utf-"?> 
 <HorizontalScrollView xmlns:android="http://schemas.an- 
 droid.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <android.support.constraint.ConstraintLayout 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent"> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button One" 
 app:layout_constraintLeft_toRightOf="parent" 
 android:layout_marginLeft="dp" 
 android:layout_marginRight="dp" 
 app:layout_constraintBottom_toBottomOf="parent" 
 app:layout_constraintTop_toTopOf="parent"></Button> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button Two" 
 app:layout_constraintLeft_toRightOf="@+id/button" 
 android:layout_marginLeft="dp" 
 android:layout_marginRight="dp" 
 app:layout_constraintBottom_toBottomOf="parent" 
 app:layout_constraintTop_toTopOf="parent"></Button> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button Three" 
 app:layout_constraintLeft_toRightOf="@+id/button" 
 android:layout_marginLeft="dp" 
 android:layout_marginRight="dp" 
 app:layout_constraintBottom_toBottomOf="parent" 
 app:layout_constraintTop_toTopOf="parent"></Button> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button Four" 
 app:layout_constraintLeft_toRightOf="@+id/button" 
 android:layout_marginLeft="dp" 
 android:layout_marginRight="dp" 
 app:layout_constraintBottom_toBottomOf="parent" 
 app:layout_constraintTop_toTopOf="parent"> 
 </Button> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button Five" 
 app:layout_constraintLeft_toRightOf="@+id/button" 
 android:layout_marginLeft="dp" 
 android:layout_marginRight="dp" 
 app:layout_constraintBottom_toBottomOf="parent" 
 app:layout_constraintTop_toTopOf="parent"> 
 </Button> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button Six" 
 android:layout_marginLeft="dp" 
 android:layout_marginRight="dp" 
 app:layout_constraintBottom_toBottomOf="parent" 
 app:layout_constraintTop_toTopOf="parent" 
 app:layout_constraintLeft_toRightOf="@+id/button"> 
 </Button> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button Seven" 
 android:layout_marginLeft="dp" 
 android:layout_marginRight="dp" 
 app:layout_constraintBottom_toBottomOf="parent" 
 app:layout_constraintTop_toTopOf="parent" 
 app:layout_constraintLeft_toRightOf="@+id/button" > 
 </Button> 
 </android.support.constraint.ConstraintLayout> 
 </HorizontalScrollView> 
 Натиҷаи барнома: 
 Илова бар ин, метавон контейнери мазкурро ба сурати NestedScrollView
 низ истифода кард. 
 Мисол. 
 <?xml version="." encoding="utf-"?> 
 <ScrollView xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <LinearLayout android:orientation="vertical" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content"> 
 <android.support.v.widget.NestedScrollView android:lay- 
 out_width="match_parent" 
 android:layout_height="dp" 
 android:layout_marginTop="dp"> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:orientation="vertical"> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button One" 
 android:layout_marginLeft="dp"></Button> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button Two" 
 android:layout_marginLeft="dp"></Button> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button Three" 
 android:layout_marginLeft="dp"></Button> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button Four" 
 android:layout_marginLeft="dp"></Button> 
 </LinearLayout> 
 </android.support.v.widget.NestedScrollView> 
 <android.support.v.widget.NestedScrollView android:lay- 
 out_width="match_parent" 
 android:layout_height="dp" 
 android:layout_marginTop="dp"> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:orientation="vertical"> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button One" 
 android:layout_marginLeft="dp"></Button> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button Two" 
 android:layout_marginLeft="dp"></Button> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button Three" 
 android:layout_marginLeft="dp"></Button> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Button Four" 
 android:layout_marginLeft="dp"></Button> 
 </LinearLayout> 
 </android.support.v.widget.NestedScrollView> 
 </LinearLayout> 
 </ScrollView> 
 Натиҷаи барнома: 
 Сохтани ScrollView тавассути барнома дар файли MainActivity: 
 package com.example.user.myfirstapplication; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.ViewGroup; 
 import android.widget.ScrollView; 
 import android.widget.TextView; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 ScrollView scrollView = new ScrollView(this); 
 TextView textView = new TextView(this); 
 textView.setText(R.string.my_word); 
 textView.setLayoutParams(new ViewGroup.LayoutParams 
 (ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.Lay- 
 outParams.WRAP_CONTENT)); 
 textView.setTextSize(); 
 scrollView.addView(textView); 
 setContentView(scrollView); 
 } 
 } 
 Элементи RecyclerView барои муносиб (оптимизатсия) кардани кор бо 
 руйхатҳо ва баланд бардоштани маҳсулнокӣ дар муқоиса бо ListView мебошад.
 Ба намуди пешфарз имконияти истифодабарии RecyclerView дар Android 
 Studio мавҷуд намебошад. Бинобар ин, пеш аз истифодабарӣ зарурати ба таври
 дастӣ илова намудани он пеш меояд. Барои иҷрои ин амал файли build.gradle –
 ро, ки дар папкаи Gradle Scripts ҷойгир аст, мекушоем. 
 Пас аз кушодан дар бахши (шохаи) Dependencies фармони зеринро илова 
 мекунем: 
 implementation ’com.android.support:recyclerview-v:..’ 
 Дар натиҷа шохаи мазкур шакли зеринро мегирад: 
 dependencies { 
 implementation fileTree(dir: ’libs’, include: [’*.jar’]) 
 implementation ’com.android.support:appcompat-v:..’ 
 implementation ’com.android.support:recyclerview-v:..’ 
 implementation ’com.android.support.constraint:constraint-lay 
 out:..’ 
 testImplementation ’junit:junit:.’ 
 androidTestImplementation ’com.android.support.test:runner:..’ 
 androidTestImplementation ’com.android.support.test.espresso: 
 espresso-core:..’ 
 } 
 Барои ҳамзамонсозии (синхронизатсия)-и файли build.gradle бо лоиҳа аз
 тарафи рости болоии равзанаи файл истиноди Sync Now-ро пахш мекунем: 
 Акнун барои инъикоси иттилоот дар папкаи Java бо номи MyClass класси
 нав ҳамроҳ мекунем, ки мӯҳтавои он чунин аст: 
 package com.example.user.myfirstapp; 
 public class MyClass { 
 private String name; 
 private String notes; 
 private int image; 
 public MyClass(String name, String notes, int image){ 
 this.name=name; 
 this.notes = notes; 
 this.image = image; 
 } 
 public String getName() { 
 return this.name; 
 } 
 public void setName(String name) { 
 this.name = name; 
 } 
 public String getNotes() { 
 return this.notes; 
 } 
 public void setNotes(String notes) 
 { 
 this.notes = notes; 
 } 
 public int getImage() 
 { 
 return this.image; 
 } 
 public void setImage(int image) 
 { 
 this.image = image; 
 } 
 } 
 Класси MyClass дорои се майдон мебошад, ки мувофиқан барои нигоҳ 
 доштани ном, маълумот ва расми (идентификатори расми) ҳайвони хонагӣ 
 пешбинӣ шудаанд. 
 Барои дар экран баровардани руйхати объектҳо тавассути RecyclerView 
 дар папкаи res/layout бо номи list_item.xml файли қолаб месозем, ки мӯҳтавои он
 чунин аст: 
 <?xml version="." encoding="utf-"?> 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:orientation="horizontal" 
 android:padding="dp"> 
 <ImageView 
 android:id="@+id/image" 
 android:layout_marginRight="dp" 
 android:layout_marginEnd="dp" 
 android:layout_width="dp" 
 android:layout_height="dp" /> 
 <LinearLayout 
 android:orientation="vertical" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content"> 
 <TextView 
 android:id="@+id/name" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" /> 
 <TextView 
 android:id="@+id/notes" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" /> 
 </LinearLayout> 
 </LinearLayout> 
 Дар ин файл қолаби баровардани танҳо як элемент (объекти MyClass) 
 муайян карда шудааст. 
 Монанди ҳолати ListView барои дар RecyclerView хориҷ намудани 
 элементҳои мураккаб зарурати сохтани адаптери хусусӣ пеш меояд. Бинобар ин,
 дар папкаи Java бо номи DataAdapter класси нав месозем, ки мӯҳтавои он чунин
 шакл дорад: 
 package com.example.user.myfirstapp; 
 import android.content.Context; 
 import android.view.LayoutInflater; 
 import android.support.v.widget.RecyclerView; 
 import android.view.View; 
 import android.view.ViewGroup; 
 import android.widget.ImageView; 
 import android.widget.TextView; 
 import java.util.List; 
 public class DataAdapter extends Recycler- 
 View.Adapter<DataAdapter.ViewHolder> { 
 private LayoutInflater inflater; 
 private List<MyClass> MyClasss; 
 DataAdapter(Context context, List<MyClass> MyClasss) { 
 this.MyClasss = MyClasss; 
 this.inflater = LayoutInflater.from(context); 
 } 
 @Override 
 public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup 
 parent, int viewType) { 
 View view = inflater.inflate(R.layout.list_item, parent, false); 
 return new ViewHolder(view); 
 } 
 @Override 
 public void onBindViewHolder(DataAdapter.ViewHolder holder, 
 int position) { 
 MyClass MyClass = MyClasss.get(position); 
 holder.imageView.setImageResource(MyClass.getImage()); 
 holder.nameView.setText(MyClass.getName()); 
 holder.companyView.setText(MyClass.getNotes()); 
 } 
 @Override 
 public int getItemCount() { 
 return MyClasss.size(); 
 } 
 public class ViewHolder extends RecyclerView.ViewHolder { 
 final ImageView imageView; 
 final TextView nameView, companyView; 
 ViewHolder(View view){ 
 super(view); 
 imageView = (ImageView)view.findViewById(R.id.image); 
 nameView = (TextView) view.findViewById(R.id.name); 
 companyView = (TextView) view.findViewById(R.id.notes); 
 } 
 } 
 } 
 Адаптери барои RecyclerView истифодашаванда бояд меросбарӣ класси 
 RecyclerView.Adapter бошад. Класси мазкур дорои се метод мебошад: 
 onCreateViewHolder: объекти ViewHolder бармегардонад, ки барои нигоҳ
 доштани як объекти MyClass истифода мешавад. 
 onBindViewHolder: объекти ViewHolder –ро бо объекти MyClass аз рӯӣ 
 мавқеи муйян алоқаманд менамояд. 
 getItemCount: миқдори объектҳои руйхатро бармегардонад. 
 Барои нигоҳ доштани иттилоот дар класси адаптер, класси статикии 
 ViewHolder муайян гардидааст, ки элементҳои идоракунандаи дар list_item.xml
 муайяншударо истифода менамояд. 
 Акнун файли activity_main.xml – ро ба сурати зерин омода мекунем, яъне дар
 он танҳо як элементи RecyclerView мегузорем: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent"> 
 <android.support.v.widget.RecyclerView 
 android:id="@+id/list" 
 app:layoutManager="android.support.v.widget.LinearLayoutManager" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" /> 
 </android.support.constraint.ConstraintLayout> 
 Барои RecyclerView бояд атрибути app:layoutManager илова карда шавад,
 ки ба типи идоракунандаи қисматбанд ишора мекунад. 
 Дар охир класси MainActivity –ро ба сурати зерин тағйир медиҳем: 
 package com.example.user.myfirstapp; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.support.v.widget.RecyclerView; 
 import java.util.ArrayList; 
 import java.util.List; 
 public class MainActivity extends AppCompatActivity { 
 List<MyClass> MyClasss = new ArrayList<>(); 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 setInitialData(); 
 RecyclerView recyclerView = (RecyclerView) findViewById 
 (R.id.list); 
 // сохтани ададптер 
 DataAdapter adapter = new DataAdapter(this, MyClasss); 
 // барои руйхат истифода намудани адаптер 
 recyclerView.setAdapter(adapter); 
 } 
 private void setInitialData(){ 
 MyClasss.add(new MyClass ("Асп", "Ҳайвони саворӣ", 
 R.drawable.asp)); 
 MyClasss.add(new MyClass ("Гов", "Ҳайвони хонагии ширу 
 гӯштдеҳ", R.drawable.gov)); 
 MyClasss.add(new MyClass ("Гуспанд", "Ҳайвони хонагии 
 гӯштдеҳ", R.drawable.guspand)); 
 MyClasss.add(new MyClass ("Буз", "Ҳайвони хонагии хурди 
 шохдор", R.drawable.buz)); 
 MyClasss.add(new MyClass ("Саг", "Ҳайвони шикорӣ", 
 R.drawable.sag)); 
 MyClasss.add(new MyClass ("Гурба", "Ҳайвони хурди хонагӣ", 
 R.drawable.gurba)); 
 } 
 } 
 Тавассути методи setInitialData() маҷмӯи иттилооти ибтидоӣ муқаррар 
 карда мешавад. Дар ҳолати мо ин маънои онро дорад, ки дар папкаи res/drawables
 маҷмӯи манбаҳои расмӣ (расми ҳайвонот) барои объектҳои MyClass мавҷуд 
 мебошанд. 
 Монанди ҳолати ListView дар ин ҷо низ ибтидо, элемени RecyclerView –ро
 ба даст оварда, адаптер месозем ва сипас адаптерро барои RecyclerView насб
 мекунем. 
 Шакли умумии лоиҳа чунин аст: 
 Пас аз иҷроиши барнома натиҷа шакли зеринро мегирад: 
 Барои дар байни элементҳо илова намудани хати вертикалӣ, дар класси 
 асосӣ баъди бадастоварии элементи идоракунандаи RecyclerView фармони 
 зеринро илова мекунем: 
 //Илова намудани хат байни элементҳо 
 recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayout-
 Manager.VERTICAL)); 
 Агар барномаро бори дигар иҷро кунем, натиҷа шакли зеринро мегирад: 
 Ба намуди пешфарз, элементи recyclerView ҳодисаи пахши элементро 
 пуштибонӣ намекунад. Барои илова намудани ин имконият бо номи 
 RecyclerTouchListener.java класс месозем, ки мӯҳтавои он чунин аст: 
 package com.example.user.myfirstapp; 
 import android.content.Context; 
 import android.support.v.widget.RecyclerView; 
 import android.view.GestureDetector; 
 import android.view.MotionEvent; 
 import android.view.View; 
 public class RecyclerTouchListener implements Recycler- 
 View.OnItemTouchListener { 
 private GestureDetector gestureDetector; 
 private ClickListener clickListener; 
 public RecyclerTouchListener(Context context, final RecyclerView 
 recyclerView, final ClickListener clickListener) { 
 this.clickListener = clickListener; 
 gestureDetector = new GestureDetector(context, 
 new GestureDetector.SimpleOnGestureListener() { 
 @Override 
 public boolean onSingleTapUp(MotionEvent e) { 
 return true; 
 } 
 @Override 
 public void onLongPress(MotionEvent e) { 
 View child = recyclerView.findChildViewUnder 
 (e.getX(), e.getY()); 
 if (child!= null && clickListener!= null) { 
 clickListener.onLongClick(child, recyclerView. 
 getChildPosition(child)); 
 } 
 } 
 }); 
 } 
 @Override 
 public boolean onInterceptTouchEvent(RecyclerView rv,MotionEvent e) { 
 View child = rv.findChildViewUnder(e.getX(), e.getY()); 
 if (child!= null && clickListener!= null && gestureDetector. 
 onTouchEvent(e)) { 
 clickListener.onClick(child, rv.getChildPosition(child)); 
 } 
 return false; 
 } 
 @Override 
 public void onTouchEvent(RecyclerView rv, MotionEvent e) { 
 } 
 @Override 
 public void onRequestDisallowInterceptTouchEvent(boolean 
 disallowIntercept) { 
 } 
 public interface ClickListener { 
 void onClick(View view, int position); 
 void onLongClick(View view, int position); 
 } 
 } 
 Пас аз омодакунии класси мазкур ба сурати зерин барои компоненти recy-
 clerView метод менависем: 
 recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getAp- 
 plicationContext(), recyclerView, new RecyclerTouchListener.Click- 
 Listener() { 
 @Override 
 public void onClick(View view, int position) { 
 MyClass myObj =MyClasss.get(position); 
 Toast.makeText(getApplicationContext(), myObj.getName() + " – 
 Интихоб карда шуд!", Toast.LENGTH_SHORT).show(); 
 } 
 @Override 
 public void onLongClick(View view, int position) { 
 } 
 })); 
 Шурӯъ аз версияи Android Lollipop (API ) бо номи CardView компоненти
 нав пайдо шуд. Мантиқан ин компонент инкишофи минбаъдаи FrameLayout 
 буда, имконияти сохтани варақаи соядор ва дорои кунҷҳои даврашаклро фароҳам
 меорад. Пеш аз истифодабарӣ дар Gradle пайвасткунии лозимиро иҷро мекунем,
 яъне дар файли build.gradle(Module:app) сатри зеринро менависем. 
 implementation ’com.android.support:cardview-v:..’ 
 Пас аз пайвасткунӣ файли қолабро ба сурати зерин тағйир медиҳем: 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <android.support.v.widget.CardView 
 xmlns:card_view="http://schemas.android.com/apk/res-auto" 
 android:id="@+id/card_view" 
 android:layout_gravity="center" 
 android:layout_width="dp" 
 android:layout_height="dp" 
 card_view:cardCornerRadius="dp"> 
 <TextView 
 android:id="@+id/info_text" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:gravity="center_vertical|center_horizontal|top" 
 android:text="Истифодаи CardView" 
 android:textSize="sp" /> 
 </android.support.v.widget.CardView> 
 </RelativeLayout> 
 Лоиҳаро иҷро мекунем, дар натиҷа шакли зерин пайдо мегардад: 
 Илова бар ин метавон дар варақаи расм низ ҳамроҳ кард. Барои таҳия 
 намудани варақаи дорои расм ва навиштаҷот мӯҳтавои файли қолабро ба сурати
 зерин тағйир медиҳем: 
 <?xml version="." encoding="utf-"?> 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="match_parent" android:lay- 
 out_height="match_parent" 
 android:padding="dp"> 
 <android.support.v.widget.CardView 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:id="@+id/cv" 
 > 
 <RelativeLayout 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:padding="dp" 
 > 
 <ImageView 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:id="@+id/person_photo" 
 android:layout_alignParentLeft="true" 
 android:layout_alignParentTop="true" 
 android:layout_marginRight="dp" 
 android:src="@drawable/parcham" 
 /> 
 <TextView 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:id="@+id/person_name" 
 android:layout_toRightOf="@+id/person_photo" 
 android:layout_alignParentTop="true" 
 android:textSize="sp" 
 android:text="Парчами Тоҷикистон" 
 /> 
 <TextView 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:id="@+id/person_age" 
 android:layout_toRightOf="@+id/person_photo" 
 android:layout_below="@+id/person_name" 
 android:text="Муқаддасоти миллӣ" 
 /> 
 </RelativeLayout> 
 </android.support.v.widget.CardView> 
 </LinearLayout> 
 Барномаро иҷро мекунем, шакли зерин ҳосил мегардад. 
 Илова бар ин, метавон дар варақаи тугмача низ ҳамроҳ кард. Агар мӯҳтавои
 файли қолабро ба сурати зерин тағйир диҳем. Он гоҳ варақаи дорои тугмачаҳои
 “Маълумоти бештар” ва “Баромад” дошта ҳосил мешавад. 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 xmlns:app="http://schemas.android.com/apk/res-auto"> 
 <android.support.v.widget.CardView 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_margin="dp"> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:orientation="vertical"> 
 <ImageView 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:scaleType="centerCrop" 
 android:src="@drawable/parcham" /> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:orientation="vertical" 
 android:padding="dp"> 
 <TextView 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_marginBottom="dp" 
 android:text="Парчами Тоҷикистон" 
 android:textColor="#" 
 android:textSize="sp" /> 
 <TextView 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="@string/parchamInfo" 
 android:textColor="#" /> 
 </LinearLayout> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content"> 
 <Button 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:theme="@style/PrimaryFlatButton" 
 android:text="Маълумоти бештар" /> 
 <Button 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:text="Баромад" 
 android:theme="@style/PrimaryFlatButton" /> 
 </LinearLayout> 
 </LinearLayout> 
 </android.support.v.widget.CardView> 
 </RelativeLayout> 
 Дар ин ҷо, PrimaryFlatButton услубест, ки дар файли style.xml ба сурати
 зерин муаррифӣ карда шудааст: 
 <style name="PrimaryFlatButton" parent="Theme.AppCompat.Light"> 
 <item name="android:buttonStyle"> 
 @style/Widget.AppCompat.Button.Borderless.Colored 
 </item> 
 <item name="colorAccent">#FFAB</item> 
 </style> 
 Натиҷаи барнома: 
 Метавон дар компонентҳои RecycleView ва ListView руйхати варақаҳоро 
 сохт. Ҳоло мисолеро дида мебароем, ки дар он тавассути варақаҳо дар ListView
 руйхати ҳайвоноти хонагӣ, ки фарогири расм, ном ва маълумот мебошанд, илова
 карда шудааст. Барои иҷрои ин амал, ибтидо лоиҳаи нав сохта, дар он бо номи
 Animal як класс месозем, ки мӯҳтавои он чунин шакл дорад: 
 package com.example.user.myapplication; 
 public class Animal { 
 int image; 
 String name; 
 String notes; 
 public int getImage() { 
 return image; 
 } 
 public void setImage(int image) { 
 this.image = image; 
 } 
 public String getName() { 
 return name; 
 } 
 public void setName(String name) { 
 this.name = name; 
 } 
 public String getNote() { 
 return notes; 
 } 
 public void setNote(String propellant) { 
 this.notes = propellant; 
 } 
 } 
 Пас аз муаррификунии класси мазкур бо номи model.xml намуди зоҳири 
 як варақаро ба шакли файли қолаб муайян мекунем. 
 <?xml version="." encoding="utf-"?> 
 <android.support.v.widget.CardView xmlns:android="http://schemas.an- 
 droid.com/apk/res/android" 
 android:orientation="horizontal" android:layout_width="match_par- 
 ent" 
 xmlns:card_view="http://schemas.android.com/apk/res-auto" 
 android:layout_margin="dp" 
 card_view:cardCornerRadius="dp" 
 card_view:cardElevation="dp" 
 android:layout_height="dp"> 
 <LinearLayout 
 android:orientation="horizontal" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent"> 
 <ImageView 
 android:id="@+id/myImg" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" /> 
 <LinearLayout 
 android:orientation="vertical" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content"> 
 <TextView 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:textAppearance="?android:attr/textAppearanceLarge" 
 android:text="Name" 
 android:id="@+id/nameTxt" 
 android:padding="dp" 
 android:textColor="@color/colorAccent" 
 android:textStyle="bold" 
 android:layout_alignParentLeft="true" 
 /> 
 <TextView 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:textAppearance="?android:attr/textAppearanceLarge" 
 android:text="Notes" 
 android:id="@+id/noteTxt" 
 android:padding="dp" 
 android:layout_alignParentLeft="true" 
 /> 
 </LinearLayout> 
 </LinearLayout> 
 </android.support.v.widget.CardView> 
 Пас аз муайянкунии қолаби як варақа бо номи CustomAdapter адаптер 
 (класси нав) месозем, ки мӯҳтавои он чунин шакл дорад: 
 package com.example.user.myapplication; 
 import android.content.Context; 
 import android.view.LayoutInflater; 
 import android.view.View; 
 import android.view.ViewGroup; 
 import android.widget.BaseAdapter; 
 import android.widget.ImageView; 
 import android.widget.TextView; 
 import android.widget.Toast; 
 import java.util.ArrayList; 
 public class CustomAdapter extends BaseAdapter { 
 Context c; 
 ArrayList<Animal> animals; 
 public CustomAdapter(Context c, ArrayList<Animal> spacecrafts) { 
 this.c = c; 
 this.animals = spacecrafts; 
 } 
 @Override 
 public int getCount() { 
 return animals.size(); 
 } 
 @Override 
 public Object getItem(int i) { 
 return animals.get(i); 
 } 
 @Override 
 public long getItemId(int i) { 
 return i; 
 } 
 @Override 
 public View getView(int i, View view, ViewGroup viewGroup) 
 { 
 if(view==null) 
 { 
 view= LayoutInflater.from(c).inflate(R.layout.model, 
 viewGroup,false); 
 } 
 final Animal s= (Animal) this.getItem(i); 
 ImageView img= (ImageView) view.findViewById(R.id.myImg); 
 TextView nameTxt= (TextView) view.findViewById(R.id.nameTxt); 
 TextView noteTxt= (TextView) view.findViewById(R.id.noteTxt); 
 nameTxt.setText(s.getName()); 
 noteTxt.setText(s.getNote()); 
 img.setImageResource(s.getImage()); 
 view.setOnClickListener(new View.OnClickListener() 
 { 
 @Override 
 public void onClick(View v) 
 { 
 Toast.makeText(c, s.getName(), Toast.LENGTH_SHORT).show(); 
 } 
 }); 
 return view; 
 } 
 } 
 Дар ин ҷо дар дохили методи getView тавассути дастури зерин, қолаб барои
 як карточкаи сохтаамон ба даст оварда мешавад: 
 @Override 
 public View getView(int i, View view, ViewGroup viewGroup) { 
 if(view==null) 
 { 
 view= LayoutInflater.from(c).inflate(R.layout.model, 
 viewGroup,false); 
 } 
 Дар охири класс бошад, ҳодисаи пахши ягон карточка навишта шудааст: 
 view.setOnClickListener(new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 Toast.makeText(c, s.getName(), 
 Toast.LENGTH_SHORT).show(); 
 } 
 }); 
 Дар охир файли MainActivity–ро ба сурати зерин тағйир медиҳем: 
 package com.example.user.myapplication; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.support.v.widget.LinearLayoutManager; 
 import android.support.v.widget.RecyclerView; 
 import android.widget.ListView; 
 import java.util.ArrayList; 
 public class MainActivity extends AppCompatActivity { 
 CustomAdapter adapter; 
 ListView lv; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 lv= (ListView) findViewById(R.id.lv); 
 adapter=new CustomAdapter(this,getData()); 
 lv.setAdapter(adapter); 
 } 
 private ArrayList getData() 
 { 
 ArrayList<Animal> animals=new ArrayList<>(); 
 Animal animal=new Animal(); 
 animal.setName("Асп"); 
 animal.setNote("Ҳайвони саворӣ"); 
 animal.setImage(R.drawable.asp); 
 animals.add(animal); 
 animal=new Animal(); 
 animal.setName("Гов"); 
 animal.setNote("Чорвои калони шохдор"); 
 animal.setImage(R.drawable.gov); 
 animals.add(animal); 
 animal=new Animal(); 
 animal.setName("Гусфанд"); 
 animal.setNote("Чорвои хурди гӯштдеҳ"); 
 animal.setImage(R.drawable.guspand); 
 animals.add(animal); 
 animal=new Animal(); 
 animal.setName("Буз"); 
 animal.setNote("Ҳайвони хурди шохдор"); 
 animal.setImage(R.drawable.buz); 
 animals.add(animal); 
 animal=new Animal(); 
 animal.setName("Хар"); 
 animal.setNote("Ҳайвони боркаш"); 
 animal.setImage(R.drawable.khar); 
 animals.add(animal); 
 animal=new Animal(); 
 animal.setName("Саг"); 
 animal.setNote("Ҳайвони шикорӣ"); 
 animal.setImage(R.drawable.sag); 
 animals.add(animal); 
 return animals; 
 } 
 } 
 Барномаро иҷро мекунем ва натиҷаи зеринро ба даст меорем: 
 дорад? 
 кардан мумкин аст? 
 Боби. Меню дар Android Studio 
 Android якчанд типи менюҳоро пуштибонӣ мекунад. Яке аз ин типҳо 
 тугмачаи алоҳидаи Menu (дар телефонҳои кӯҳна) мебошад, ки бо пахши он 
 менюи лозимӣ даъват карда мешавад. Дар таҷҳизотҳои ҳозиразамон бошад, 
 тугмачаҳои алоҳидаро нест карда, ба ҷойи онҳо се нуқтаи вертикалӣ гузоштанд.
 Ҳоло тарзи сохтани менюро барои таҷҳизотҳои нав, ки таҳти идораи СО Android-
 и аз версияи. навтар коркунанда дида мебароем. 
 Дар шаблони Empty Activity ба намуди пешфарз меню мавҷуд намебошад, 
 бинобар ин, мо онро худамон месозем. 
 Барои иҷрои ин амал, дар асоси Empty Activity лоиҳа месозем. 
 Дар файли res/values/strings.xml чанд сатри манба илова мекунем, ки 
 мӯҳтавои онҳо чунин аст: 
 <string name="action_settings">Settings</string> 
 <string name="action_about">Дар бораи мо</string> 
 <string name="action_joinAs">Тамос бо мо</string> 
 <string name="action_exit">Баромад</string> 
 Акнун дар папкаи res бо номи menu папка месозем (Интихоби папкаи res-
 >тугмачаи рости муш->New->Directory). Пас аз ин, дар папкаи сохтаамон бо номи
 menu_main.xml файл месозем (Интихоби папкаи menu->тугмачаи рости муш- 
 >New->Menu Resource File). Агар лоиҳаи шумо аз якчандто активити иборат 
 бошад, он гоҳ барои ҳар кадомашон алоҳида меню сохта мешавад. Ҳоло файли 
 menu_main.xml-ро кушода дар шаблони он коди лозимиро менависем: 
 <?xml version="." encoding="utf-"?> 
 <menu xmlns:android="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 tools:context=".MainActivity"> 
 <item 
 android:id="@+id/action_settings" 
 android:orderInCategory="" 
 android:title="@string/action_settings" 
 app:showAsAction="never"/> 
 </menu> 
 Дар ин ҷо параметрҳои id ва title ҳоҷат ба шарҳу эзоҳ надоранд. Параметри
 orderInCategory бошад, имконияти ба тартиби муайян баровардани бандҳои 
 менюро фароҳам меорад. Атрибути app:showAsAction рафтори менюро дар 
 ActionBar муайян мекунад. Қимати never маънои онро дорад, ки банди меню 
 набояд дар сарлавҳа ҷойгир шавад, балки дар зери се нуқта қарор гирад. Агар ба
 сифати ин қимат аз always истифода шавад, он гоҳ банди Settings дар сарлавҳа
 қарор мегирад Илова бар ин ин атрибут низ дорои қиматҳои ifRooms, withText ва
 collapseActionView мебошад. Ин қиматҳоро кӯшиш намоед ки мустақилона иҷро
 намоед. 
 Масалан, агар ifRoom истифода шавад, он гоҳ ҳангоми мавҷуд будани ҷойи
 холигӣ меню нишон дода мешавад. Қимати withText бошад, илова бар нишона 
 (иконка), матн (дар хосияти android:title муайян карда шудааст) низ нишон дода
 мешавад. Қимати collapseActionView сар карда аз API пайдо шуда, элементи
 дорои ин хосият дошта, метавонад ба шакли тугмача мубаддал гардад ва ё тамоми
 Actionbar-ро банд кунад. 
 Акнун файли MainActivity-ро мекушоем. Ба намуди пешфарз дар он як 
 метод бо номи onCreate() мавҷуд мебошад. Дар онҷо методи нав бо номи 
 onCreateOptionsMenu() ҳамроҳ мекунем. Хусусан ин метод имконияти дар 
 фаъолият пайдошавии менюро фароҳам меорад. Барои иҷрои ин аз менюи Code 
 фармони Override Methods... –ро интихоб мекунем. Дар равзанаи навбатӣ барои
 тезтар пайдо кардани метод номи онро ворид мекунем. Дар ин ҷо метавон 
 ҳарфҳои аввали методро ворид кард. Пас аз пайдо кардани методи лозимӣ 
 тугмачаи ОК-ро пахш мекунем. 
 Дар натиҷа коди методи мазкур ба сурати зерин пайдо мешавад: 
 public boolean onCreateOptionsMenu(Menu menu) { 
 return super.onCreateOptionsMenu(menu); 
 } 
 Барои ба даст овардани фармонҳои меню коди зеринро ба методи мазкур 
 ҳамроҳ мекунем. 
 public boolean onCreateOptionsMenu(Menu menu) { 
 getMenuInflater().inflate(R.menu.menu_main, menu); 
 return true; 
 } 
 Методи getMenuInflater объекти MenuInflater-ро ба даст оварда, тавассути
 методи inflate() онро даъват мекунад. Дар методи inflate() файли манба барои
 меню (R.menu.menu_main) ва объекти класси Menu нишон дода мешавад. 
 Дар ин ҷо калимаи "inflate" калимаи англисӣ буда, маънои пуф карданро
 дорад, яъне аз рӯӣ мантиқи Android гуё итилоотро ба объекти меню пуф мекунад.
 Аммо дар асл калимаи "inflate" аз ду калимаи англисии in (ба) ва flat (ҳуҷра)
 грифта шуда,маънояш ба хона (ҳуҷра) мебошад. 
 Лоиҳаро иҷро мекунем, дар тарафи рости қисми болоии он метавон нишо-
 наи иборат аз се нуқтаро дид. Бо пахши ин нишона банди менюи Settings-ро 
 дидан мумкин аст. 
 Тавре ки дида мешавад, дар ин ҷо элемент item танҳо як банди менюро 
 нишон медиҳад. Барои намоиш додани бандҳои дигар дар файли menu_main 
 фармонҳои зеринро илова мекунем: 
 <?xml version="." encoding="utf-"?> 
 <menu xmlns:android="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 tools:context=".MainActivity"> 
 <item 
 android:id="@+id/action_settings" 
 android:orderInCategory="" 
 android:title="@string/action_settings" 
 app:showAsAction="never"/> 
 <item 
 android:id="@+id/action_" 
 android:orderInCategory="" 
 android:title="@string/action_about" 
 app:showAsAction="never"/> 
 <item 
 android:id="@+id/action_" 
 android:orderInCategory="" 
 android:title="@string/action_joinAs" 
 app:showAsAction="never"/> 
 <item 
 android:id="@+id/action_" 
 android:orderInCategory="" 
 android:title="@string/action_exit" 
 app:showAsAction="never"/> 
 </menu> 
 Лоиҳаро иҷро мекунем, ки он шакли зеринро мегирад. 
 Бандҳои менюи сохтаи мо то ҳол ягон амалро иҷро намекунанд. Ҳангоми 
 пахш кардани дилхоҳ банд, меню маҳкам карда мешавад. Барои иҷро намудани 
 ягон амал зарурати навиштани код пеш меояд. 
 Барои сохтани ҳодиса аз методи onOptionsItemSelected() истифода бурда
 мешавад. Аз рӯи принсипи қаблӣ методи зеринро илова мекунем. 
 @Override 
 public boolean onOptionsItemSelected(MenuItem item) { 
 return super.onOptionsItemSelected(item); 
 } 
 Параметри item барои сохтани банди меню истифода мешавад. Барои ба 
 даст овардани идентификатори меню аз методи getItemId() истифода бурда 
 мешавад. Барои ин метод фармонҳои лозимиро менависем. Аз баски меню аз 
 чанд қисм иборат аст, пас барои он аз дастурҳои if/else ё switch истифода
 мекунем. Барои хориҷ намудани иттилоот аз майдони матнӣ истифода бурда 
 мешавад. Барои ин дар активатамон як компоненти TextView ҳамроҳ мекунем. 
 Ин амалро метавон бо истифодаи майдони матнии TextView, ки дорои пайғоми 
 "Hello World!" мебошад, истифода кард. 
 @Override 
 public boolean onOptionsItemSelected(MenuItem item) { 
 //Идентификатори банди лозимии менюро ба даст меорем. 
 int id = item.getItemId(); 
 TextView infoTextView = (TextView) findViewById(R.id.textView); 
 // Амалҳо барои интихоб намудани бандҳои меню 
 switch (id) { 
 case R.id.action_: 
 infoTextView.setText("Банди 'Дар бораи мо'-ро интихоб 
 кардед!"); 
 return true; 
 case R.id.action_: 
 infoTextView.setText("Банди 'Тамос бо мо'-ро интихоб кардед!"); 
 return true; 
 case R.id.action_: 
 infoTextView.setText("Банди 'Баромад'-ро интихоб кардед!"); 
 return true; 
 default: 
 return super.onOptionsItemSelected(item); 
 } 
 } 
 Лоиҳаро иҷро карда, бо пахши банди лозими дар 
 майдони матни маълумот оиди он бандро хориҷ мекунем. 
 Ин амалро низ метавон тавассути XML иҷро кард 
 (шурӯъ аз Android.). Барои иҷрои ин амал дар манбаи 
 меню атрибути android:onClick ҳамроҳ карда мешавад. Дар 
 онҷо даъвати методи onOptionsItemSelected() лозим 
 намешавад. Тавассути атрибути android:onClick метавон 
 банди лозимии менюро интихоб кард. Атрибути мазкурро 
 барои банди Settings илова мекунем. 
 <item 
 android:id="@+id/action_settings" 
 android:title="@string/action_settings" 
 android:orderInCategory="" 
 android:onClick="onSettingsMenuClick" 
 app:showAsAction="never" /> 
 Сипас дар акивност коди зеринро менависем: 
 public void onSettingsMenuClick(MenuItem item) { 
 TextView infoTextView = (TextView) findViewById(R.id.textView); 
 infoTextView.setText("Шумо банди ‘Танзимо’-ро интихоб кардед."); 
 } 
 Намуди зоҳирии менюро метавон ба сурати гузинаҳо тағйир дод. Барои 
 иҷрои ин амал элементи group бо атрибути android:checkableBehavior="single"
 ҳамроҳ карда мешавад. 
 <item 
 android:id="@+id/action_settings" 
 android:title="@string/action_settings" 
 android:orderInCategory="" 
 android:onClick="onSettingsMenuClick" 
 app:showAsAction="never" /> 
 <group android:checkableBehavior="single"> 
 <item 
 android:id="@+id/action_" 
 android:orderInCategory="" 
 android:title="@string/action_about" 
 app:showAsAction="never"/> 
 <item 
 android:id="@+id/action_" 
 android:orderInCategory="" 
 android:title="@string/action_joinAs" 
 app:showAsAction="never"/> 
 <item 
 android:id="@+id/action_" 
 android:orderInCategory="" 
 android:title="@string/action_exit" 
 app:showAsAction="never"/> 
 </group> 
 Ҳангоми иҷро намудани барнома шакли зер ҳосил мешавад. 
 Дар Android Studio. имконияти ба таври визуалӣ таҳия намудани менюҳо
 пайдо гардид. Дар ин усул монанди элементҳои идоракунандаи муқаррарӣ 
 бандҳои меню илова карда мешаванд. 
 Қаблан тарзи сохтани менюро мавриди баҳс қарор дода будем, ҳоло бошад
 онро муфассал дида мебароем. 
 Барои сохтани меню класси android.view.Menu истифода бурда мешавад. 
 Ҳар як активност ба як объекти меню вобаста мебошад. Худи меню бошад, дорои
 бандҳои меню (класси android.view.MenuItem) ва зерменю (класси 
 android.view.SubMenu) мебошад. 
 Ҳангоми пахши тугмачаи Menu дар телефонҳои пешина (кӯҳна) маҷмӯӣ 
 пунктҳои меню, ки бо активност пайваст мебошанд пайдо мешаванд. Меню 
 метавонад дорои нишона буда, аз шаш пункт иборат бошад. Ҳангоми аз шаш 
 пункт зиёд будани меню бо пахш кардани он менюи васеъшуда пайдо мешавад, 
 яъне дар ин ҳолат ба ҷойи пункти шашум пункт More пайдо мешавад. Ҳангоми 
 пахши ин тугмача менюи васеъшуда кушода мешавад. 
 Ҳангоми пахши банди мазкур менюи васеъшуда бо фармонҳои лозимӣ 
 кушода мешавад. 
 Ҳангоми кушодашавии меню Android методи onCreateOptionsMenu()-ро 
 даъват карда ва ба сифати параметри он объекти Menu-ро равон мекунад. Менюро
 метавон ба сурати манбаҳо дар XML-файлҳо омода кард ва ё аз методи add() 
 истифода намуд. 
 Дар ибтидо сохтани менюро тавассути манба дида мебароем. Барои сохтани 
 меню аз манба истифода бурда мешавад, ки он бояд дар XML-файл нигоҳ дошта
 шавад. Худи файл бояд дар папкаи res/menu/-и лоиҳа нигоҳ дошта шавад. Менюи
 сохташуда аз элементҳои зерин иборат мебошад: 
 <menu> - барои сохтани меню, ки дорои бандҳо мебошад истифода 
 мешавад. Элементи мазкур бояд решаи элементҳо дар XML-сохтори файл 
 бошад ва он метавонад дорои якчанд элементҳои <item> ва <group> бошад.
 <item> -барои сохтани банди меню истифода бурда мешавад. Ин элемент 
 метавонад дорои зерменюҳо бошад. 
 <group> - дар вақти зарурӣ барои элементҳои <item> метавон аз 
 контейнери махфӣ истифода кард. 
 Масалан, барои сохтани ягон меню, барои бозӣ чунин амал мекунем. 
 Ибтидо файли game_menu.xml-ро бо мӯҳтавои зерин месозем. 
 <?xml version="." encoding="utf-"?> 
 <menu xmlns:android="http://schemas.android.com/apk/res/android"> 
 <item android:id="@+id/new_game" 
 android:title="@string/new_game" /> 
 <item android:id="@+id/help" 
 android:title="@string/help" /> 
 </menu> 
 Дар ин ҷо мо менюи иборат аз ду бандро сохтем. Ҳар як банд дорои 
 атрибутҳои зерин мебошад: 
 android:id - идентификатори банди меню. Тавассути он меню аз ҷониби 
 истифодабаранда шиносоӣ карда мешавад. 
 android:title - матне, ки дар меню намоиш дода мешавад. 
 Илова бар ин, барои элементи item атрибутҳои дигаре низ мавҷуд мебошанд.
 Масалан атрибути android:icon="@drawable/home" имконияти баровардани 
 нишона (значок) барои банди менюро фароҳам меорад. Атрибути 
 android:enabled="false" бошад, банди менюро дастнорас мегардонад. 
 Атрибути android:titleCondensed дар ҳолатҳое истифода мешавад, ки 
 агар сарлавҳа бисёр калон(дароз) бошад ва дар элементи менюи интихобшуда 
 нағунҷад. 
 Атрибути android:orderInCategory тартиби намоиш додани элементи меню
 MenuItems-ро танзим мекунад. 
 Қайд кардан ба маврид аст, ки ба сифати нишона (значок) метавон аз 
 нишонаҳои системавии Android истифода кард. Масалан, 
 android:icon="@android:drawable/ic_menu_help" имконияти баровардани 
 нишонаи системавии ёриро фароҳам меорад. 
 Ҳангоми сохтани меню дар файли манба (strings.xml), сатрҳои зеринро 
 истифода бурда будем. 
 <string name="new_game">Бозии нав</string> 
 <string name="help">Ёри</string> 
 Акнун дар класси активност тағйирот ворид мекунем. Барнома бояд 
 ресурсҳои сохтаамонро ба объектҳои барномавӣ табдил медиҳем. Барои иҷрои ин
 мақсад аз методи MenuInflater.inflate() истифода бурда мешавад, ки дар методи
 махсуси onCreateOptionsMenu() даъват карда мешавад. Методи мазкур ҳангоми
 пахш намудани тугмачаи MENU дар таҷҳизот намоиш дода мешавад: 
 @Override 
 public boolean onCreateOptionsMenu(Menu menu) 
 { 
 MenuInflater inflater = getMenuInflater(); 
 inflater.inflate(R.menu.game_menu, menu); 
 return true; 
 } 
 Пас аз навиштани ин код фазоҳои номии зеринро ворид мекунем. 
 import android.view.Menu; 
 import android.view.MenuInflater; 
 Методи onCreateOptionsMenu() ҳангоми бори нахустин пайдошавии меню 
 дар экран даъват карда шуда, ба сифати параметр объекти Menu (воситаҳои 
 кӯҳна) равон карда мешавад. Шумо метавонед истиноди менюро нигоҳ дошта, 
 онро дар дилхоҳ ҷойи код барои аз сари нав даъват кардани методи 
 onCreateOptionsMenu() истифода намоед. Дар таҷҳизотҳои нав методи 
 onCreateOptionsMenu() ҳангоми сохтани активност даъват карда мешавад. Метод
 бояд қимати true баргардонад, то ин ки меню дар экран дида шавад. 
 Методи getMenuInflater() нусхаи класси MenuInflater-ро бармегардонад, ки
 ҳангоми хондани иттилооти меню аз XML месозад. 
 Тавассути барнома сохтани менюро дида мебароем. Барои иҷрои ин амал 
 барои бандҳои меню якчанд банд месозем: 
 // идентификаторҳо барои бандҳои меню 
 private static final int IDM_OPEN =; 
 private static final int IDM_SAVE =; 
 @Override 
 public boolean onCreateOptionsMenu(Menu menu){ 
 // Илова кардани банди меню 
 menu.add(Menu.NONE, IDM_OPEN, Menu.NONE, "Кушодан"); 
 menu.add(Menu.NONE, IDM_SAVE, Menu.NONE, "Сабт кардан"); 
 return true; 
 } 
 Дар ин ҷо барои илова намудани бандҳо ба меню, аз методи add() истифода
 шудааст. Методи add() дорои чор параметр мебошад: 
 идентификатори гурӯҳ – имконияти алоқаманд кардани банди менюро бо 
 гурӯҳи бандҳои ин меню фароҳам меорад. 
 идентификатори банд - барои коркарди ҳодисаи интихоби банди меню 
 тартиби ҷойгиршавии банд дар меню – имконияти муайянкунии тартибро 
 дар меню фароҳам меорад. Ба намуди пешфарз (Menu.NONE ё ) бандҳо ба
 тартиби муайяншудаашон намоиш дода мешаванд. 
 сарлавҳа – матне, ки дар бандҳои меню нишон дода мешавад. Метавон аз
 манбаҳои матнӣ истифода кард. 
 Методи мазкур объекти MenuItem бармегардонад, ки онро метавон барои 
 муқарракунии дигар хосиятҳо истифода кард, масалан барои гузоштани нишона,
 якҷояпахшкунии тугмачаҳо ва ғайра. 
 Барои сохтани менюи дорои нишона аз методи setIcon() истифода бурда 
 мешавад. 
 menu.add(Menu.NONE, IDM_OPEN, Menu.NONE, 
 Кушодан").setIcon(R.drawable.icon_menu_open); 
 Методи onCreateOptionsMenu тавассути система танҳо як маротиба даъват
 карда мешавад. Барои азнавкунии меню аз методи onPrepareOptionsMenu() 
 истифода бурда мешавад. 
 Ҳангоми интихоб кардани банди меню методи onOptionsItemSelected 
 даъват карда мешавад, ки ба сифати аргументи он объекти MenuItem – равон 
 карда мешавад. Тавассути методи getItemId метавон идентификатори банди 
 менюи интихобшударо ба даст овард. 
 public boolean onOptionsItemSelected(MenuItem item) 
 { 
 int n = item.getItemId(); 
 switch (n) { 
 case IDM_OPEN: 
 return true; 
 case IDM_SAVE: 
 return true; 
 } 
 return false; 
 } 
 Барои зуд дастрас шудан ба фармонҳои меню метавон аз якҷояпахшкунии 
 тугмачаҳо истифода кард. Барои иҷрои ин мақсад аз методҳои зерин истифода
 бурда мешавад: 
 setAlphabeticShortcut(char) – иловакунии символ 
 setNumericShortcut(int) – иловакунии адад 
 setShortcut(char, int) – иловакунии комбинатсияи символ ва адад 
 Масалан, фармони setAlphabeticShortcut('q') сабаб мешавад, ки бо пахш 
 кардани Q банди меню фаъол гардад. 
 Якҷояпахши тугмачаҳоро метавон тавассути XML низ роҳандозӣ кард: 
 android:alphabeticShortcut="c". 
 Барои коркарди ҳодисаи пахши тугмачаҳо дар активност метавон аз методи
 onKeyShortcut() ба сурати зерин истифода кард: 
 @Override 
 public boolean onKeyShortcut(int keyCode, KeyEvent event) { 
 switch (keyCode){ 
 case KeyEvent.KEYCODE_R: 
 Toast.makeText(this, "Reply", Toast.LENGTH_SHORT).show(); 
 return true; 
 default: 
 return super.onKeyShortcut(keyCode, event); 
 } 
 } 
 Барои дилхоҳ банди меню метавон зерменю илова кард. Меню тавассути 
 методи addSubMenu() дар дохили методи onCreateOptionsMenu(), ки объекти 
 SubMenu бармегардонад, сохта мешавад. Тавассути даъвати методи add() метавон
 банди нав ба меню илова намуд. Мисол: 
 import android.view.Gravity; 
 import android.view.Menu; 
 import android.view.MenuItem; 
 import android.view.SubMenu; 
 import android.widget.Toast; 
 public class MainActivity extends AppCompatActivity { 
 // идентификаторҳо барои бандҳои меню 
 public static final int IDM_HELP =; 
 public static final int IDM_NEW =; 
 public static final int IDM_OPEN =; 
 public static final int IDM_SAVE =; 
 public static final int IDM_CUT =; 
 public static final int IDM_COPY =; 
 public static final int IDM_PASTE =; 
 @Override 
 public boolean onCreateOptionsMenu(Menu menu) 
 { 
 SubMenu subMenuFile = menu.addSubMenu("Файл"); 
 subMenuFile.add(Menu.NONE, IDM_NEW, Menu.NONE, "Ҳуҷҷати нав"); 
 subMenuFile.add(Menu.NONE, IDM_OPEN, Menu.NONE, "Кушодан"); 
 subMenuFile.add(Menu.NONE, IDM_SAVE, Menu.NONE, "Сабт"); 
 SubMenu subMenuEdit = menu.addSubMenu("Таҳрир"); 
 subMenuEdit.add(Menu.NONE, IDM_CUT, Menu.NONE, "Буридан"); 
 subMenuEdit.add(Menu.NONE, IDM_COPY, Menu.NONE, "Нусхабардорӣ"); 
 subMenuEdit.add(Menu.NONE, IDM_PASTE, Menu.NONE, "Гузоштан"); 
 menu.add(Menu.NONE, IDM_HELP, Menu.NONE, "Маълумотнома"); 
 return super.onCreateOptionsMenu(menu); 
 } 
 @Override 
 public boolean onOptionsItemSelected(MenuItem item) 
 { 
 CharSequence message; 
 switch (item.getItemId()) { 
 case IDM_NEW: 
 message = "Банди Ҳуҷҷати нав интихоб карда шуд"; 
 break; 
 case IDM_OPEN: 
 message = "Банди Кушодан интихоб карда шуд"; 
 break; 
 case IDM_SAVE: 
 message = "Банди Сабт интихоб карда шуд"; 
 break; 
 case IDM_CUT: 
 message = "Банди буридан интихоб карда шуд"; 
 break; 
 case IDM_COPY: 
 message = "Банди Нусхабардорӣ интихоб карда шуд"; 
 break; 
 case IDM_PASTE: 
 message = "Банди Гузоштан интихоб карда шуд"; 
 break; 
 case IDM_HELP: 
 message = "Банди Маълумотнома интихоб карда шуд"; 
 break; 
 default: 
 return false; 
 } 
 // Хориҷ кардани натиҷаи интихобкардашуда 
 Toast toast = Toast.makeText(this, message, Toast.LENGTH_LONG); 
 toast.setGravity(Gravity.CENTER,, ); 
 toast.show(); 
 return true; 
 } 
 } 
 Барномаро иҷро карда,натиҷаро ба сурати зерин мушоҳида хоҳем кард. 
 Дар банди меню метавон гузинаҳо ё байрақчаҳо илова намуд. Барои илова
 намудани гузина ё байрақча ба банди алоҳидаи меню аз методи setCheckable()
 истифода бурда мешавад: 
 public static final int IDM_FORMAT_BOLD =;... 
 MenuItem item = menu.add(, IDM_FORMAT_BOLD,, "Bold"); 
 item.setCheckable(true); 
 Агар зарурати дар якчанд банди меню иловакунии гузина ё байрақча пеш
 ояд, метавон идентификатор сохта, онҳоро ба як гурӯҳи меню ҳамроҳ кард. Тавре
 ки медонем банди меню тавассути методи add() илова карда мешавад. Фаразан
 барои гурӯҳи меню ба сураи зерин идентификатор муаррифӣ карда бошем: 
 public static final int IDM_COLOR_GROUP =; 
 public static final int IDM_COLOR_RED =; 
 public static final int IDM_COLOR_GREEN =; 
 public static final int IDM_COLOR_BLUE =; 
 Акнун барои сохтани менюи дорои гузина ва байрақча зарур аст, ки ҳар як
 идентификатор ба ҳар як банди меню пайваст карда шуда, методи 
 setGroupCheckable() барои ҳамаи гурӯҳҳо даъват карда шавад. (дар ин сурат
 даъвати методи setCheckable() барои ҳар як банди меню шарт намебошад): 
 import android.view.Menu; 
 import android.view.SubMenu; 
 public class MainActivity extends AppCompatActivity { 
 // идентификаторҳо барои бандҳои меню 
 public static final int IDM_COLOR_GROUP =; 
 public static final int IDM_COLOR_RED =; 
 public static final int IDM_COLOR_GREEN =; 
 public static final int IDM_COLOR_BLUE =; 
 public static final int IDM_FORMAT_BOLD =; 
 @Override 
 public boolean onCreateOptionsMenu(Menu menu) { 
 SubMenu subMenuColor = menu.addSubMenu("Рангҳо"); 
 subMenuColor.add(IDM_COLOR_GROUP, IDM_COLOR_RED, Menu.NONE, 
 "Сурх"); 
 subMenuColor.add(IDM_COLOR_GROUP, IDM_COLOR_GREEN, Menu.NONE, 
 "Сабз"); 
 subMenuColor.add(IDM_COLOR_GROUP, IDM_COLOR_BLUE, Menu.NONE, 
 "Обӣ"); 
 subMenuColor.setGroupCheckable(IDM_COLOR_GROUP, true, false); 
 return super.onCreateOptionsMenu(menu); 
 } 
 } 
 Дар ин ҷо барои барқарор кардани ҳолати интихоби гузина аз методи set-
 GroupCheckable(), ки дорои се параметр мебошад истифода шудааст: 
 идентификатори гурӯҳ; 
 параметри мантиқӣ — дорои қимати true аст, агар дар гурӯҳ иҷозати 
 гузоштани гузина ё байрақча мавҷуд бошад; 
 параметри мантиқӣ — дорои қимати true аст, агар имконияти интихоби 
 як банд зарур бошад, дар ҳолати акс дорои қимати false аст. 
 Барои идоракунии ҳолати гузина ё байрақча дар коркарди ҳодиса бояд коди
 зерин навишта шавад: 
 @Override 
 public boolean onOptionsItemSelected(MenuItem item) { 
 CharSequence message; 
 switch (item.getItemId()) { 
 case IDM_COLOR_RED: 
 // баръакс (маъкус) кардани гузина 
 item.setChecked(!item.isChecked()); 
 message = "Ранги сурх"; 
 break; 
 default: 
 return false; 
 } 
 Агар тавассути барнома зарурати кушодани меню пеш ояд аз методи 
 openOptionsMenu() истифода бурда мешавад: 
 Агар тавассути барнома зарурати пӯшидани меню пеш ояд, он гоҳ аз 
 методи closeOptionsMenu() истифода бурда мешавад. 
 Бигзор дар барнома менюи зерин ба сурати xml-мавҷуд бошад: 
 <item 
 android:id="@+id/action_dog" 
 android:orderInCategory="" 
 android:title="Сурх" 
 app:showAsAction="never" /> 
 Барои нест намудани ягон банди меню ибтидо тавассути методи findItem()
 ба меню дастрасӣ пайдо карда, сипас, онро ноайён менамоем. Истинод ба 
 объекти Menu бояд дар методи onCreateOptionsMenu равон карда шавад. 
 import android.view.Menu; 
 import android.view.MenuItem; 
 import android.view.View; 
 public class MainActivity extends AppCompatActivity 
 { 
 Menu menu; 
 @Override 
 public boolean onCreateOptionsMenu(Menu menu) 
 { 
 super.onCreateOptionsMenu(menu); 
 // истинодро ба объектамон равон мекунем 
 this.menu = menu; 
 getMenuInflater().inflate(R.menu.menu_main, menu); 
 return true; 
 } 
 // пахши тугмача 
 public void onClick(View v) 
 { 
 if (menu!= null) 
 { 
 // пайдо намудани элементи лозимӣ 
 MenuItem item_dog = menu.findItem(R.id.action_dog); 
 // Ноайён кардани он 
 item_dog.setVisible(false); 
 } 
 } 
 } 
 Агар барномаро иҷро намуда тафтиш кунем мебинем, ки активност аз сари
 нав сохта шуда, менюи несткардашуда аз сари нав барқарор карда шудааст. Барои
 аз ин душворӣ раҳо ёфтан ҳолати банди менюро дар объекти типи Bundle 
 тавассути (дар дохили) методи onSaveInstanceState нигоҳ дошта, дар дохили
 методи onCreate() ҳолати сабшударо ба даст оварда ба методи 
 onPrepareOptionsMenu равон кардан мумкин аст, ки пеш аз намоиш додани меню
 даъват карда мешавад. 
 import android.os.Bundle; 
 import android.view.Menu; 
 import android.view.MenuItem; 
 import android.view.View; 
 public class MainActivity extends AppCompatActivity { 
 Menu menu; 
 Boolean savedMenuDogIsVisible; 
 final static String KEY_MENU = "action_red"; 
 @Override 
 public void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 // Ба даст овардани банди меню 
 if (savedInstanceState!= null) { 
 savedMenuDogIsVisible = savedInstanceState.getBoolean 
 (KEY_MENU,true); 
 } 
 } 
 @Override 
 public boolean onCreateOptionsMenu(Menu menu) { 
 super.onCreateOptionsMenu(menu); 
 this.menu = menu; 
 getMenuInflater().inflate(R.menu.menu_main, menu); 
 return true; 
 } 
 public void onClick(View v) { 
 if (menu!= null) { 
 MenuItem item_dog = menu.findItem(R.id.action_red); 
 // махфи кардани банди меню 
 item_dog.setVisible(false); 
 } 
 } 
 @Override 
 protected void onSaveInstanceState(Bundle outState) { 
 // TODO Auto-generated method stub 
 super.onSaveInstanceState(outState); 
 if (menu!= null) { 
 MenuItem item_dog = menu.findItem(R.id.action_red); 
 // сабт кардани ҳолати меню - true ё false 
 outState.putBoolean(KEY_MENU, item_dog.isVisible()); 
 } 
 } 
 @Override 
 public boolean onPrepareOptionsMenu(Menu menu) { 
 if (savedMenuDogIsVisible!= null) { 
 MenuItem item_dog = menu.findItem(R.id.action_red); 
 // пеш аз намоиш додан ба даст овардани (донистани) ҳолати меню 
 item_dog.setVisible(savedMenuDogIsVisible); 
 } 
 return super.onPrepareOptionsMenu(menu); 
 } 
 } 
 Шурӯъ аз версияи Android. (API ), имконияти истифодаи панели 
 амалиёт, яъне ActionBar пайдо шуд, ки дар худ сарлавҳа ва менюро дарбар 
 гирифта, ҳамоҳангсозии содаро ифода мекунад. 
 ActionBar асосан Options Menu-ро ки дар версияҳои пешинаи Android 
 мавҷуд буд иваз карда, дорои параметрҳои иловагӣ барои меню мебошад. Ба 
 намуди пешфарз дар қолаби Empty Activity ва ғайра ActionBar мавҷуд аст. Қайд
 кардан ба маврид аст, ки шурӯъ аз Android. компоненти нав Toolbar, пайдо
 шуд, ки инкишофи баъдинаи ActionBar ба ҳисоб меравад. Ҳоло имкониятҳои 
 ActionBar-ро дида мебароем. 
 Агар дар коди барнома методи зеринро илова кунем, он гоҳ дар тарафи 
 рости қисми болоӣ, нишонаи иборат аз се нуқта пайдо мешавад. 
 @Override 
 public boolean onCreateOptionsMenu(Menu menu) 
 { 
 getMenuInflater().inflate(R.menu.main_menu, menu); 
 return true; 
 } 
 Баъди иловакунии методи мазкур натиҷаи барнома шакли зеринро мегирад
 Аксари лоиҳаҳо, ки аз ду равзана иборатанд барои баргаштан ба саҳифаи
 қаблӣ дар панели асбобҳо нишонаи ба қафо (стрелка) мавҷуд аст. Барои илова
 намудани тугмачаи ба қафо, ибтидо тавассвути методи getSupportActionBar() ба
 ActionBar дастрасӣ пайдо кардан лозим аст: 
 ActionBar actionBar = getSupportActionBar(); 
 Пас аз ин, тавассути методҳои setHomeButtonEnabled ва 
 setDisplayHomeAsUpEnabled тугмачаи ба қафоро намоиш медиҳем. 
 actionBar.setHomeButtonEnabled(true); 
 actionBar.setDisplayHomeAsUpEnabled(true); 
 Барои матнро иваз кардан бошад, методи actionBar.setTitle("Саҳифаи 
 дуюм" даъват карда мешавад. 
 Матни пурраи барнома: 
 package com.example.user.myfirstapplication; 
 import android.os.Bundle; 
 import android.support.v.app.ActionBar; 
 import android.support.v.app.AppCompatActivity; 
 public class MainActivity extends AppCompatActivity 
 { 
 @Override 
 public void onCreate(Bundle savedInstanceState) 
 { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 ActionBar actionBar = getSupportActionBar(); 
 //actionBar.setHomeAsUpIndicator(R.drawable.icon); 
 actionBar.setHomeButtonEnabled(true); 
 actionBar.setDisplayHomeAsUpEnabled(true); 
 actionBar.setTitle("Саҳифаи дуюм"); 
 } 
 } 
 Натиҷаи барнома: 
 Барои иваз намудани нишонаи тугмачаи ба қафо методи 
 setHomeAsUpIndicator ба сурати зерин даъват карда мешавад: 
 actionBar.setHomeAsUpIndicator(R.drawable.icon); 
 Барои тугмачаи ба қафо низ монанди тугмачаҳои дигари меню ҳодиса 
 навишта мешавад. Тугмачаи мазкур ба намуди пешфарз дорои id-и махсус 
 («home») мебошад. 
 Ҳоло барои ин тугмача ҳодиса менависем, ки бо пахш кардани ин тугмача
 пайғоми муносибе пайдо шавад. 
 @Override 
 public boolean onOptionsItemSelected(MenuItem item) { 
 switch (item.getItemId()) { 
 case android.R.id.home: { 
 Toast toast = Toast.makeText(getApplicationContext(), 
 "Тугмачаи ба қафо пахш карда шуд!", Toast.LENGTH_SHORT); 
 toast.show(); 
 // this.finish(); 
 return true; 
 } 
 default: 
 return super.onOptionsItemSelected(item); 
 } 
 } 
 Матни пурраи барнома: 
 package com.example.user.myfirstapplication; 
 import android.os.Bundle; 
 import android.support.v.app.ActionBar; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.MenuItem; 
 import android.widget.Toast; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 public void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 ActionBar actionBar = getSupportActionBar(); 
 actionBar.setHomeAsUpIndicator(R.drawable.icon); 
 actionBar.setHomeButtonEnabled(true); 
 actionBar.setDisplayHomeAsUpEnabled(true); 
 actionBar.setTitle("Саҳифаи дуюм"); 
 } 
 @Override 
 public boolean onOptionsItemSelected(MenuItem item) { 
 switch (item.getItemId()) { 
 case android.R.id.home: { 
 Toast toast = Toast.makeText(getApplicationContext(), 
 "Тугмачаи ба қафо пахш карда шуд!", Toast.LENGTH_SHORT); 
 toast.show(); 
 // this.finish();//Ба охир расонидани кор саҳифа 
 return true; 
 } 
 default: 
 return super.onOptionsItemSelected(item); 
 } 
 } 
 } 
 Натиҷаи барнома: 
 Барои илова намудани майдони ҷустуҷӯи дар actionBar чунин амал 
 мекунем. 
 Ибтидо бо номи menu дар папкаи res як папкаи манба месозем. 
 Дар дохили ин папка як файли меню бо номи месозем: 
 мӯҳтавои ин файл чунин аст: 
 <?xml version="." encoding="utf-"?> 
 <menu xmlns:app="http://schemas.an- 
 droid.com/apk/res-auto" 
 xmlns:android="http://schemas.an- 
 droid.com/apk/res/android"> 
 <item android:id="@+id/search" 
 android:title="@string/search_title" 
 app:showAsAction="collapseAc- 
 tionView|ifRoom" 
 app:actionViewClass="an- 
 droid.widget.SearchView" /> 
 </menu> 
 Барои намоиш додани меню дар файли Java метод –ро азнав муаррифӣ 
 (преопределения) мекунем: 
 @Override 
 public boolean onCreateOptionsMenu(Menu menu) { 
 MenuInflater inflater = getMenuInflater(); 
 inflater.inflate(R.menu.main_menu, menu); 
 return true; 
 } 
 Барномаро иҷро мекунем, ки шакли зайлро соҳиб мешавад: 
 Бо пахш кардани тугмачаи ҷустуҷӯ барномаамон шакли зеринро мегирад: 
 Барои ба сифати матни ҷустуҷӯ баровардани ягон тугмача, дар файли 
 menu барои item сатри зерин илова карда мешавад: 
 android:icon="@drawable/search" 
 Ҳоло барномаеро дида мебароем, ки дар он имконияти ҷустуҷӯ дар руйхат
 мавҷуд аст. 
 Дар қолаби асосии барнома як тугмачаи ListView ҳамроҳ мекунем, ки дар
 натиҷа мӯҳтавои он шакли зеринро мегирад: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <ListView 
 android:id="@+id/listView" 
 android:layout_height="wrap_content" 
 android:layout_width="match_parent"> 
 </ListView> 
 </android.support.constraint.ConstraintLayout> 
 Матни барнома бошад, чунин аст: 
 package com.example.user.myactionbarapplication; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.Menu; 
 import android.view.MenuItem; 
 import android.widget.ArrayAdapter; 
 import android.widget.ListView; 
 import android.widget.SearchView; 
 import java.util.ArrayList; 
 import java.util.Arrays; 
 public class MainActivity extends AppCompatActivity { 
 ListView listView; 
 ArrayAdapter<String> adapter; 
 ArrayList<String> fruitesarraylist; 
 ArrayList<String> search_result_arraylist; 
 private String keyword; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 // Ба даст овардани нусхаи элементи идоракунандаи ListView 
 listView = (ListView) findViewById(R.id.listView); 
 // муаррификунии массиви типи String 
 final String[] fruitsTaj = new String[]{ 
 "Anor", "Angur", "Anjir", "Olu", "Olubolu","Gelos", 
 "Nok", "Chormagz", "Bodom", "Pista","Tut","Khurmo" 
 }; 
 fruitesarraylist = new ArrayList<String>(Ar- 
 rays.asList(fruitsTaj)); 
 search_result_arraylist = new ArrayList<>(); 
 // Истифодаи адаптери додаҳо 
 adapter = new ArrayAdapter<String>(this, android.R.layout. 
 simple_list_item_, fruitesarraylist); 
 listView.setAdapter(adapter); 
 } 
 @Override 
 public boolean onCreateOptionsMenu(Menu menu) { 
 getMenuInflater().inflate(R.menu.search_menu, menu); 
 MenuItem search_item = menu.findItem(R.id.search); 
 SearchView searchView = (SearchView) 
 search_item.getActionView(); 
 searchView.setFocusable(false); 
 searchView.setQueryHint("Ҷустуҷӯ"); 
 searchView.setOnQueryTextListener(new SearchView. 
 OnQueryTextListener() { 
 @Override 
 public boolean onQueryTextSubmit(String s) { 
 search_result_arraylist.clear(); 
 keyword = s; 
 for (int i =; i < fruitesarraylist.size(); i++) { 
 if (fruitesarraylist.get(i).contains(keyword)) { 
 search_result_arraylist.add(fruitesarraylist. 
 get(i).toString()); 
 } 
 } 
 adapter = new ArrayAdapter<String>(MainActivity.this, 
 android.R.layout.simple_list_item_, 
 search_result_arraylist); 
 listView.setAdapter(adapter); 
 return false; 
 } 
 @Override 
 public boolean onQueryTextChange(String s) { 
 return false; 
 } 
 }); 
 return true; 
 } 
 @Override 
 public boolean onOptionsItemSelected(MenuItem item) { 
 int id = item.getItemId(); 
 return super.onOptionsItemSelected(item); 
 } 
 } 
 Дар ин ҷо барои SearchView ҳодисаи setOnQueryTextListener навишта 
 шудааст, ки дар дохили он ду метод мавҷуд мебошад. 
 Методи onQueryTextSubmit ҳангоми равон кардани дархост даъват карда 
 мешавад. Ин метавонад бо пахш кардани ягон тугмачаи клавиатура (Enter)
 вобаста бошад. 
 методи onQueryTextChange-ҳангоми аз ҷониби истифодабаранда иваз 
 намудани матн даъват карда мешавад. 
 Методи onOptionsItemSelected бошад,ҳангоми аз ҷониби истифодабаранда 
 интихоб намудани банди меню даъват карда мешавад. Барои ба даст овардани 
 банди меню аз методи getItemId истифода бурда мешавад. 
 Натиҷаи барнома шакли зеринро дорад: 
 Ҳангоми дар сатри ҷустуҷӯ навиштани ягон матн, масалан “Olu” ва пахш
 намудани тугмачаи Enter натиҷаи зерин ба даст меояд: 
 Қайд. Барои беҳтар намоиш додани меню дар папкаи res бо номи xml 
 папкаи манба сохта, дар дохили он файли манбаи searchable.xml –ро месозем, ки
 мӯҳтавои он чунин аст: 
 <?xml version="." encoding="utf-"?> 
 <searchable xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:label="@string/app_name" 
 android:hint="@string/search_title" /> 
 Пас аз ин, дар файли AndroidManifest.xml фармонҳои зеринро илова 
 мекунем. 
 <meta-data android:name="an- 
 droid.app.searchable" android:re- 
 source="@xml/searchable" /> 
 Дар натиҷа файли мазкур шакли зеринро мегирад: 
 <?xml version="." encoding="utf-"?> 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
 package="com.example.user.myactionbarapplication"> 
 <application 
 android:allowBackup="true" 
 android:icon="@mipmap/ic_launcher" 
 android:label="@string/app_name" 
 android:roundIcon="@mipmap/ic_launcher_round" 
 android:supportsRtl="true" 
 android:theme="@style/AppTheme"> 
 <activity android:name=".MainActivity"> 
 <intent-filter> 
 <action android:name="android.intent.action.MAIN" /> 
 <category 
 android:name="android.intent.category.LAUNCHER" /> 
 </intent-filter> 
 <meta-data android:name="android.app.searchable" 
 android:resource="@xml/searchable" /> 
 </activity> 
 </application> 
 </manifest> 
 Тавре ки қайд кардем, шурӯъ аз Android. компоненти нав Toolbar, пайдо
 шуд, ки инкишофи баъдинаи ActionBar ба ҳисоб меравад. Элементи мазкур барои
 осон намудани амалиётҳои зуд-зуд истифодашаванда ба кор бурда мешавад. 
 Дар версияҳои куҳнаи Android тавре ки қайд кардем, элементи ActionBar
 истифода бурда мешуд, ҳоло бошад, амали онро Toolbar аз пакети 
 android.support.v.widget иҷро мекунад. 
 Барои истифодаи он ибтидо зарур аст, ки экран аз элементи ActionBar, ки
 ба намуди пешфарз мавҷуд аст, озод карда шавад. Барои иҷрои ин амал, стили
 асосии барномаро ҳамчун меросгири Theme.AppCompat.Light.NoActionBar 
 муайян мекунем. Бинобар ин файли styles.xml-ро ба сурати зерин тағйир 
 медиҳем: 
 <resources> 
 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
 <!-- Customize your theme here. --> 
 <item name="colorPrimary">@color/colorPrimary</item> 
 <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
 <item name="colorAccent">@color/colorAccent</item> 
 </style> 
 </resources> 
 Акнун ба файли асосии xml-и лоиҳа, элементи Toolbar-ро пеш аз элементи
 RelativeLayout (дар RelativeLayout иттилооти лозимӣ нигоҳ дошта мешавад) ҳам-
 роҳ мекунем, ки дар натиҷа мӯҳтавои он шакли зеринро мегирад: 
 <?xml version="." encoding="utf-"?> 
 <LinearLayout xmlns:an- 
 droid="http://schemas.an- 
 droid.com/apk/res/android" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical"> 
 <android.support.v.widget.Toolbar 
 android:id="@+id/toolbar" 
 style="@style/Toolbar"/> 
 <RelativeLayout android:lay- 
 out_height="match_parent" 
 android:layout_width="wrap_content"> 
 <TextView 
 android:id="@+id/textView" 
 android:text="@string/hello_world" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 /> 
 </RelativeLayout> 
 </LinearLayout> 
 Илова бар ин, дар файли styles барои Toolbar стили нав илова мекунем.
 <style name="Toolbar"> 
 <item name="android:layout_width">match_parent</item> 
 <item name="android:layout_height">?attr/actionBarSize</item> 
 <item name="theme">@style/ThemeOverlay.AppCompat.Dark. 
 ActionBar</item> 
 <item name="android:background">@color/colorPrimary</item> 
 </style> 
 Ҳамин тариқ, ба Activity элементи Toolbar ҳамроҳ карда шуд. Акнун Activ-
 ity-ро огоҳ кардан лозим аст, ки ба сифати ActionBar аз Toolbar истифода барад.
 Моҳияти ин амал аз он иборат аст, ки интерфейси версияҳои кӯҳнаи Android (аз
 Android. (API ) поёнтар) ба интерфейси нав монанд бошанд. Барои иҷрои ин
 амал методи Activity setSupportActionBar(Toolbar toolbar) даъват карда мешавад.
 public class MainActivity extends AppCompatActivity { 
 private Toolbar toolbar; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 toolbar = findViewById(R.id.toolbar); 
 setSupportActionBar(toolbar); 
 } 
 Барномаро иҷро мекунем, ки он шакли зеринро мегирад: 
 Барои илова намудани сарлавҳа ва зерсарлавҳа ба панели асбобҳо аз 
 методҳои setTitle() ва setSubtitle() истифода бурда меешавад. 
 package com.example.user.myapplication; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.widget.TextView; 
 import android.support.v.widget.Toolbar; 
 public class MainActivity extends AppCompatActivity { 
 private Toolbar toolbar; 
 private TextView txt; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 toolbar = findViewById(R.id.toolbar); 
 toolbar.setTitle("Сарлавҳа"); 
 toolbar.setSubtitle("Зерсарлавҳа"); 
 txt=(TextView)findViewById(R.id.textView); 
 setSupportActionBar(toolbar); 
 } 
 } 
 Натиҷаи барнома: 
 Барои иловакунии нишона ба панели асбобҳо бошад, аз методи 
 toolbar.setLogo(R.drawable.android) истифода бурда мешавад. Дар ин ҷо ба сифати
 нишона метавон дилхоҳ расми png-ро ки андозаи хурд дошта бошад, истифода 
 кард. 
 Барои дар тарафи рости панели асбобҳо нишон додани меню методи 
 onCreateOptionsMenu ба сурати зерин даъват карда мешавад: 
 @Override 
 public boolean onCreateOptionsMenu(Menu menu) 
 { 
 MenuInflater inflater = getMenuInflater(); 
 inflater.inflate(R.menu.menu_main, menu); 
 return true; 
 } 
 Барои гузоштани тугмача ба панели асбобҳо чунин рафтор мекунем: 
 Аз сомонаи https://material.io/icons/ нишонаи лозимиро ба даст оварда
 (барои ин мисол нишонаи search), ба папкаи drawable нусхабардорӣ мекунем.
 Истифодаи нишонаҳои ин сайтро барои барномаҳои Android ширкати Google 
 маслиҳат медиҳад. 
 Пас аз ин, папкаи menu сохта, дар дохили он бо номи menu_main.xml файли
 меню месозем, ки мӯҳтавои он чунин аст: 
 <?xml version="." encoding="utf-"?> 
 <menu xmlns:android="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto"> 
 <item 
 android:id="@+id/action_search" 
 app:showAsAction="always" 
 android:icon="@drawable/search" 
 android:title="@string/search_hint"/> 
 </menu> 
 Акнун барои нишон додани меню дар Activity методи onCreateOp- 
 tionsMenu-ро даъват мекунем. Ин амал пас аз даъвати 
 setSupportActionBar(toolbar) имконпазир мегардад. 
 package com.example.user.myapplication; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.Menu; 
 import android.widget.TextView; 
 import android.support.v.widget.Toolbar; 
 public class MainActivity extends AppCompatActivity { 
 private Toolbar toolbar; 
 private TextView txt; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 toolbar = findViewById(R.id.toolbar); 
 toolbar.setLogo(R.drawable.android); 
 toolbar.setTitle("Сарлавҳа"); 
 toolbar.setSubtitle("Зерсарлавҳа"); 
 txt=(TextView)findViewById(R.id.textView); 
 setSupportActionBar(toolbar); 
 } 
 @Override 
 public boolean onCreateOptionsMenu(Menu menu) { 
 getMenuInflater().inflate(R.menu.menu_main, menu); 
 return true; 
 } 
 } 
 Натиҷаи барнома: 
 Барои илова намудани ягон ҳодиса, ҳангоми пахш намудани тугмачаи 
 search методи onOptionsItemSelected –ро даъват мекунем. 
 @Override 
 public boolean onOptionsItemSelected(MenuItem item) { 
 if(item.getItemId() == R.id.action_search) { 
 txt.setText("Тугмачаи search пахш карда шуд."); 
 } 
 return true; 
 } 
 } 
 Матни пурраи барнома шакли зеринро мегирад: 
 package com.example.user.myapplication; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.Menu; 
 import android.widget.TextView; 
 import android.support.v.widget.Toolbar; 
 import android.view.MenuItem; 
 public class MainActivity extends AppCompatActivity { 
 private Toolbar toolbar; 
 private TextView txt; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 toolbar = findViewById(R.id.toolbar); 
 toolbar.setLogo(R.drawable.android); 
 toolbar.setTitle("Сарлавҳа"); 
 toolbar.setSubtitle("Зерсарлавҳа"); 
 txt=(TextView)findViewById(R.id.textView); 
 setSupportActionBar(toolbar); 
 } 
 @Override 
 public boolean onCreateOptionsMenu(Menu menu) { 
 getMenuInflater().inflate(R.menu.menu_main, menu); 
 return true; 
 } 
 @Override 
 public boolean onOptionsItemSelected(MenuItem item) { 
 if(item.getItemId() == R.id.action_search) { 
 txt.setText("Тугмачаи search пахш карда шуд."); 
 } 
 return true; 
 } 
 } 
 Натиҷаи барнома: 
 Барои дар панели асбобҳо ҳамроҳ намудани тугмачаи ба қафо, пас аз 
 даъвати методи setSupportActionBar(toolbar) фармонҳои зерин навишта 
 мешаванд: 
 getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
 getSupportActionBar().setDisplayShowHomeEnabled(true); 
 Барои навиштани ҳодиса ба тугмачаи ба қафо, методи 
 onOptionsItemSelected ба сурати зерин даъват карда мешавад: 
 @Override 
 public boolean onOptionsItemSelected(MenuItem item) 
 { 
 if (item.getItemId() == android.R.id.home) { 
 finish(); 
 } 
 return super.onOptionsItemSelected(item); 
 } 
 Барои ба саҳифаи дигар гузаштан ҳангоми пахши тугмачаи ба қафо барои
 toolbar ҳодисаи зерин навишта мешаванд: 
 toolbar.setNavigationOnClickListener(new View.OnClickListener() 
 { 
 @Override 
 public void onClick(View v) 
 { 
 startActivity(new Intent(getApplicationContext(), 
 MainActivity.class)); 
 finish(); 
 } 
 }); 
 Барои илова намудани якчанд тугмача дар toolbar дар папкаи main_menu як
 банди нав барои меню илова мекунем: 
 <item 
 android:id="@+id/action_info" 
 app:showAsAction="always" 
 android:icon="@drawable/info" 
 tools:ignore="MenuTitle" /> 
 Ҳангоми иҷроиши барнома ба ғайр аз тугмачаи ҷустуҷӯ як тугмачаи дигар
 барои иттилоотрасонӣ пайдо мешавад. 
 Барои дастрас шудан ба ин тугмачаҳо ва навиштани ҳодиса барои онҳо 
 методи onOptionsItemSelected–ро ба сурати зерин даъват мекунем. 
 @Override 
 public boolean onOptionsItemSelected(MenuItem item) { 
 if(item.getItemId() == R.id.action_search) { 
 Toast toast = Toast.makeText(getApplicationContext(), 
 "Банди ҷустуҷӯ пахш карда шуд", Toast.LENGTH_SHORT); 
 toast.show(); 
 } 
 if (item.getItemId() == R.id.action_info) { 
 Toast toast = Toast.makeText(getApplicationContext(), "Банди 
 иттилоърасонӣ пахш карда шуд", Toast.LENGTH_SHORT); 
 toast.show(); 
 } 
 return true; 
 } 
 Дар барноманависӣ ҳолатҳое пеш меоянд, ки на аз як равзана (экран),
 балки аз якчанд равзана истифода карда мешавад. Яке аз ҳолатҳои одитарин 
 сохтани тугмачаи маълумотнома оиди муаллифи барнома ба ҳисоб меравад. 
 Барои пиёдасозии ин амалиёт ибтидо бо номи MyAppTwoProject як лоиҳа 
 месозем, ки дорои класси MainActivity мебошад. Тавре ки аз дарсҳои гузашта
 медонем, класси асосии лоиҳа меросгири класси AppCompatActivity мебошад. 
 Мӯҳтавои класси MainActivity.java пас аз сохтан шакли зеринро дорад:
 package com.example.user.myapptwoproject; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 } 
 } 
 Агар аз папкаи res/layout файли activity_main.xml-ро кушоем мӯҳтавои он
 шакли зеринро мегирад: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <TextView 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Hello World!" 
 app:layout_constraintBottom_toBottomOf="parent" 
 app:layout_constraintLeft_toLeftOf="parent" 
 app:layout_constraintRight_toRightOf="parent" 
 app:layout_constraintTop_toTopOf="parent" /> 
 </android.support.constraint.ConstraintLayout> 
 Тавре ки дида мешавад, дар ин activity виджети TextView ҷойгир аст, ба
 сифати матн дар он ба таври пешфарзӣ сатри "Hello World!" бахшида шудааст.
 Барои иваз кардани матни дохили он метавон аз аз хосияти Text-и ин виджет
 истифода кард ва ё метавон манбаи худро сохт. Барои сохтани ресурс файли 
 res/values/strings.xml ро кушода дар дохили он сатри зеринро илова мекунем.
 <string name="first_activity_text"> Activity нахустин</string> 
 Пас аз иҷрои ин амал, сатри охирони виджети мазкурро ба шакли зерин 
 тағйир медиҳем. 
 android:text="@string/first_activity_text" 
 Акнун бо номи second_activity.xml дар папкаи res/layout XML-файл 
 месозем. Барои сохтани файли мазкур аз фармонҳои зерин истифода мебарем. 
 Папкаи layout -> т.р. муш->New -> Layout resource file->File Name= 
 mysecond_activity->Ok. 
 Пас аз сохтан мӯҳтавои файли mysecond_activity.xml чунин аст: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout 
 xmlns:android="http://schemas.android.com/apk/res/android" an- 
 droid:layout_width="match_parent" 
 android:layout_height="match_parent"> 
 </android.support.constraint.ConstraintLayout> 
 Акнун дар ҳарду activity яктогӣ тугмачаи фармонӣ (Button) ҳамроҳ 
 мекунем. 
 Файли main_activity.xml: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:orientation="vertical" 
 tools:layout_editor_absoluteX="dp" 
 tools:layout_editor_absoluteY="dp" 
 tools:ignore="MissingConstraints"> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:inputType="textPersonName" 
 android:text=" Формаи якум" /> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:text="Маълумоти бештар" 
 tools:ignore="MissingConstraints" 
 tools:layout_editor_absoluteX="dp" 
 tools:layout_editor_absoluteY="dp" /> 
 </LinearLayout> 
 </android.support.constraint.ConstraintLayout> 
 Файли mysecond_activity.xml: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 xmlns:app="http://schemas.android.com/apk/res-auto"> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:orientation="vertical" 
 tools:layout_editor_absoluteX="dp" 
 tools:layout_editor_absoluteY="dp" 
 tools:ignore="MissingConstraints"> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:inputType="textPersonName" 
 android:text=" Формаи дуюм" /> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:text="Саҳифаи аслӣ" 
 tools:ignore="MissingConstraints" 
 tools:layout_editor_absoluteX="dp" 
 tools:layout_editor_absoluteY="dp" /> 
 </LinearLayout> 
 </android.support.constraint.ConstraintLayout> 
 Масъалаи сохтани форма пурра ҳал шуд акнун класси SecondActivity.java –
 ро месозем. Барои иҷрои ин амал интихоби папкаи Java ->New->Class->Name= 
 SecondActivity->Ok. 
 Дар ибтидо класс холӣ мебошад. Класс бояд меросгирӣ класси Activity 
 бошад. Барои ин пас аз номи класс extends Activity менависем. Дар ин класс бояд
 методи onCreate() мавҷуд бошад. Ин методро метавон дастӣ навишт ва ё курсорро
 дар ибтидои класс монда аз менюи Code амали Override Method…-> 
 onCreate(Bundle savedInstanceState)->Finish –ро иҷро кард. 
 Дар натиҷа класси мавриди назар сохта мешавад. Пас аз иҷрои ин амал,
 мӯҳтавои класси мазкур шакли зеринро мегирад: 
 import android.os.Bundle; 
 import android.support.annotation.Nullable; 
 import android.support.v.app.AppCompatActivity; 
 import com.example.user.myapptwoproject.R; 
 public class SecondActivity extends AppCompatActivity 
 { 
 @Override 
 protected void onCreate(@Nullable Bundle savedInstanceState) 
 { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.mysecond_activity); 
 } 
 } 
 Акнун масъалаи асосиро мавриди баҳс қарор медиҳем. Барои аз як форм 
 ба форми дигар гузаштан барои тугмачаи фармонии форми якум ҳодиса месо- 
 зем. 
 package com.example.user.myapptwoproject; 
 import android.content.Intent; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.View; 
 import android.widget.Button; 
 public class MainActivity extends AppCompatActivity 
 { 
 Button btn; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) 
 { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 btn=(Button) findViewById(R.id.button); 
 btn.setOnClickListener(new View.OnClickListener() 
 { 
 @Override 
 public void onClick(View v) 
 { 
 Intent intent = new Intent(MainActivity.this, 
 SecondActivity.class); 
 startActivity(intent); 
 } 
 }); 
 } 
 } 
 Агар хоҳем, ки барномаро иҷро кунем, он кор намекунад. Сабабаш дар он
 аст, ки Activity сохтаамон дар AndroidManifest.xml қайд карда нашудааст. Барои
 дар AndroidManifest.xml сабти ном кардани Activity сохташуда, ибтидо онро
 кушода дар дохили он фармонҳои зеринро менависем. 
 <activity android:name=".SecondActivity"> 
 </activity> 
 Акнун барои аз форми дуюм ба формаи аввал гузаштан ҳодисаи дар класси
 MainActivity навишташударо ба класси SecondActivity нусхабардорӣ карда, ҷойи
 параметрҳои конструктори Intent-ро иваз мекунем. Дар натиҷа класси SecondAc-
 tivity шакли зеринро мегирад. 
 package com.example.user.myapptwoproject; 
 import android.content.Intent; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.View; 
 import android.widget.Button; 
 public class MainActivity extends AppCompatActivity { 
 Button btn; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 btn=(Button) findViewById(R.id.button); 
 btn.setOnClickListener(new View.OnClickListener() 
 { 
 @Override 
 public void onClick(View v) 
 { 
 Intent intent = new Intent(MainActivity.this, 
 SecondActivity.class); 
 startActivity(intent); 
 } 
 }); 
 } 
 } 
 Акнун масъалаи равон кардани ягон иттилоотро аз Activity якум ба Activity
 дуюм дида мебароем. Барои ин дар ҳарду Activity-ҳо дутогӣ TextView мегузорем.
 Сипас барои равон кардани иттилоот аз методи putExtra истифода бурда мешавад,
 ки дорои ду параметр: шакли калид ва қимат мебошад. 
 intent.putExtra("Калид", "Кимат"); 
 Activity-и қабулкунанда бояд яке аз методҳои getIntExtra() ё getStringExtra()
 -ро барои ба даст овардани иттилоот тавассути методи putExtra() 
 равонкардашуда, даъват кунад. 
 int count = getIntent().getIntExtra("Калид", ); 
 Мӯҳтавои Activity якумро ба сурати зерин табдил медиҳем: 
 package com.example.user.myapptwoproject; 
 import android.content.Intent; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.View; 
 import android.widget.Button; 
 import android.widget.EditText; 
 public class MainActivity extends AppCompatActivity { 
 Button btn; 
 EditText ed; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 ed=(EditText)findViewById(R.id.editText); 
 btn=(Button) findViewById(R.id.button); 
 btn.setOnClickListener(new View.OnClickListener(){ 
 @Override 
 public void onClick(View v) { 
 Intent intent = new Intent(MainActivity.this, 
 SecondActivity.class); 
 // Дар калиди mytxt матнеро аз майдони матнии якум мебахшем 
 intent.putExtra("mytxt", ed.getText().toString()); 
 startActivity(intent); 
 } 
 }); 
 } 
 } 
 Акнун барои аз Activity дуюм қабул кардани иттилооти равон кардашуда,
 дар ҳодисаи onCreate фармонҳои зеринро менависем: 
 package com.example.user.myapptwoproject; 
 import android.content.Intent; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.widget.Button; 
 import android.widget.EditText; 
 public class SecondActivity extends AppCompatActivity { 
 private Button btn; 
 private EditText ed; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.mysecond_activity); 
 ed=(EditText)findViewById(R.id.editText); 
 btn = (Button) findViewById(R.id.button); 
 String txt = getIntent().getExtras().getString("mytxt"); 
 ed.setText(txt); 
 btn.setOnClickListener(new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 Intent intent = new Intent(SecondActivity.this, 
 MainActivity.class); 
 startActivity(intent); 
 } 
 }); 
 } 
 } 
 Ба ғайр аз иттилооти равонкардашуда, инчунин метавон элементҳои як 
 массивро аз як активитӣ ба активитии дигар равон кард. Барои иҷрои ин амал
 мӯҳтавои файли қолаби асосиро ба сурати зерин тағйир медиҳем: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 xmlns:app="http://schemas.android.com/apk/res-auto"> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical"> 
 <ListView 
 android:id="@+id/listView" 
 android:layout_width="match_parent" 
 android:layout_height="dp"> 
 </ListView> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:text="Саҳифаи аслӣ" 
 tools:ignore="MissingConstraints" 
 tools:layout_editor_absoluteX="dp" 
 tools:layout_editor_absoluteY="dp" /> 
 </LinearLayout> 
 </android.support.constraint.ConstraintLayout> 
 Файлҳои Java-и активитиҳоро бошад ба сурати зерин омода мекунем: 
 package com.example.user.myapptwoproject; 
 import android.content.Intent; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.View; 
 import android.widget.Button; 
 import android.widget.EditText; 
 public class MainActivity extends AppCompatActivity { 
 Button btn; 
 EditText ed; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 final String [] mas={"Ali", "Vali", "Karim"}; 
 btn=(Button) findViewById(R.id.button); 
 btn.setOnClickListener(new View.OnClickListener(){ 
 @Override 
 public void onClick(View v) { 
 Bundle b=new Bundle(); 
 b.putStringArray("myarr",mas); 
 Intent activ=new Intent(MainActivity.this, 
 SecondActivity.class); 
 activ.putExtras(b); 
 startActivity(activ); 
 } 
 }); 
 } 
 } 
 Тавре ки дида мешавад, дар ин ҷо ибтидо бо номи mas массиви сатри 
 муаррифӣ карда шуда, сипас дар дохили методи onClick() тавассути методи 
 putStringArray() элементҳои массив муаррифӣ карда шуда ба объекти типи Bundle
 бахшида шудаанд. Пас аз ин объекти мазкур ба сифати параметри методи 
 putExtras() истифода шудааст. 
 Саҳифаи дуюм: 
 package com.example.user.myapptwoproject; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.widget.ArrayAdapter; 
 import android.widget.Button; 
 import android.widget.EditText; 
 import android.widget.ListView; 
 public class SecondActivity extends AppCompatActivity { 
 private Button btn; 
 private EditText ed; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.mysecond_activity); 
 Bundle b=this.getIntent().getExtras(); 
 String[] myarr=b.getStringArray("myarr"); 
 ListView lvMain = (ListView) findViewById(R.id.listView); 
 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
 android.R.layout.simple_list_item_, myarr); 
 lvMain.setAdapter(adapter); 
 } 
 } 
 Дар ин ҷо ибтидо объекти типи Bundle сохта шуда, ба сифати қимати 
 ибтидоӣ ба он массиви равонкардашуда бо истифода аз методҳои 
 this.getIntent().getExtras() бахшида шудааст. Пас аз ин, массиви сатрӣ бо номи
 myarr муаррифӣ карда шуда, иттилооти равонкардашуда аз объекти типи Bundle
 тавассути методи getStringArray() ба он бахшида шудаанд. Қадами навбати 
 массиви ба даст омада дар ListView хориҷ карда шудааст. 
 Ҳоло мисолеро дида мебароем, ки дар он усули сохтани маълумотнома 
 (китоби электронӣ) нишон дода шудааст. 
 Барои иҷрои ин амал, ду файли меню drawer_main.xml (менюи асосӣ), 
 menu_actionbar (меню барои тугмачаи маълумот) ва ду саҳифа бо номҳои 
 MainActivity ва SecondActivity месозем. 
 Мӯҳтавои файли drawer_main.xml. 
 <?xml version="." encoding="utf-"?> 
 <menu xmlns:tools="http://schemas.android.com/tools" 
 xmlns:android="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto"> 
 <group android:checkableBehavior="single"> 
 <item android:id="@+id/like" 
 android:icon="@drawable/like" 
 app:actionViewClass="android.widget.TextView" 
 android:title="@string/like_title"/> 
 <item android:id="@+id/share" 
 android:icon="@drawable/share" 
 app:actionViewClass="android.widget.TextView" 
 android:title="@string/share_title"/> 
 <item android:id="@+id/info" 
 android:icon="@drawable/info" 
 android:title="@string/about_title"/> 
 </group> 
 <item android:id="@+id/exit" 
 android:icon="@drawable/exit" 
 android:title="@string/exit_title"/> 
 </menu> 
 Мӯҳтавои файли menu_actionbar 
 <?xml version="." encoding="utf-"?> 
 <menu xmlns:tools="http://schemas.android.com/tools" 
 xmlns:android="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto"> 
 <item android:id="@+id/info" 
 android:icon="@drawable/info" 
 app:showAsAction="collapseActionView|ifRoom" 
 tools:ignore="MenuTitle" /> 
 </menu> 
 Мӯҳтавои файли activity_main 
 <?xml version="." encoding="utf-"?> 
 <android.support.v.widget.DrawerLayout xmlns:android="http://sche- 
 mas.android.com/apk/res/android" 
 xmlns:tools="http://schemas.android.com/tools" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 android:id="@+id/activity_main" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent"> 
 <RelativeLayout 
 android:layout_width="match_parent" 
 android:layout_height="match_parent"> 
 <ListView 
 android:id="@+id/listView" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:divider="@color/reddivider" 
 android:cacheColorHint="@color/colorRed" 
 android:dividerHeight="@dimen/twodp" > 
 </ListView> 
 </RelativeLayout> 
 <android.support.design.widget.NavigationView 
 android:layout_width="wrap_content" 
 android:layout_height="match_parent" 
 app:menu="@menu/drawer_view" 
 android:layout_gravity="start" 
 app:headerLayout="@layout/nav_header" 
 android:background="@color/colorMenu" 
 app:itemIconTint="@color/colorRed" 
 android:id="@+id/nv"> 
 </android.support.design.widget.NavigationView> 
 </android.support.v.widget.DrawerLayout> 
 Мӯҳтавои файли MainActivity 
 package com.example.user.myapplication; 
 import android.content.DialogInterface; 
 import android.content.Intent; 
 import android.graphics.Color; 
 import android.graphics.drawable.ColorDrawable; 
 import android.os.Bundle; 
 import android.support.annotation.NonNull; 
 import android.support.design.widget.NavigationView; 
 import android.support.v.widget.DrawerLayout; 
 import android.support.v.app.ActionBar; 
 import android.support.v.app.ActionBarDrawerToggle; 
 import android.support.v.app.AlertDialog; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.Menu; 
 import android.view.MenuInflater; 
 import android.view.MenuItem; 
 import android.view.View; 
 import android.widget.AdapterView; 
 import android.widget.ArrayAdapter; 
 import android.widget.Button; 
 import android.widget.ListView; 
 import android.widget.TextView; 
 import android.widget.Toast; 
 public class MainActivity extends AppCompatActivity { 
 Button btn; 
 private DrawerLayout dl; 
 private ActionBarDrawerToggle t; 
 private NavigationView nv; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 //Иваз кардани ранги заминаи ActionBar 
 ActionBar actionBar = getSupportActionBar(); 
 actionBar.setBackgroundDrawable(new ColorDrawable 
 (Color.CYAN)); 
 dl = (DrawerLayout)findViewById(R.id.activity_main); 
 t = new ActionBarDrawerToggle(this, dl,R.string.Open, 
 R.string.Close); 
 dl.addDrawerListener(t); 
 t.syncState(); 
 getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
 nv = (NavigationView)findViewById(R.id.nv); 
 nv.setNavigationItemSelectedListener(new NavigationView. 
 nNavigationItemSelectedListener() { 
 @Override 
 public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
 int id = item.getItemId(); 
 if (id==R.id.share) 
 Toast.makeText(MainActivity.this, "Like интихоб 
 карда шуд.", Toast.LENGTH_SHORT).show(); 
 if (id==R.id.share){ 
 Intent intent=new Intent(Intent.ACTION_SEND); 
 intent.setType("plain/text"); 
 String textToSend="Барномаи панду андарзи 
 бузургон беҳтарин барнома мебошад, аз он истифода 
 баред."; 
 intent.putExtra(Intent.EXTRA_TEXT, textToSend); 
 try{ 
 startActivity(Intent.createChooser(intent,"Даъватнома")); 
 }catch (android.content.ActivityNotFoundException ex) { 
 Toast.makeText(getApplicationContext(), "Error", 
 Toast.LENGTH_SHORT).show(); 
 } 
 } 
 if (id==R.id.info) { 
 Toast.makeText(MainActivity.this, "Ин барнома 
 барои намуна сохта шудааст.", 
 Toast.LENGTH_SHORT).show(); 
 } 
 if (id==R.id.exit){ 
 final AlertDialog.Builder builder = new AlertDialog. 
 Builder(MainActivity.this); 
 builder.setTitle("Баромад"); 
 builder.setMessage("Шумо мехоҳед, аз барнома 
 бароед?"); 
 builder.setPositiveButton("Ҳа!", 
 new DialogInterface.OnClickListener() { 
 @Override 
 public void onClick(DialogInterface 
 dialogInterface, int i){ 
 finish(); 
 } 
 }); 
 builder.setNegativeButton("Не!", new DialogInterface. 
 OnClickListener() { 
 @Override 
 public void onClick(DialogInterface dialogInterface, 
 int i){ 
 dialogInterface.dismiss(); 
 } 
 }); 
 AlertDialog dialog = builder.create(); 
 dialog.show(); 
 } 
 return true; 
 } 
 }); 
 ListView listView = (ListView)findViewById(R.id.listView); 
 String[] pandiBuzurgon = getResources().getStringArray 
 (R.array.pandi_buzurgon); 
 ArrayAdapter<String> adapter = new ArrayAdapter<>(this, 
 android.R.layout.simple_list_item_, pandiBuzurgon); 
 ArrayAdapter<String> adapter = new ArrayAdapter 
 <String>(this,R.layout.my_list_item, pandiBuzurgon); 
 listView.setAdapter(adapter); 
 //Ранги хати байни сатрҳо 
 ColorDrawable divcolor = new ColorDrawable(Color.RED); 
 listView.setDivider(divcolor); 
 listView.setDividerHeight(); 
 listView.setOnItemClickListener(new AdapterView. 
 OnItemClickListener() { 
 @Override 
 public void onItemClick(AdapterView<?> parent, 
 View itemClicked, int position, long id) { 
 TextView textView = (TextView) itemClicked; 
 //Ба даст овардани сатр аз манба 
 String strText = "A"+(String.valueOf(position)); 
 Intent intent = new Intent(MainActivity.this, 
 SecondActivity.class); 
 intent.putExtra("mytxt", strText.toString()); 
 startActivity(intent); 
 } 
 }); 
 } 
 @Override 
 public boolean onCreateOptionsMenu(Menu menu) { 
 MenuInflater inflater = getMenuInflater(); 
 inflater.inflate(R.menu.menu_actionbar, menu); 
 return true; 
 } 
 @Override 
 public boolean onOptionsItemSelected(MenuItem item) { 
 if (item.getItemId()==R.id.info){ 
 Toast.makeText(MainActivity.this, "Ин барнома барои 
 намуна сохта шудааст.", Toast.LENGTH_SHORT).show(); 
 return true; 
 } 
 else if(t.onOptionsItemSelected(item)) 
 return true; 
 return super.onOptionsItemSelected(item); 
 } 
 } 
 Дар ин ҷо дар банди менюи баромад аз равзанаи диалогии alertDialog 
 истифода шудааст. 
 Илова бар ин, барои таҳия намудани адаптери ArrayAdapter ибтидо дар 
 папкаи layout бо номи my_list_item файли манба сохта шудаааст,ки мӯҳтавои он
 чунин аст: 
 <?xml version="." encoding="utf-"?> 
 <TextView 
 xmlns:android="http://schemas.android.com/apk/res/android" 
 android:id="@+id/textView" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:gravity="center_horizontal" 
 android:padding="dp" 
 android:text="TextView" 
 android:textColor="#d" 
 android:textSize="sp"> 
 </TextView> 
 Мӯҳтавои файли activity_second: 
 <?xml version="." encoding="utf-"?> 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 xmlns:tools="http://schemas.android.com/tools" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 android:id="@+id/activity_main" 
 android:layout_width="match_parent" 
 android:background="@drawable/list" 
 android:layout_height="match_parent"> 
 <RelativeLayout 
 android:layout_width="match_parent" 
 android:layout_height="match_parent"> 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_alignParentStart="true" 
 android:layout_alignParentTop="true" 
 android:layout_marginStart="dp" 
 android:layout_marginTop="dp" 
 android:layout_marginEnd="dp" 
 android:layout_marginBottom="dp" 
 android:lineSpacingMultiplier="." 
 android:textSize="sp" 
 android:textColor="@color/colorPrimary" 
 android:textStyle="bold" /> 
 <android.support.design.widget.FloatingActionButton 
 android:id="@+id/fab" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_alignParentBottom="true" 
 android:layout_alignParentEnd="true" 
 android:layout_gravity="bottom|right" 
 android:layout_marginBottom="dp" 
 android:layout_marginEnd="dp" 
 app:backgroundTint="@color/colorRed" 
 android:src="@drawable/share" /> 
 </RelativeLayout> 
 </LinearLayout> 
 Мӯҳтавои файли SecondActivity: 
 package com.example.user.myapplication; 
 import android.content.Intent; 
 import android.graphics.Color; 
 import android.graphics.Typeface; 
 import android.support.annotation.NonNull; 
 import android.support.design.widget.FloatingActionButton; 
 import android.support.design.widget.NavigationView; 
 import android.support.design.widget.Snackbar; 
 import android.support.v.view.GravityCompat; 
 import android.support.v.view.MenuItemCompat; 
 import android.support.v.widget.DrawerLayout; 
 import android.support.v.app.ActionBar; 
 import android.support.v.app.ActionBarDrawerToggle; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.Gravity; 
 import android.view.MenuItem; 
 import android.view.View; 
 import android.widget.TextView; 
 import android.widget.Toast; 
 public class SecondActivity extends AppCompatActivity { 
 TextView textInfo; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.second_activity); 
 textInfo=(TextView) findViewById(R.id.textView); 
 ActionBar actionBar = getSupportActionBar(); 
 actionBar.setHomeButtonEnabled(true); 
 actionBar.setDisplayHomeAsUpEnabled(true); 
 actionBar.setTitle("Саҳифаи дуюм"); 
 String txt = getIntent().getExtras().getString("mytxt"); 
 int strId=getResources().getIdentifier(txt,"string",get- 
 PackageName()); 
 if (strId!=) 
 textInfo.setText(getString(strId)); 
 FloatingActionButton fab = findViewById(R.id.fab); 
 fab.setOnClickListener(new View.OnClickListener() { 
 @Override 
 public void onClick(View view) { 
 Intent sharingIntent = new Intent(android.content.Intent. 
 ACTION_SEND); 
 sharingIntent.setType("text/plain"); 
 String shareBody = textInfo.getText().toString(); 
 sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, 
 "Порае аз барномаи панду андарзҳои бузургон"); 
 sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, 
 shareBody); 
 startActivity(Intent.createChooser(sharingIntent, 
 "Равон кардан.")); 
 } 
 }); 
 } 
 @Override 
 public boolean onOptionsItemSelected(MenuItem item) { 
 switch (item.getItemId()) { 
 case android.R.id.home: { 
 Intent intent = new Intent(SecondActivity.this, 
 MainActivity.class); 
 startActivity(intent); 
 return true; 
 } 
 default: 
 return super.onOptionsItemSelected(item); 
 } 
 } 
 } 
 Мӯҳтавои файли string.xml: 
 <resources> 
 <string name="app_name">Панду андарзҳои бузургон</string> 
 <string name="like_title">Баҳо диҳед</string> 
 <string name="share_title">Даъвати дӯстон</string> 
 <string name="about_title">Оиди барнома</string> 
 <string name="exit_title">Баромад</string> 
 <string name="Open">Кушодан</string> 
 <string name="Close">Пӯшидан</string> 
 <string name="inf_menu">Панду андарзҳои бузургон</string> 
 <string-array name="pandi_buzurgon"> 
 <item>Тамаъкорӣ ва хушомадгӯӣ</item> 
 <item>Суду зиёни забон</item> 
 <item>Мардумозорӣ</item> 
 <item>Раҳм бар золимон</item> 
 <item>Зарари ғайбат</item> 
 <item>Хислатҳои ҳамидаи инсон</item> 
 <item>Меҳрубонӣ бо волидайн</item> 
 <item>Эҳтироми калонсолон</item> 
 <item>Ҷангу нифоқ</item> 
 <item>Кибру ғурур</item> 
 <item>Кинаву адоват</item> 
 <item>Ҷаҳлу нодонӣ</item> 
 <item>Дӯстиву садоқат</item> 
 </string-array> 
 <string name="A"> 
 Худро чу соя дар таҳи деворҳо макун,\n 
 Дилро чароғи гӯшаи мотамсаро макун!\n 
 Паҳлӯ бар остонаи навдавлатон манеҳ,\n 
 Аз нохуни паланг ба худ муттако макун!\n 
 Дасти ҳавас зи неъмати алвон кашида дор,\n 
 Бар хони халқ пайравии иштиҳо макун.\n 
 Силӣ хӯрӣ ба рӯи худ аз сар-сари хазон,\n 
 Дар боғи даҳр сина чу гул бар ҳаво макун.\n 
 Оби бақо зи соғари фағфури Чин махоҳ,\n 
 Чашми тамаъ ба косаи дасти гадо макун. 
 </string> 
 <string name="A"> 
 Ин забон чун сангу ҳам оҳанваш аст,\n 
 В-он чӣ биҷҳад аз забон, чун оташ аст.\n 
 Сангу оҳанро мазан барҳам газоф,\n 
 Гаҳ зи рӯйи нақлу гаҳ аз рӯйи лоф. \n 
 З-он ки торик асту ҳар сӯ пунбазор,\n 
 Дар миёни пунба чун бошад шарор?\n 
 Золим он қавме, ки чашмон дӯхтанд,\n 
 З-он суханҳо оламеро сӯхтанд. \n 
 Оламеро як сухан вайрон кунад,\n 
 Рӯбаҳони мурдаро шерон кунад. 
 </string>.... 
 </resources> 
 Натиҷаи барнома чунин аст: 
 Дар ин ҷо агар нишонаи се хатакро аз қисми чапи болоии экран пахш 
 кунем, менюи асосии барнома ба сурати зерин кушода мешавад. 
 Ҳангоми пахш намудани ягон банд аз барномаи асосӣ панду андарзи ба он
 вобаста дар саҳифаи нав пайдо мешавад. Масалан, агар сатри дуюм пахш карда
 шавад. Он гоҳ чунин натиҷа ба даст меояд: 
 Дар конференсияи GoogleI/O барои сохтани ҳамоҳанги усули нав бо 
 истифода аз android.support.v.widget.DrawerLayout пешниҳод гардид. 
 DrawerLayout дар таркиби китобхонаи Support Library v (release ) мавҷуд
 мебошад. Китобхонаи мазкур моҳи майи соли пайдо гардидааст, ки дар 
 таркиби Android Studio ба таври пешфарз мавҷуд мебошад. 
 Агар китобхонаи мазкурро ба таври дастӣ дар лоиҳа илова кардани бошед,
 зарур аст, ки дар файли build.gradle фармонҳои зеринро нависед. 
 dependencies { 
 compile ’com.android.support:appcompat-v:..’ 
 } 
 Ҳоло истифодаи ин элементро бо мисоли содае дида мебароем. 
 Лоиҳаи нави Android Studio, ки NavigationDrawer ном дорад, бо истифода
 аз қолаби Empty Activity месозем. Дар файли қолаби он як элементи 
 NavigationView мегузорем. Дар натиҷа мӯҳтавои файли activity_main.xml шакли
 зеринро мегирад (Онро ба чунин шакл меорем). 
 <?xml version="." encoding="utf-"?> 
 <android.support.v.widget.DrawerLayout xmlns:android="http://sche- 
 mas.android.com/apk/res/android" 
 xmlns:tools="http://schemas.android.com/tools" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 android:id="@+id/activity_main" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:background="@android:color/holo_green_dark"> 
 <RelativeLayout 
 android:layout_width="match_parent" 
 android:layout_height="match_parent"> 
 <TextView 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Main" 
 android:textSize="dp" 
 android:id="@+id/textView" 
 android:layout_marginTop="dp" 
 android:layout_marginLeft="dp"/> 
 </RelativeLayout> 
 <android.support.design.widget.NavigationView 
 android:layout_width="wrap_content" 
 android:layout_height="match_parent" 
 app:menu="@menu/drawer_view" 
 android:layout_gravity="start" 
 app:headerLayout="@layout/nav_header" 
 android:background="@color/colorMenu" 
 android:id="@+id/nv"> 
 </android.support.design.widget.NavigationView> 
 </android.support.v.widget.DrawerLayout> 
 Менюи кушодашаванда аз ду қисм: қисми болоӣ ва поёнӣ иборат мебошад.
 Барои қисми болоӣ дар папкаи res бо номи nav_header.xml файли манба месозем,
 ки мӯҳтавои он чунин аст: 
 <?xml version="." encoding="utf-"?> 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:orientation="vertical" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:gravity="center" 
 android:background="@color/colorHeader"> 
 <ImageView 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:layout_marginBottom="dp" 
 android:layout_marginTop="dp" 
 android:background="@drawable/parcham"/> 
 </LinearLayout> 
 Барои қисми поёнӣ бошад, як папкаи menu сохта, сипас бо номи 
 navigation_menu.xml як файл месозем, ки мӯҳтавои ба шакли зер аст: 
 <?xml version="." encoding="utf-"?> 
 <menu xmlns:android="http://schemas.android.com/apk/res/android"> 
 <item android:id="@+id/camera" 
 android:icon="@drawable/camera" 
 android:title="@string/camera_title"/> 
 <item android:id="@+id/gallery" 
 android:icon="@drawable/gallery" 
 android:title="@string/gallery_title"/> 
 <item android:id="@+id/slideshow" 
 android:icon="@drawable/slideshow" 
 android:title="@string/slideshow_title"/> 
 </menu> 
 Дар ин ҷо, файлҳои тасвирии лозимиро аз сомонаи https://icons.com/icon/
 боргузорӣ карда, дар пакаи drawable мегузорем. 
 Акнун дар файли Java методҳои onNavigationItemSelected ва 
 onOptionsItemSelected –ро даъват мекунем: 
 package com.example.user.myapplication; 
 import android.support.annotation.NonNull; 
 import android.support.design.widget.NavigationView; 
 import android.support.v.widget.DrawerLayout; 
 import android.support.v.app.ActionBarDrawerToggle; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.MenuItem; 
 import android.widget.Toast; 
 public class MainActivity extends AppCompatActivity { 
 private DrawerLayout dl; 
 private ActionBarDrawerToggle t; 
 private NavigationView nv; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 dl = (DrawerLayout)findViewById(R.id.activity_main); 
 t = new ActionBarDrawerToggle(this, dl,R.string.Open, 
 R.string.Close); 
 dl.addDrawerListener(t); 
 t.syncState(); 
 getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
 nv = (NavigationView)findViewById(R.id.nv); 
 nv.setNavigationItemSelectedListener(new NavigationView.On- 
 NavigationItemSelectedListener() { 
 @Override 
 public boolean onNavigationItemSelected(@NonNull 
 MenuItem item) { 
 int id = item.getItemId(); 
 if (id==R.id.camera) 
 Toast.makeText(MainActivity.this, "Камера интихоб карда 
 шуд.", Toast.LENGTH_SHORT).show(); 
 if (id==R.id.gallery) 
 Toast.makeText(MainActivity.this, "Нигористон интихоб 
 карда шуд.", Toast.LENGTH_SHORT).show(); 
 if (id==R.id.slideshow) 
 Toast.makeText(MainActivity.this, "Слайдҳо интихоб 
 карда шуд.", Toast.LENGTH_SHORT).show(); 
 return true; 
 } 
 }); 
 } 
 @Override 
 public boolean onOptionsItemSelected(MenuItem item) { 
 if(t.onOptionsItemSelected(item)) 
 return true; 
 return super.onOptionsItemSelected(item); 
 } 
 } 
 Дар ин ҷо аз ActionBarDrawerToggle истифода шудааст, ки барои ба таври
 қулай алоқамандкунии функсионалии DrawerLayout дар рамкаи ActionBar 
 истифода мешавад. 
 Натиҷаи барнома ба сурати зер аст: 
 Агар аз кунҷи чапи болоии экран нишонаи се хатакро пахш кунем, шакли
 зерин ҳосил мешавад. 
 Ба ҳамин монанд, метавон дар қисми болоӣ ва поёнии менюи 
 пайдошаванда элементҳои идоракунандаи дигар низ ҳамроҳ кард. 
 Масалан, дар файли nav_header.xml як элементи TextView илова мекунем.
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:textSize="sp" 
 android:textAlignment="center" 
 android:text="@string/inf_menu" /> 
 Агар барномаро иҷро кунем, шакли зеринро соҳиб мешавад: 
 Дар версияи.. имконияти иловакунии компонентҳои иловагӣ ба меню
 пайдо гардид. Барои илова намудани компонент ба меню дар папкаи layout файли
 нав бо номи nav_header_switch.xml-ро тартиб медиҳем: 
 <?xml version="." encoding="utf-"?> 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="horizontal"> 
 <android.support.v.widget.SwitchCompat 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:text="Махфӣ кардан"/> 
 </LinearLayout> 
 Файли сохтаамонро ба меню ҳамроҳ мекунем, барои ин, банди нав месозем.
 <item 
 android:id="@+id/nav_switch" 
 app:actionLayout="@layout/nav_header_switch" 
 android:title=""/> 
 Барномаро иҷро мекунем, ки шакли зеринро мегирад: 
 Барои илова намудани шуморанда дар меню, файли 
 res/menu/activity_main_drawer.xml-ро кушода, дар он атрибути 
 app:actionViewClass="android.widget.TextView" –ро барои ягон банди меню, ма-
 салан gallery илова мекунем. 
 <item android:id="@+id/gallery" 
 android:icon="@drawable/gallery" 
 app:actionViewClass="android.widget.TextView" 
 android:title="@string/gallery_title"/> 
 Майдони матнӣ муаррифӣ карда, дар методи onCreate() ба он қимати ибти-
 доӣ мебахшем. 
 public class MainActivity extends AppCompatActivity { 
 private TextView mGalleryTextView;.... 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main);... 
 mGalleryTextView = (TextView) MenuItemCompat.getActionView 
 (nv.getMenu(). 
 findItem(R.id.gallery)); 
 mSlideshowTextView = (TextView) MenuItemCompat.getActionView 
 (nv.getMenu(). 
 findItem(R.id.slideshow)); 
 mGalleryTextView.setGravity(Gravity.CENTER_VERTICAL); 
 mGalleryTextView.setTypeface(null, Typeface.BOLD); 
 mGalleryTextView.setTextColor(Color.RED); 
 mGalleryTextView.setText("+"); 
 } 
 Барномаро иҷро мекунем, ки натиҷаи зерин ба даст меояд: 
 Тавре ки аз ин расм дида мешавад, ҳангоми кушодани меню заминаи 
 формаи асосӣ шакли тирарангро соҳиб мешавад, барои нест кардани ин торикӣ ё
 иваз намудани ранги ин торикӣ методи setScrimColor даъват карда мешавад. 
 dl.setScrimColor(Color.TRANSPARENT); 
 Барои ба гурӯҳҳо ҷудо намудани бандҳои меню аз теги group истифода 
 бурда мешавад. Ибтидо якчанд банди менюро дар дохили теги group гирифта, ду
 банди нав илова мекунем. 
 <?xml version="." encoding="utf-"?> 
 <menu xmlns:android="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto"> 
 <group android:checkableBehavior="single"> 
 <item android:id="@+id/camera" 
 android:icon="@drawable/camera" 
 app:actionViewClass="android.widget.TextView" 
 android:title="@string/camera_title"/> 
 <item android:id="@+id/gallery" 
 android:icon="@drawable/gallery" 
 app:actionViewClass="android.widget.TextView" 
 android:title="@string/gallery_title"/> 
 <item android:id="@+id/slideshow" 
 android:icon="@drawable/slideshow" 
 android:title="@string/slideshow_title"/> 
 </group> 
 <item android:title="Коммуникатсия"> 
 <menu> 
 <item 
 android:id="@+id/nav_share" 
 android:icon="@drawable/share" 
 android:title="Ба дигарон равон кардан" /> 
 <item 
 android:id="@+id/nav_search" 
 android:icon="@drawable/search" 
 android:title="Ҷустуҷӯ" /> 
 </menu> 
 </item> 
 <item 
 android:id="@+id/nav_switch" 
 app:actionLayout="@layout/nav_header_switch" 
 android:title=""/> 
 </menu> 
 Барномаро иҷро мекунем, ки шакли зеринро мегирад: 
 Барои ивазкунии ранги нишона ва матни он аз атрибутҳои app:itemIconTint
 ва app:itemTextColor истифода бурда мешавад. 
 <android.support.design.widget.NavigationView... 
 app:itemIconTint="@color/colorAccent" 
 app:itemTextColor="@color/colorPrimaryDark" 
 android:id="@+id/nv"> 
 </android.support.design.widget.NavigationView> 
 Атрибутҳои мазкур ба методҳои setItemIconTintList() ва setItemTextColor()-
 и компоненти NavigationView мувофиқ меоянд. 
 Натиҷаи барнома: 
 Ҳангоми иҷроиши барнома, менюи кушодашаванда махфӣ буда, бо пахш 
 намудани тугмаи се хатак аз қисми чапи болоии равзана, он кушода мешавад.
 Барои ба таври автоматӣ кушодани менюи мазкур методи openDrawer даъват 
 карда мешавад. 
 dl.openDrawer(GravityCompat.START); 
 Дар лоиҳаҳои андроид метавон тугмачаи фаъол илова кард, ки барои баъзе
 амалиётҳои зуд-зуд истифодашаванда истифода бурда шавад. 
 Барои ин дар қолаби асосӣ як элементи FloatingActionButton ҳамроҳ 
 мекунем: 
 <android.support.design.widget.FloatingActionButton 
 android:id="@+id/fab" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_alignParentBottom="true" 
 android:layout_alignParentEnd="true" 
 android:layout_gravity="bottom|right" 
 android:layout_marginBottom="dp" 
 android:layout_marginEnd="dp" 
 android:src="@drawable/share" /> 
 Баъд аз ин, агар лоиҳаро иҷро кунем, он шакли зеринро мегирад: 
 Тавре ки дида мешавад, дар ин ҷо дар қисми рости поёнии экран тугмачаи
 ба дигарон фиристед (share) пайдо шуд. 
 Барои ин тугмача дар файли Java ба сурати зерин ҳодиса менависем: 
 FloatingActionButton fab = findViewById(R.id.fab); 
 fab.setOnClickListener(new View.OnClickListener() 
 { 
 @Override 
 public void onClick(View view) 
 { 
 Snackbar.make(view, "Шумо тугачаи share-ро пахш кардед.", 
 Snackbar.LENGTH_LONG).setAction("Action", null).show(); 
 } 
 }); 
 Дар ин ҷо барои хориҷ кардани пайғом аз элементи Snackbar истифода 
 карда шудааст. Элементи мазкур аз рӯӣ баъзе хосиятҳо ба Toast монанд буда,
 имконияти баровардани пайғомро фароҳам меорад, фарқият дар он аст, ки дар
 Snackbar пайғом ба андозаи экран намоиш дода мешавад. 
 Snackbar тавассути методи make() сохта мешавад, ки дорои се параметр аст:
 объекти View (дар ин объект пайғоми пайдошаванда пайваст карда мешавад), 
 худи пайғом ба намуди сатр, андозаи равзанаи намоиши пайғом. Параметри 
 охирон метавонад қимати ададӣ (миқдори миллисекундҳо) ё яке аз доимиҳои 
 Snackbar.LENGTH_INDEFINITE (намоиш дар муҳлати номуайян), 
 Snackbar.LENGTH_LONG(намоиш дар вақти бисёр) ё 
 Snackbar.LENGTH_SHORT (намоиши кӯтоҳ) – ро қабул кунад. 
 Агар барномаро иҷро карда, тугмачаи share –ро пахш кунем, шакли зерин
 ҳосил мешавад. 
 Баъзан зарурати сохтани лоиҳае, ки дар поёнаш тугмачаҳои ба хона (Home),
 виджет (dashboard) ва хабардоркунӣ (notification) дорад меояд. Дар Android Studio
 иҷрои ин амал хело сода буда, барои пиёдасозии он ҳангоми сохтани лоиҳа 
 интихоби қолаби Bottom Navigation Activity кифоя мебошад. 
 Пас аз интихоби қолаби мазкур, агар барномаро иҷро кунем, шакли зеринро
 мегирад: 
 Ба таври пешфарз файли java-и барнома шакли зайлро дорад: 
 package com.example.user.myapplication; 
 import android.os.Bundle; 
 import android.support.annotation.NonNull; 
 import android.support.design.widget.BottomNavigationView; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.MenuItem; 
 import android.widget.TextView; 
 public class MainActivity extends AppCompatActivity { 
 private TextView mTextMessage; 
 private BottomNavigationView.OnNavigationItemSelectedListener 
 mOnNavigationItemSelectedListener 
 = new BottomNavigationView.OnNavigationItemSelectedListener() { 
 @Override 
 public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
 switch (item.getItemId()) { 
 case R.id.navigation_home: 
 mTextMessage.setText(R.string.title_home); 
 return true; 
 case R.id.navigation_dashboard: 
 mTextMessage.setText(R.string.title_dashboard); 
 return true; 
 case R.id.navigation_notifications: 
 mTextMessage.setText(R.string.title_notifications); 
 return true; 
 } 
 return false; 
 } 
 }; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 mTextMessage = (TextView) findViewById(R.id.message); 
 BottomNavigationView navigation = (BottomNavigationView) 
 findViewById(R.id.navigation); 
 navigation.setOnNavigationItemSelectedListener 
 (mOnNavigationItemSelectedListener); 
 } 
 } 
 Мӯҳтавои файли xml-асосии барнома бошад, чунин аст: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:id="@+id/container" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <TextView 
 android:id="@+id/message" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_marginLeft="@dimen/activity_horizontal_margin" 
 android:layout_marginStart="@dimen/activity_horizontal_margin" 
 android:layout_marginTop="@dimen/activity_vertical_margin" 
 android:text="@string/title_home" 
 app:layout_constraintLeft_toLeftOf="parent" 
 app:layout_constraintTop_toTopOf="parent" /> 
 <android.support.design.widget.BottomNavigationView 
 android:id="@+id/navigation" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:layout_marginEnd="dp" 
 android:layout_marginStart="dp" 
 android:background="?android:attr/windowBackground" 
 app:layout_constraintBottom_toBottomOf="parent" 
 app:layout_constraintLeft_toLeftOf="parent" 
 app:layout_constraintRight_toRightOf="parent" 
 app:menu="@menu/navigation" /> 
 </android.support.constraint.ConstraintLayout> 
 Илова бар ин, дар папкаи menu бо номи navigation.xml файли манба мавҷуд
 аст, ки дар он элементҳои дар поён буда муаррифӣ гардидаанд. 
 <?xml version="." encoding="utf-"?> 
 <menu xmlns:android="http://schemas.android.com/apk/res/android"> 
 <item 
 android:id="@+id/navigation_home" 
 android:icon="@drawable/ic_home_black_dp" 
 android:title="@string/title_home" /> 
 <item 
 android:id="@+id/navigation_dashboard" 
 android:icon="@drawable/ic_dashboard_black_dp" 
 android:title="@string/title_dashboard" /> 
 <item 
 android:id="@+id/navigation_notifications" 
 android:icon="@drawable/ic_notifications_black_dp" 
 android:title="@string/title_notifications" /> 
 </menu> 
 Барои иваз намудани нишонаҳои дар поёни экран буда, файлҳои лозимии 
 нишонаро нусхабардорӣ карда дар папкаи drawable гузошта, сатри 
 android:icon="@drawable/номи_расм"-ро тағйир додан кифоя аст. Барои 
 навиштаҷоти нишонаҳои поёни экранро иваз кардан бошад, аз атрибути 
 android:title истифода бурда мешавад. 
 Тавре ки медонем, навиштаҷотҳои лозимӣ дар дохили файли манбаи матнӣ
 strings.xml мавҷуд мебошанд. 
 Барои илова намудани ягон тугмачаи дигар, item -и ба он вобаста илова
 карда мешавад. 
 <item 
 android:id="@+id/navigation_next" 
 android:icon="@drawable/btn_next" 
 android:title="@string/title_next" /> 
 Мисол. 
 <?xml version="." encoding="utf-"?> 
 <menu xmlns:android="http://schemas.android.com/apk/res/android"> 
 <item 
 android:id="@+id/navigation_home" 
 android:icon="@drawable/ic_home_black_dp" 
 android:title="@string/title_home" /> 
 <item 
 android:id="@+id/navigation_dashboard" 
 android:icon="@drawable/ic_dashboard_black_dp" 
 android:title="@string/title_dashboard" /> 
 <item 
 android:id="@+id/navigation_notifications" 
 android:icon="@drawable/ic_notifications_black_dp" 
 android:title="@string/title_notifications" /> 
 <item 
 android:id="@+id/navigation_next" 
 android:icon="@drawable/btn_next" 
 android:title="@string/title_next" /> 
 </menu> 
 Барои илова намудани метод ба банди ҳамроҳкардашуда, дар файли java
 фармони зерин дар методи onNavigationItemSelected илова карда мешавад: 
 case R.id.navigation_next: 
 mTextMessage.setText(R.string.title_next); 
 Натиҷаи барнома: 
 Барои таҳия намудани лоиҳаҳое, ки дорои менюи ҳаракаткунанда 
 (кушодашаванда) дар қисми чапашон буда, метавон ҳангоми таҳияи лоиҳа 
 шаблони Navigation Drawer Activity-ро интихоб кард: 
 Пас аз сохтан, агар лоиҳаро иҷро кунем, шакли зеринро мегирад: 
 Агар нишонаи се хатчаро аз тарафи чапи болоии лоиҳа пахш кунем, 
 барнома шакли зеринро соҳиб мешавад: 
 Агар файли activity_main.xml-ро кушоем, мӯҳтавои он чунин шаклро 
 дорад: 
 <?xml version="." encoding="utf-"?> 
 <android.support.v.widget.DrawerLayout xmlns:android="http://sche- 
 mas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:id="@+id/drawer_layout" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:fitsSystemWindows="true" 
 tools:openDrawer="start"> 
 <include 
 layout="@layout/app_bar_main" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" /> 
 <android.support.design.widget.NavigationView 
 android:id="@+id/nav_view" 
 android:layout_width="wrap_content" 
 android:layout_height="match_parent" 
 android:layout_gravity="start" 
 android:fitsSystemWindows="true" 
 app:headerLayout="@layout/nav_header_main" 
 app:menu="@menu/activity_main_drawer" /> 
 </android.support.v.widget.DrawerLayout> 
 Тавре ки медонем, барои менюи кушодашаванда аз элементи 
 NavigationView истифода бурда мешавад. Пеш аз меню барои гузоштани 
 app_bar_main.xml аз дастури include истифода бурда мешавад. 
 Атрибути tools:openDrawer барои менюи ҳамоҳангсозии ба шакли пӯшида 
 нигоҳ доштан истифода бурда мешавад. 
 Теги NavigationView дорои истинод дар атрибути app:headerLayout 
 мебошад, ки ба файли nav_header_main.xml (қисми болоии менюи 
 кушодашаванда) ишора мекунад. Илова бар ин дар меню атрибути app:menu 
 мавҷуд аст, ки ба файли манбаи меню menu/activity_main_drawer.xml истинод
 мекунад. 
 Мӯҳтавои файли nav_header_main.xml чунин аст: 
 <?xml version="." encoding="utf-"?> 
 <LinearLayout xmlns:android="http://schemas.an- 
 droid.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 android:layout_width="match_parent" 
 android:layout_height="@dimen/nav_header_height" 
 android:background="@drawable/side_nav_bar" 
 android:gravity="bottom" 
 android:orientation="vertical" 
 android:paddingBottom="@dimen/activity_vertical_margin" 
 android:paddingLeft="@dimen/activity_horizontal_margin" 
 android:paddingRight="@dimen/activity_horizontal_margin" 
 android:paddingTop="@dimen/activity_vertical_margin" 
 android:theme="@style/ThemeOverlay.AppCompat.Dark"> 
 <ImageView 
 android:id="@+id/imageView" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:contentDescription="@string/nav_header_desc" 
 android:paddingTop="@dimen/nav_header_vertical_spacing" 
 app:srcCompat="@mipmap/ic_launcher_round" /> 
 <TextView 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:paddingTop="@dimen/nav_header_vertical_spacing" 
 android:text="@string/nav_header_title" 
 android:textAppearance="@style/TextAppearance.AppCom- 
 pat.Body" /> 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="@string/nav_header_subtitle" /> 
 </LinearLayout> 
 Дар дохили қолаб як ImageView ва ду TextView мавҷуд аст, ки дар 
 контейнери LinearLayout гузошта шудаанд. Заминаи контейнерро атрибути 
 drawable/side_nav_bar.xml муайян мекунад. 
 <shape xmlns:android="http://schemas.android.com/apk/res/android" 
 android:shape="rectangle"> 
 <gradient 
 android:angle="" 
 android:centerColor="#" 
 android:endColor="#C" 
 android:startColor="#DBAC" 
 android:type="linear" /> 
 </shape> 
 Акнун манбаи менюи кушодашаванда res/menu/activity_main_drawer.xml- 
 ро дида мебароем, ки чунин аст: 
 <?xml version="." encoding="utf-"?> 
 <menu xmlns:android="http://schemas.android.com/apk/res/android" 
 xmlns:tools="http://schemas.android.com/tools" 
 tools:showIn="navigation_view"> 
 <group android:checkableBehavior="single"> 
 <item 
 android:id="@+id/nav_camera" 
 android:icon="@drawable/ic_menu_camera" 
 android:title="Import" /> 
 <item 
 android:id="@+id/nav_gallery" 
 android:icon="@drawable/ic_menu_gallery" 
 android:title="Gallery" /> 
 <item 
 android:id="@+id/nav_slideshow" 
 android:icon="@drawable/ic_menu_slideshow" 
 android:title="Slideshow" /> 
 <item 
 android:id="@+id/nav_manage" 
 android:icon="@drawable/ic_menu_manage" 
 android:title="Tools" /> 
 </group> 
 <item android:title="Communicate"> 
 <menu> 
 <item 
 android:id="@+id/nav_share" 
 android:icon="@drawable/share" 
 android:title="Share" /> 
 <item 
 android:id="@+id/nav_send" 
 android:icon="@drawable/ic_menu_send" 
 android:title="Send" /> 
 </menu> 
 </item> 
 </menu> 
 Принсипи сохтани элементҳои меню шакли стандартиро дорад. Ҳар як 
 банди меню дорои теги item бо ишора намудани нишона ва матн аст. Барои 
 гурӯҳбандӣ намудани элементҳо аз элементи group истифода бурда мешавад. 
 Барои равиши элементҳои менюро танзим кардан аз атрибути 
 android:checkableBehavior истифода бурда мешавад. Дар ин мисол аз қимати 
 single истифода бурда шудааст, ки ҳангоми пахш намудани банди меню он шакли
 қайдкардашударо соҳиб мешавад. Се варинат мавҷуд аст: 
 single – танҳо метавон як элементи гурӯҳро интихоб кард; 
 all – метавон ҳамаи бандҳоро интихоб кард; 
 none – элементҳо интихоб карда намешаванд. 
 Қайд. Дар китобхонаи Android Support Design версияи варианти all кор
 намекунад. 
 Илова бар ин, лоиҳа ба расми векторие, ки дар папкаи drawable- мавҷуд аст,
 ишора мекунад. 
 Акнун теги include-ро дида мебароем, ки ба файли 
 res/layout/app_bar_main.xml ишора мекунад, ва мӯҳтавои он чунин аст: 
 <?xml version="." encoding="utf-"?> 
 <android.support.design.widget.CoordinatorLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <android.support.design.widget.AppBarLayout 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:theme="@style/AppTheme.AppBarOverlay"> 
 <android.support.v.widget.Toolbar 
 android:id="@+id/toolbar" 
 android:layout_width="match_parent" 
 android:layout_height="?attr/actionBarSize" 
 android:background="?attr/colorPrimary" 
 app:popupTheme="@style/AppTheme.PopupOverlay" /> 
 </android.support.design.widget.AppBarLayout> 
 <include layout="@layout/content_main" /> 
 <android.support.design.widget.FloatingActionButton 
 android:id="@+id/fab" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_gravity="bottom|end" 
 android:layout_margin="@dimen/fab_margin" 
 app:srcCompat="@android:drawable/ic_dialog_email" /> 
 </android.support.design.widget.CoordinatorLayout> 
 Акнун коди барномаро мавриди баҳс қарор медиҳем. Дар класси асосӣ 
 интерфейси OnNavigationItemSelectedListener бо методи 
 onNavigationItemSelected() пиёдасозӣ карда шудааст. 
 package com.example.user.myapplication; 
 import android.os.Bundle; 
 import android.support.design.widget.FloatingActionButton; 
 import android.support.design.widget.Snackbar; 
 import android.view.View; 
 import android.support.design.widget.NavigationView; 
 import android.support.v.view.GravityCompat; 
 import android.support.v.widget.DrawerLayout; 
 import android.support.v.app.ActionBarDrawerToggle; 
 import android.support.v.app.AppCompatActivity; 
 import android.support.v.widget.Toolbar; 
 import android.view.Menu; 
 import android.view.MenuItem; 
 public class MainActivity extends AppCompatActivity 
 implements NavigationView.OnNavigationItemSelectedListener { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
 setSupportActionBar(toolbar); 
 FloatingActionButton fab = (FloatingActionButton) 
 findViewById(R.id.fab); 
 fab.setOnClickListener(new View.OnClickListener() { 
 @Override 
 public void onClick(View view) { 
 Snackbar.make(view, "Replace with your own action", 
 Snackbar.LENGTH_LONG).setAction("Action", null).show(); 
 } 
 }); 
 DrawerLayout drawer = (DrawerLayout) findViewById 
 (R.id.drawer_layout); 
 ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( 
 this, drawer, toolbar, R.string. 
 navigation_drawer_open, R.string.navigation_drawer_close); 
 drawer.addDrawerListener(toggle); 
 toggle.syncState(); 
 NavigationView navigationView = (NavigationView) 
 findViewById(R.id.nav_view); 
 navigationView.setNavigationItemSelectedListener(this); 
 } 
 @Override 
 public void onBackPressed() { 
 DrawerLayout drawer = (DrawerLayout) findView- 
 ById(R.id.drawer_layout); 
 if (drawer.isDrawerOpen(GravityCompat.START)) { 
 drawer.closeDrawer(GravityCompat.START); 
 } else { 
 super.onBackPressed(); 
 } 
 } 
 @Override 
 public boolean onCreateOptionsMenu(Menu menu) { 
 getMenuInflater().inflate(R.menu.main, menu); 
 return true; 
 } 
 @Override 
 public boolean onOptionsItemSelected(MenuItem item) { 
 int id = item.getItemId(); 
 if (id == R.id.action_settings) { 
 return true; 
 } 
 return super.onOptionsItemSelected(item); 
 } 
 @SuppressWarnings("StatementWithEmptyBody") 
 @Override 
 public boolean onNavigationItemSelected(MenuItem item) { 
 // Handle navigation view item clicks here. 
 int id = item.getItemId(); 
 if (id == R.id.nav_camera) { 
 // Handle the camera action 
 } else if (id == R.id.nav_gallery) { 
 } else if (id == R.id.nav_slideshow) { 
 } else if (id == R.id.nav_manage) { 
 } else if (id == R.id.nav_share) { 
 } else if (id == R.id.nav_send) { 
 } 
 DrawerLayout drawer = (DrawerLayout) findViewById 
 (R.id.drawer_layout); 
 drawer.closeDrawer(GravityCompat.START); 
 return true; 
 } 
 } 
 Мантиқи ин барнома душвор набуда, метавонад қобили дарк бошад. 
 Ҳангоми пахш намудани тугмачаи "Ба хона" ҳолати менюи кушодашаванда 
 санҷида мешавад, агар меню кушодагӣ бошад (isDrawerOpen()), тавассути 
 closeDrawer() он маҳкам карда мешавад. 
 @Override 
 public void onBackPressed() { 
 DrawerLayout drawer = (DrawerLayout) 
 findViewById(R.id.drawer_layout); 
 if (drawer.isDrawerOpen(GravityCompat.START)) { 
 drawer.closeDrawer(GravityCompat.START); 
 } else { 
 super.onBackPressed(); 
 } 
 } 
 Дар методи onCreate() ба элементҳои менюи кушодашаванда қимати 
 ибтидоӣ бахшида мешавад. 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
 setSupportActionBar(toolbar); 
 … 
 DrawerLayout drawer = (DrawerLayout) findViewById 
 (R.id.drawer_layout); 
 ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, 
 drawer, toolbar, R.string.navigation_drawer_open, 
 R.string.navigation_drawer_close); 
 drawer.addDrawerListener(toggle); 
 toggle.syncState(); 
 NavigationView navigationView = (NavigationView) findViewById 
 (R.id.nav_view); 
 navigationView.setNavigationItemSelectedListener(this); 
 } 
 Боби. Гурӯҳбандии элементҳо -Layouts 
 Ҳангоми таҳияи лоиҳаҳои нахустинамон барои андроид мо бо 
 LinearLayout сарукор гирифтем, ки имконияти гурӯҳбандии элементҳоро ба таври
 автоматикӣ дар як сатҳ фароҳам меорад. Илова бар ин элементҳои дигаре низ
 ҳастанд, ки имконияти ба таврҳои гуногун гурӯҳбанди намудани элементҳоро 
 пешкаш мекунанд. 
 Тавре ки медонем, барои нигоҳдории сохтори лоиҳа (макет ё қолаби лоиҳа)
 аз XML-файлҳо, ки дар папкаи /res/layout ҷойгиранд истифода бурда мешавад.
 Мақсади асосии ин амал ҷудосозии коди барнома аз дизайни он мебошад. 
 Барои сохтани қолаби лоиҳа дар Android Studio таҳриргари махсусе, ки
 иборат аз ду қисм аст истифода бурда мешавад: қисми матнӣ(XML-файл) ва 
 дизайн: 
 Ҳар як файли қолаб бояд дорои элементи асосӣ (решагӣ ё асл) бошад, яъне
 объекти типи View ё ViewGroup. Дар дохили элементи асосӣ метавон элементҳои
 дигарро илова кард. Дар натиҷа шакли дарахтшакли объектҳо (иерархия) пайдо
 мешавад. 
 Дар Android Studio қолабҳои стандартии зерин мавҷуд мебошанд: 
 FrameLayout 
 LinearLayout 
 TableLayout 
 RelativeLayout 
 GridLayout 
 Ҳамаи ин қолабҳо зеркласси ViewGroup буда, хосиятҳои асосии дар класси
 View муаррифӣ гаштаро меросгирӣ мекунанд. 
 Барои файли тайёри қолабро ба лоиҳа илова кардан аз дастури <include> ба
 сурати зерин истифода бурда мешавад: 
 <include layout="@layout/newfile"/> 
 Барои ба таври барномавӣ илова намудани қолаби тайёр дастури зерин дар
 методи onCreate() истифода бурда мешавад: 
 setContentView(R.layout.activity_main); 
 Дар ин ҷо activity_main қолаби асосии лоиҳа мебошад. Илова бар ин 
 метавон файли қолабро номи дилхоҳ гузошт. 
 Барои ба таври барномавӣ таҳия намудани дизайн метавон аз классҳои 
 android.widget.LinearLayout, LinearLayout.LayoutParams, ва инчунин 
 Android.view.ViewGroup.LayoutParams, ViewGroup.MarginLayoutParams 
 истифода кард. Дар ин ҳолат ба сифати пайвасткунии стандартӣ аз методи 
 setContentView() истифода бурда мешавад. Барои иҷрои ин амал ибтидо мӯҳтавои
 файли қолаб сохта шуда, сипас дар охир объекти волидайнӣ ба қолаб тавассути
 методи setContentView() равон карда мешавад. 
 package com.example.user.myfirstapplication; 
 import android.graphics.Color; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.Gravity; 
 import android.view.ViewGroup; 
 import android.widget.ImageView; 
 import android.widget.LinearLayout; 
 import android.widget.TextView; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 TextView label = new TextView(this); 
 label.setText("Парчами Тоҷикистон"); 
 label.setTextSize(); 
 label.setBackgroundColor(Color.GREEN); 
 label.setGravity(Gravity.CENTER_HORIZONTAL); 
 ImageView pic = new ImageView(this); 
 pic.setImageResource(R.drawable.parcham); 
 pic.setLayoutParams(new 
 ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
 ViewGroup.LayoutParams.WRAP_CONTENT)); 
 pic.setAdjustViewBounds(true); 
 pic.setScaleType(ImageView.ScaleType.FIT_XY); 
 //Муайянкунии андозаи расм 
 pic.setMaxHeight(); 
 pic.setMaxWidth(); 
 LinearLayout ll = new LinearLayout(this); 
 //Муайянкунии самти LinearLayout 
 ll.setOrientation(LinearLayout.VERTICAL); 
 ll.setLayoutParams(new 
 ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
 ViewGroup.LayoutParams.MATCH_PARENT)); 
 ll.setGravity(Gravity.CENTER); 
 //Иловакунии майдони матнӣ 
 ll.addView(label); 
 //Иловакунии расм 
 ll.addView(pic); 
 //Пайвасткунии қолаб 
 setContentView(ll); 
 } 
 } 
 Натиҷаи барнома: 
 Акнун қолабҳои дар боло овардашударо дида мебароем. 
 FrameLayout яке аз қолабҳои содатарин буда, равзанаро бо ҷойи холӣ пур
 мекунад. Одатан ин ҷойи холигӣ тавассути элементҳои духтарии объектҳои View
 ё ViewGroup пур карда мешавад. Элементҳои FrameLayout дар тарафи чапи 
 болоии равзана гузошта мешаванд. 
 Дар FrameLayout наметавон барои объектҳои духтарӣ ҷойҳои гуногунро 
 интихоб кард. Одатан элементи навбатии гузошташуда дар болои элементи 
 пешина қарор мегирад. Ба таври пешфарз контейнерҳои элементи FrameLayout 
 ба андозаи контейнери волидайнӣ буда, дорои атрибутҳои зерин мебошанд. 
 android:layout_width="match_parent" 
 android:layout_height="match_parent"> 
 Илова бар ин, метавон аз хосияти Gravity барои идоракунии тартиби 
 гузоштани элементҳо истифода кард. 
 FrameLayout-ро метавон барои ҳолати ҷолиб истифода кард. Масалан, агар
 хоҳем, ки қисми болоии равзана(TextView) бетағйир нигоҳ дошта шуда, қисми
 поёнӣ ҳаракат кунад (тоб хурад) аз қолаби мазкур истифода мешавад. 
 <?xml version="." encoding="utf-"?> 
 <FrameLayout xmlns:android="http://schemas.an- 
 droid.com/apk/res/android" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" > 
 <TextView 
 android:id="@+id/tvTop" 
 android:gravity="top|center_horizontal" 
 android:layout_width="match_parent" 
 android:layout_height="dip" 
 android:text="Аз тарафи боло ҷойгиршавӣ" 
 android:textColor="#" 
 android:textStyle="bold" 
 android:background="#FFFFFF" /> 
 <LinearLayout 
 android:orientation="vertical" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" > 
 <ListView 
 android:id="@+id/lvMain" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" /> 
 </LinearLayout> 
 </FrameLayout> 
 Ҳоло мисоли дигареро дида мебароем. Дар ин мисол дар равзана як расм
 нишон дода шуда, бо пахш кардани он расми навбатӣ (дуюм) нишон дода 
 мешавад ва ҳамин тариқ ин амал даврӣ идома меёбад. 
 Файли қолаби лоиҳа: 
 <?xml version="." encoding="utf-"?> 
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:id="@+id/FrameLayout" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" > 
 <ImageView 
 android:id="@+id/imageView" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 android:scaleType="fitCenter" 
 android:src="@drawable/nishon" /> 
 <ImageView 
 android:id="@+id/imageView" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 android:scaleType="fitCenter" 
 android:src="@drawable/parcham" 
 android:visibility="gone" /> 
 </FrameLayout> 
 Коди барнома: 
 package com.example.user.myfirstapplication; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.widget.ImageView; 
 public class MainActivity extends AppCompatActivity { 
 private ImageView img; 
 private ImageView img; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 img = (ImageView)findViewById(R.id.imageView); 
 img = (ImageView)findViewById(R.id.imageView); 
 img.setOnClickListener(new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 img.setVisibility(View.VISIBLE); 
 img.setVisibility(View.GONE); 
 } 
 }); 
 img.setOnClickListener(new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 img.setVisibility(View.GONE); 
 img.setVisibility(View.VISIBLE); 
 } 
 }); 
 } 
 } 
 Натиҷаи барнома: 
 Илова бар ин, метавон ба таври барномавӣ FrameLayout сохт. Барои иҷрои
 ин амал коди барномаро ба сурати зерин тағйир медиҳем. Файли қолабро бошад
 бетағйир мегузорем. 
 package com.example.user.myfirstapplication; 
 import android.graphics.Color; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.Gravity; 
 import android.view.View.*; 
 import android.view.ViewGroup; 
 import android.widget.FrameLayout; 
 import android.widget.ImageView; 
 import android.widget.TextView; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 TextView tv = new TextView(this); 
 tv.setText("Hello"); 
 tv.setTextSize(); 
 tv.setTextColor(Color.BLACK); 
 TextView tv = new TextView(this); 
 tv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup. 
 LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams. 
 WRAP_CONTENT)); 
 tv.setGravity(Gravity.BOTTOM); 
 tv.setTextSize(); 
 tv.setGravity(Gravity.RIGHT); 
 tv.setText("Ok"); 
 tv.setTextColor(Color.WHITE); 
 ImageView iv = new ImageView(this); 
 iv.setImageResource(R.drawable.parcham); 
 iv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup. 
 LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams. 
 MATCH_PARENT)); 
 iv.setScaleType(ImageView.ScaleType.MATRIX); 
 FrameLayout fl = new FrameLayout(this); 
 fl.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup. 
 LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams. 
 MATCH_PARENT)); 
 fl.addView(iv); 
 fl.addView(tv); 
 fl.addView(tv); 
 setContentView(fl); 
 } 
 } 
 Тавре ки дида мешавад, дар ин ҷо ибтидо элементҳои идоракунандаи 
 лозимӣ сохта шудаааст.Пас аз ин элементи FrameLayout муаррифӣ гардида, 
 элементҳои қаблан сохташуда, тавассути методи addView ба он илова карда 
 шудаанд. 
 Дар Android Studio қолаби LinearLayout дар ду вариант истифода мешавад -
 Horizontal ва Vertical. Қолаби LinearLayout ҳамаи объектҳои духтариро аз рӯи як
 самт - амудӣ ё уфуқӣ гурӯҳбандӣ мекунад. Самт тавассути хосияти android:orien-
 tation муайян карда мешавад: 
 android:orientation="horizontal" 
 android:orientation="vertical" 
 Ҳангоми истифодаи қолаби LinearLayout бо хосияти самти уфуқӣ (horizontal)
 элементҳои духтарӣ дар паҳлуӣ якдигар (дар як сатр) қарор мегиранд. Дар самти
 амудӣ(vertical) бошад, ҳар як элементи баъдина дар поёни элементи пешина қарор
 мегирад. 
 <?xml version="." encoding="utf-"?> 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical"> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:layout_weight="" 
 android:orientation="horizontal"> 
 <TextView 
 android:layout_width="wrap_content" 
 android:layout_height="fill_parent" 
 android:layout_weight="" 
 android:background="#fb" 
 android:gravity="center_horizontal" 
 android:text="Сурх"/> 
 <TextView 
 android:layout_width="wrap_content" 
 android:layout_height="match_parent" 
 android:layout_weight="" 
 android:background="#ffffff" 
 android:gravity="center_horizontal" 
 android:text="Сафед"/> 
 <TextView 
 android:layout_width="wrap_content" 
 android:layout_height="match_parent" 
 android:layout_weight="" 
 android:background="#bdd" 
 android:gravity="center_horizontal" 
 android:text="Сабз"/> 
 </LinearLayout> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="fill_parent" 
 android:layout_weight="" 
 android:orientation="vertical"> 
 <TextView 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:text="Рангҳои парчами Тоҷикистон" 
 android:background="#ddce" 
 android:textAlignment="center" 
 android:textSize="dp"/> 
 <TextView 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:background="#fb" 
 android:textSize="dp"/> 
 <TextView 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:background="#ffffff" 
 android:textSize="dp"/> 
 <TextView 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:background="#bdd" 
 android:textSize="dp"/> 
 </LinearLayout> 
 </LinearLayout> 
 Дар ин мисол усулҳои гузоштани компоненти TextView нишон дода шуда- 
 аст. 
 Натиҷаи барнома шакли зеринро дорад: 
 Қолаби LinearLayout дорои атрибути ҷолиби диққат, яъне 
 android:layout_weight мебошад, ки барои муқарраркунии вазни элементҳои 
 духтарӣ истифода бурда мешавад. Ин атрибут инъикоси(View) муҳимеро 
 муайян карда, имконияти васеъшавии элементро барои пур кардани ҷойҳои холӣ
 фазои волидайниро фароҳам меорад. Ба таври пешфарз қимати ин атрибут ба 
 сифр баробар мебошад. 
 Масалан, агар дар форм се элементи идоракунандаи матнӣ бошад, барои 
 дутоаш қимати вазн ба баробар бошад, ва вазни майдони сеюм ба баробар
 бошад, он гоҳ майдони сеюм вобаста ба матни дохилаш фазои экранро банд 
 мекунад. Агар вазни майдони сеюм ба баробар бошад, он гоҳ ин майдон 
 майдони муҳимтар ба ҳисоб рафта, дар ин ҳоллат %-и фазои волидайниро банд
 мекунад, майдонҳои боқимонда бошад %. 
 Илова бар ин, метавон аз атрибути android:weightSum низ истифода кард.
 Агар атрибути мазкур дорои қимати бошад, он гоҳ ҳамаи элементҳои 
 духтариро метавон ба шакли қулай истифода кард. Ин усул одатан дар веб- 
 мастерҳо барои ороиш додан истифода бурда мешавад. 
 Мисоли. LinearLayout-и бе вазн. 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical"> 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:textAppearance="?android:attr/textAppearanceLarge" 
 android:text="Linear Layout бе вазн(Without Weight)" 
 android:layout_gravity="center_horizontal" /> 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:textSize="pt" 
 android:background="@color/colorRed" 
 android:text="@string/rudaki" /> 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:textSize="pt" 
 android:background="@color/colorWhite" 
 android:text="@string/khaiyom" /> 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:weightSum="" 
 android:textSize="pt" 
 android:background="@color/colorGreen" 
 android:text="@string/sino" /> 
 </LinearLayout> 
 Муҳтавои файли манба: 
 <resources> 
 <string name="app_name">MyFirstApplication</string> 
 <string name="rudaki">Ҳеҷ шодӣ нест андар ин ҷаҳон,\n 
 Бартар аз дидори рӯи дӯстон.\n 
 Ҳеҷ талхӣ нест бар дил талхтар,\n 
 Аз фироқи дӯстони пурҳунар.\n </string> 
 <string name="sino"> Аз қаъри гили сиёҳ то авҷи зуҳал,\n 
 Кардам ҳама мушкилоти гетиро ҳал.\n 
 Берун ҷастам зӣ банди ҳар макру ҳиял,\n 
 Ҳар банд кушода шуд магар банди аҷал.\n</string> 
 <string name="khaiyom"> Онон ки куҳан буданду онон ки наванд,\n 
 Ҳар як паи якдигар якояк бишаванд,\n 
 Ин мулки ҷаҳон ба кас намонад ҷовид,\n 
 Рафтанду равему боз оянду раванд.\n 
 </string> 
 </resources> 
 Натиҷаи барнома 
 Мисоли. Истифодаи LinearLayout бо вазн. 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:weightSum="" 
 android:orientation="vertical"> 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:textAppearance="?android:attr/textAppearanceLarge" 
 android:text="Linear Layout бо вазн(With Weight)" 
 android:layout_weight="" 
 android:layout_gravity="center_horizontal" /> 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:textSize="pt" 
 android:background="@color/colorRed" 
 android:text="@string/rudaki" /> 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:textSize="pt" 
 android:background="@color/colorWhite" 
 android:text="@string/khaiyom" /> 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_weight="" 
 android:textSize="pt" 
 android:background="@color/colorGreen" 
 android:text="@string/sino" /> 
 </LinearLayout> 
 Натиҷаи барнома: 
 Барои дар як хат ҷойгир кардани тугмачаҳо метавон аз атрибути 
 android:baselineAligned="false" барои LinearLayout истифода кард. 
 Барои LinearLayout агар заминаи градиентӣ лозим бошад, он гоҳ дар папкаи
 res/drawable xml-файл месозем, мисол, gradient.xml: 
 <?xml version="." encoding="utf-"?> 
 <shape xmlns:android="http://schemas.android.com/apk/res/android" 
 android:shape="rectangle" > 
 <gradient 
 android:angle="" 
 android:endColor="#FF" 
 android:startColor="#FF" /> 
 </shape> 
 Акнун дар хосияти Background файлро нишон медиҳем. 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 android:background="@drawable/gradient" 
 android:orientation="vertical" > 
 </LinearLayout> 
 Барои ба таври барномавӣ иваз намудани заминаи LinearLayout методи 
 setBackgroundColor() даъват карда мешавад. Мисол. 
 Муҳтавои файли XML: 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:id="@+id/linear" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:weightSum="" 
 android:orientation="horizontal"> 
 </LinearLayout> 
 Коди барнома: 
 package com.example.user.myfirstapplication; 
 import android.graphics.Color; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.widget.LinearLayout; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 LinearLayout li=(LinearLayout)findViewById(R.id.linear); 
 li.setBackgroundColor(Color.GREEN); 
 } 
 } 
 Сар карда аз API, барои LinearLayout атрибути нав android:divider пайдо
 шуд, ки имконияти муайянкунии ҷудокунандаи байни тугмачаҳоро фароҳам 
 меорад. Илова бар ин, метавон аз атрибути android:showDividers низ истифода
 кард. Атрибути мазкур метавонад яке аз қиматҳои зеринро қабул кунад: 
 android:showDividers="beginning|middle|end" 
 Мисол. Дар папкаи res/drawable бо номи separator.xml файл месозем: 
 <?xml version="." encoding="utf-"?> 
 <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
 <size android:width="dp" /> 
 <solid android:color="#f" /> 
 </selector> 
 Муҳтавои файли қолаб: 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:adjustViewBounds="true" 
 android:divider="@drawable/separator" 
 android:dividerPadding="dp" 
 android:orientation="horizontal" 
 android:showDividers="middle" > 
 <Button 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 style="?android:attr/buttonBarButtonStyle" 
 android:text="Yes" 
 android:layout_weight="" 
 android:id="@+id/button" 
 android:textColor="#fd" /> 
 <Button 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 style="?android:attr/buttonBarButtonStyle" 
 android:text="No" 
 android:layout_weight="" 
 android:id="@+id/button" 
 android:textColor="#af" /> 
 <Button 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 style="?android:attr/buttonBarButtonStyle" 
 android:text="Cancel" 
 android:layout_weight="" 
 android:id="@+id/button" 
 android:textColor="#fd" /> 
 </LinearLayout> 
 Натиҷаи барнома: 
 Илова бар ин, метавон тугмачаҳоро ба сурати амудӣ гузошт. Мисол. 
 <LinearLayout xmlns:android="http://schemas.an- 
 droid.com/apk/res/android" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:adjustViewBounds="true" 
 android:divider="@drawable/separator" 
 android:dividerPadding="dp" 
 android:orientation="vertical" 
 android:showDividers="middle" > 
 <Button 
 android:id="@+id/button" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="Button" /> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="Button" /> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="Button" /> 
 </LinearLayout> 
 Қолаби TableLayout имконияти гузоштани элементҳои духтариро ба сурати
 ҷадвал (ба намуди сатр ва сутун) фароҳам меорад. TableLayout хатҳои 
 ҷудокунандаи сатр ва сутунро нишон намедиҳад. Дар ҳар сатри TableLayout 
 метавонад сатр ва сутунҳои гуногун мавҷуд бошанд. Ҳангоми сохтани қолаб 
 барои сатрҳо аз объекти TableRow истифода бурда мешавад. Дар ҳар катакча 
 метавон TableLayout-и дигар ё LinearLayout низ гузошт. 
 TableLayout-ро метавон барои сохтани калкулятор, бозиҳои мантиқӣ ба 
 монанди судоку ва ғайра истифода кард. Мисол. 
 Муҳтавои файли қолаб: 
 <?xml version="." encoding="utf-"?> 
 <TableLayout xmlns:android="http://schemas.an- 
 droid.com/apk/res/android" 
 android:background="#eeeeee" 
 android:stretchColumns="*" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent"> 
 <TableRow android:background="#cccccc" 
 android:padding="dp"> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="№" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/ 
 textAppearanceLarge"/> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="Насаб" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/ 
 textAppearanceLarge"/> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="Ном" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/ 
 textAppearanceLarge"/> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="Синну сол" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/ 
 textAppearanceLarge" /> 
 </TableRow> 
 <TableRow android:padding="dp"> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/ 
 textAppearanceMedium"/> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="Алиев" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/ 
 textAppearanceMedium"/> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="Валӣ" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/ 
 textAppearanceMedium"/> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/ 
 textAppearanceMedium" /> 
 </TableRow> 
 <TableRow android:padding="dp"> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/ 
 textAppearanceMedium" /> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="Салимов" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/ 
 textAppearanceMedium" /> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="Ҳалим" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/ 
 textAppearanceMedium" /> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/ 
 textAppearanceMedium" /> 
 </TableRow> 
 <TableRow android:padding="dp"> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/ 
 textAppearanceMedium" /> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="Азизова" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/ 
 textAppearanceMedium" /> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="Азиза" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/ 
 textAppearanceMedium" /> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/ 
 textAppearanceMedium" /> 
 </TableRow> 
 </TableLayout> 
 Натиҷаи барнома: 
 Барои якҷоякунии катакчаҳо дар TableLayout аз атрибути 
 android:layout_span истифода бурда мешавад. Мисол. 
 <?xml version="." encoding="utf-"?> 
 <TableLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:background="#eeeeee" 
 android:stretchColumns="*" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent"> 
 <TableRow android:background="#cccccc" 
 android:padding="dp"> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="№" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/textAppearanceLarge"/> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="Насаб" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/textAppearanceLarge"/> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="Ном" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/textAppearanceLarge"/> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="Синну сол" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/textAppearanceLarge" /> 
 </TableRow> 
 <TableRow android:padding="dp"> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/textAppearanceMedium"/> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="Алиев" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/textAppearanceMedium"/> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="Валӣ" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/textAppearanceMedium"/> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/textAppearanceMedium" /> 
 </TableRow> 
 <TableRow android:padding="dp"> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/textAppearanceMedium" /> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="Азизова Азиза" 
 android:layout_span="" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/textAppearanceMedium" /> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="" 
 android:gravity="center_horizontal" 
 android:textAppearance="?android:attr/textAppearanceMedium" /> 
 </TableRow> 
 </TableLayout> 
 Натиҷаи барнома: 
 Илова бар ин, метавон ба таври барномавӣ низ TableLayout сохт. Барои
 иҷрои ин амал лоиҳаи нав сохта, ҳамаи элементҳои идоракунандаи файли қолаби
 онро нест мекунем ва Java-коди онро ба сурати зерин тағйир медиҳем: 
 package com.example.user.myfirstapplication; 
 import android.graphics.Color; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.Gravity; 
 import android.view.ViewGroup; 
 import android.widget.TableLayout; 
 import android.widget.TableRow; 
 import android.widget.TextView; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 TableLayout myTable = new TableLayout(this); 
 myTable.setBackgroundColor(Color.CYAN); 
 myTable.setStretchAllColumns(true); 
 ViewGroup.LayoutParams params = new TableRow.LayoutParams 
 (ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams. 
 FILL_PARENT); 
 myTable.setLayoutParams(params); 
 TableRow rowLabels = new TableRow(this); 
 rowLabels.setGravity(Gravity.CENTER_HORIZONTAL); 
 rowLabels.setBackgroundColor(Color.GRAY); 
 TextView numLabel = new TextView(this); 
 numLabel.setGravity(Gravity.CENTER_HORIZONTAL); 
 numLabel.setText("№"); 
 numLabel.setTextSize(); 
 TableRow.LayoutParams paramsNum = new TableRow.LayoutParams 
 ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams. 
 WRAP_CONTENT); 
 numLabel.setLayoutParams(paramsNum); 
 TextView firstNameLabel = new TextView(this); 
 firstNameLabel.setText("Насаб"); 
 firstNameLabel.setTextSize(); 
 firstNameLabel.setGravity(Gravity.CENTER_HORIZONTAL);; 
 TableRow.LayoutParams ParamsfirstNameLabel = new TableRow. 
 LayoutParams (ViewGroup.LayoutParams.MATCH_PARENT, 
 ViewGroup.LayoutParams.WRAP_CONTENT); 
 firstNameLabel.setLayoutParams(ParamsfirstNameLabel); 
 TextView NameLabel = new TextView(this); 
 NameLabel.setText("Ном"); 
 NameLabel.setGravity(Gravity.CENTER_HORIZONTAL); 
 NameLabel.setTextSize(); 
 TableRow.LayoutParams ParamsName = new TableRow.LayoutParams 
 (ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup. 
 LayoutParams.WRAP_CONTENT); 
 NameLabel.setLayoutParams(ParamsName); 
 TextView ageLabel = new TextView(this); 
 ageLabel.setText("Синну сол"); 
 ageLabel.setTextSize(); 
 ageLabel.setGravity(Gravity.CENTER_HORIZONTAL);; 
 TableRow.LayoutParams paramsAge = new TableRow.LayoutParams 
 (ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams. 
 WRAP_CONTENT); 
 paramsAge.topMargin =; 
 paramsAge.rightMargin =; 
 ageLabel.setLayoutParams(paramsAge); 
 rowLabels.addView(numLabel); 
 rowLabels.addView(firstNameLabel); 
 rowLabels.addView(NameLabel); 
 rowLabels.addView(ageLabel); 
 myTable.addView(rowLabels); 
 TableRow row = new TableRow(this); 
 row.setGravity(Gravity.CENTER_HORIZONTAL); 
 row.setBackgroundColor(Color.WHITE); 
 TextView num = new TextView(this); 
 num.setGravity(Gravity.CENTER_HORIZONTAL); 
 num.setText(""); 
 num.setTextSize(); 
 num.setLayoutParams(paramsNum); 
 TextView firstName = new TextView(this); 
 firstName.setText("Алиев"); 
 firstName.setTextSize(); 
 firstName.setGravity(Gravity.CENTER_HORIZONTAL);; 
 firstName.setLayoutParams(ParamsfirstNameLabel); 
 TextView Name = new TextView(this); 
 Name.setText("Валӣ"); 
 Name.setGravity(Gravity.CENTER_HORIZONTAL); 
 Name.setTextSize(); 
 Name.setLayoutParams(ParamsName); 
 TextView age = new TextView(this); 
 age.setText(""); 
 age.setTextSize(); 
 age.setGravity(Gravity.CENTER_HORIZONTAL);; 
 age.setLayoutParams(paramsAge); 
 row.addView(num); 
 row.addView(firstName); 
 row.addView(Name); 
 row.addView(age); 
 myTable.addView(row); 
 TableRow row = new TableRow(this); 
 row.setGravity(Gravity.CENTER_HORIZONTAL); 
 row.setBackgroundColor(Color.WHITE); 
 TextView num = new TextView(this); 
 num.setGravity(Gravity.CENTER_HORIZONTAL); 
 num.setText(""); 
 num.setTextSize(); 
 num.setLayoutParams(paramsNum); 
 TextView firstName = new TextView(this); 
 firstName.setText("Азизова"); 
 firstName.setTextSize(); 
 firstName.setGravity(Gravity.CENTER_HORIZONTAL);; 
 firstName.setLayoutParams(ParamsfirstNameLabel); 
 TextView Name = new TextView(this); 
 Name.setText(" Азиза"); 
 Name.setGravity(Gravity.CENTER_HORIZONTAL); 
 Name.setTextSize(); 
 Name.setLayoutParams(ParamsName); 
 TextView age = new TextView(this); 
 age.setText(""); 
 age.setTextSize(); 
 age.setGravity(Gravity.CENTER_HORIZONTAL);; 
 age.setLayoutParams(paramsAge); 
 row.addView(num); 
 row.addView(firstName); 
 row.addView(Name); 
 row.addView(age); 
 myTable.addView(row); 
 setContentView(myTable); 
 } 
 } 
 Тавре ки айён аст, мантиқи ин барнома он қадар душвор нест, бинобар ин
 шарҳу тавзеҳ додани ҳар як сатри он зарур намебошад. 
 Натиҷаи барнома: 
 RelativeLayout (қолаби нисбӣ) барои гузоштани элементҳои духтарӣ 
 нисбат ба мавқеи объекти волидайнӣ истифода бурда мешавад. 
 Атрибутҳои асосии ба объекти волидайнӣ вобаста: 
 android:layout_alignParentBottom – баробаркунӣ нисбат ба қисми поёнии
 волидайн. 
 android:layout_alignParentLeft - баробаркунӣ нисбат ба қисми чапи 
 волидайн. 
 android:layout_alignParentRight - баробаркунӣ нисбат ба қисми рости 
 волидайн. 
 android:layout_alignParentTop - баробаркунӣ нисбат ба қисми болоии 
 волидайн. 
 android:layout_centerInParent - баробаркунӣ нисбат ба маркази волидайн
 бо самтҳои амудӣ ё уфуқӣ. 
 android:layout_centerHorizontal – баробаркунӣ нисбат ба маркази объекти
 волидайнӣ ба самти уфуқӣ. 
 android:layout_centerVertical - баробаркунӣ нисбат ба маркази объекти
 волидайнӣ ба самти амудӣ. 
 Баъзан барои ба таври қулай ҷобаҷогузорӣ метавон якчанд атрибутро якҷоя
 истифода кард. 
 Компонентҳоро метавон нисбат ба дигар компонентҳо низ ҷобаҷо гузошт.
 Барои ин компонент бояд дорои идентификатор бошад. Дар ин ҳолат аз 
 атрибутҳои зерин истифода бурда мешавад. 
 android:layout_above – гузоштан дар болои компоненти нишондодашуда. 
 android:layout_below - гузоштан дар зери компоненти нишондодашуда. 
 android:layout_alignLeft – баробаркунӣ нисбат ба тарафи чапи 
 компоненти нишондодашуда. 
 android:layout_alignRight - баробаркунӣ нисбат ба тарафи рости 
 компоненти нишондодашуда. 
 android:layout_alignTop - баробаркунӣ нисбат ба тарафи болоии 
 компоненти нишондодашуда. 
 android:layout_alignBottom - баробаркунӣ нисбат ба тарафи поёнии 
 компоненти нишондодашуда. 
 android:layout_toLeftOf – тарафи (кунҷи) рости компонент дар тарафи 
 чапи компоненти нишондодашуда гузошта мешавад. 
 android:layout_toRightOf - тарафи (кунҷи) чапи компонент дар тарафи 
 рости компоненти нишондодашуда гузошта мешавад. 
 Барои дар рӯӣ ҳамдигар ҷойгир нашудани компонентҳо, метавон аз 
 атрибутҳои зерин, ки фосилаи байни компонентҳоро муайян мекунанд истифода
 кард. 
 android:layout_marginTop 
 android:layout_marginBottom 
 android:layout_marginLeft 
 android:layout_marginRight 
 Мисоли. Ҳоло дар экран як элементи EditText ва як элементи Button тавре
 мегузорем, ки тугмача дар тарафи рости майдони матнӣ ҷойгир шавад. 
 Файли xml. 
 <?xml version="." encoding="utf-"?> 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" > 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_alignParentLeft="true" 
 android:layout_toLeftOf="@+id/button" 
 android:hint="Номатонро дохил кунед..." > 
 </EditText> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_alignParentRight="true" 
 android:text="Равон кардан!" > 
 </Button> 
 </RelativeLayout> 
 Натиҷаи барнома: 
 Мисоли. Истифодаи як чанд тугмача дар RelativeLayout. 
 <?xml version="." encoding="utf-"?> 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent"> 
 <Button android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:id="@+id/button" 
 android:text="Button "/> 
 <Button android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:id="@+id/button" 
 android:layout_toRightOf="@id/button" 
 android:text="Button (layout_toRightOf)"/> 
 <Button android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:id="@+id/button" 
 android:layout_below="@id/button" 
 android:text="Button (layout_below)"/> 
 <Button android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:id="@+id/button" 
 android:layout_below="@id/button" 
 android:layout_toRightOf="@id/button" 
 android:text="Button (layout_below and layout_toRightOf)"/> 
 </RelativeLayout> 
 Натиҷаи барнома: 
 Мисоли. Истифодаи экчанд элемент: 
 <?xml version="." encoding="utf-"?> 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 android:background="#eee"> 
 <TextView android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_centerHorizontal="true" 
 android:layout_marginTop="dp" 
 android:textSize="sp" 
 android:text="www.android.tj"/> 
 <RelativeLayout android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:layout_centerInParent="true" 
 android:background="#ccc" 
 android:paddingTop="dp"> 
 <TextView android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_centerHorizontal="true" 
 android:id="@+id/title" 
 android:layout_marginBottom="dp" 
 android:textStyle="bold" 
 android:text="Иттилоотатонро ворид кунед!"/> 
 <TextView android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_marginLeft="dp" 
 android:layout_marginRight="dp" 
 android:id="@+id/text_login" 
 android:layout_below="@id/title" 
 android:text="Сиркалима:"/> 
 <EditText android:layout_width="fill_parent" 
 android:layout_height="dp" 
 android:layout_marginRight="dp" 
 android:layout_below="@id/title" 
 android:layout_toRightOf="@id/text_login"/> 
 <TextView android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_marginTop="dp" 
 android:layout_marginLeft="dp" 
 android:layout_marginRight="dp" 
 android:id="@+id/text_password" 
 android:layout_below="@id/text_login" 
 android:text="Рамз:"/> 
 <EditText android:layout_width="fill_parent" 
 android:layout_height="dp" 
 android:layout_marginRight="dp" 
 android:layout_marginTop="dp" 
 android:layout_below="@id/text_login" 
 android:layout_toRightOf="@id/text_password"/> 
 <Button android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Ворид шудан" 
 android:layout_margin="dp" 
 android:id="@+id/btn_enter" 
 android:layout_centerHorizontal="true" 
 android:layout_below="@id/text_password"/> 
 </RelativeLayout> 
 <TextView android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_alignParentBottom="true" 
 android:layout_centerHorizontal="true" 
 android:textSize="sp" 
 android:textColor="#f" 
 android:id="@+id/reg_link" 
 android:text="Ба қайд гирифтан"/> 
 <TextView android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_centerHorizontal="true" 
 android:layout_above="@id/reg_link" 
 android:textSize="sp" 
 android:text="Агар номи корбари надошта бошед?"/> 
 </RelativeLayout> 
 Натиҷаи барнома: 
 Мисоли. Истифодаи хосиятҳои RelativeLayout тавассути элементҳои 
 TextView. 
 <?xml version="." encoding="utf-"?> 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent"> 
 <TextView android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_alignParentLeft="true" 
 android:textSize="pt" 
 android:text="Text " /> 
 <TextView android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_alignParentTop="true" 
 android:layout_centerHorizontal="true" 
 android:textSize="pt" 
 android:text="Text " /> 
 <TextView android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_alignParentTop="true" 
 android:layout_alignParentRight="true" 
 android:textSize="pt" 
 android:text="Text " /> 
 <TextView android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_alignParentLeft="true" 
 android:layout_centerVertical="true" 
 android:textSize="pt" 
 android:text="Text " /> 
 <TextView android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_centerInParent="true" 
 android:textSize="pt" 
 android:text="Text " /> 
 <TextView android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_alignParentRight="true" 
 android:layout_centerVertical="true" 
 android:textSize="pt" 
 android:text="Text " /> 
 <TextView android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_alignParentBottom="true" 
 android:textSize="pt" 
 android:text="Text " /> 
 <TextView android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_centerHorizontal="true" 
 android:layout_alignParentBottom="true" 
 android:textSize="pt" 
 android:text="Text " /> 
 <TextView android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_alignParentBottom="true" 
 android:layout_alignParentRight="true" 
 android:textSize="pt" 
 android:text="Text " /> 
 </RelativeLayout> 
 Натиҷаи барнома: 
 Мисоли. Сохтани саҳифаи дохилшавӣ. 
 <?xml version="." encoding="utf-"?> 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 > 
 <RelativeLayout android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:paddingTop="dp" 
 android:paddingBottom="dp" 
 android:background="#ddd" 
 android:id="@+id/list"> 
 <ImageView 
 android:layout_gravity="center" 
 android:layout_marginRight="dp" 
 android:layout_marginLeft="dp" 
 android:scaleType="fitXY" 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:src="@drawable/anonim" 
 android:id="@+id/contact_image" /> 
 <TextView android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Махфӣ" 
 android:textSize="sp" 
 android:textStyle="bold" 
 android:layout_toRightOf="@id/contact_image" 
 android:id="@+id/contact_name" /> 
 <LinearLayout android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:layout_toRightOf="@id/contact_image" 
 android:layout_below="@id/contact_name"> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="Зангҳои беҷавоб аз муштарӣ -, 
 вақт:: //" 
 android:layout_weight="." 
 android:textSize="sp" 
 android:maxLines=""/> 
 <TextView android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:layout_weight="." 
 android:layout_gravity="bottom" 
 android:gravity="right" 
 android:paddingRight="dp" 
 android:text="//" 
 android:textSize="sp" 
 android:textColor="#f" /> 
 </LinearLayout> 
 </RelativeLayout> 
 <Button android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="Тоза кардан" 
 android:gravity="center" 
 android:layout_below="@id/list" /> 
 </RelativeLayout> 
 Натиҷаи барнома: 
 Барои ба сурати динамикӣ сохтани RelativeLayout метавон аз барномаи 
 зерин истифода кард: 
 package com.example.user.myfirstapplication; 
 import android.annotation.SuppressLint; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.ViewGroup; 
 import android.widget.Button; 
 import android.widget.EditText; 
 import android.widget.RelativeLayout; 
 public class MainActivity extends AppCompatActivity { 
 @SuppressLint("ResourceType") 
 @Override 
 protected void onCreate(Bundle savedInstanceState) 
 { 
 super.onCreate(savedInstanceState); 
 // setContentView(R.layout.activity_main); 
 EditText editText = new EditText(this); 
 RelativeLayout.LayoutParams params = new RelativeLayout. 
 LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
 ViewGroup.LayoutParams.WRAP_CONTENT); 
 params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
 params.addRule(RelativeLayout.LEFT_OF, ); 
 editText.setLayoutParams(params); 
 editText.setHint("Номатонро дохил кунед!"); 
 Button button = new Button(this); 
 RelativeLayout.LayoutParams params = new RelativeLayout. 
 LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
 ViewGroup.LayoutParams.WRAP_CONTENT); 
 params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
 button.setLayoutParams(params); 
 button.setText("Равон кардан!"); 
 button.setId(Integer.parseInt("")); 
 RelativeLayout layout = new RelativeLayout(this); 
 layout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup. 
 LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams. 
 MATCH_PARENT)); 
 layout.addView(editText); 
 layout.addView(button); 
 setContentView(layout); 
 } 
 } 
 Натиҷаи барнома: 
 Тавассути қолаби RelativeLayout метавон тасмачаи доимӣ (беҳаракат) сохт,
 яъне тасмачае, ки якҷоя бо экран тоб намехурад. Барои иҷрои ин амал аз атрибути
 android:layout_alignParentBottom истифода бурда мешавад. 
 <?xml version="." encoding="utf-"?> 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical" > 
 <LinearLayout 
 android:id="@+id/layout_bottom_bar" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:layout_alignParentTop="true" 
 android:background="#" 
 android:clickable="true" 
 android:gravity="center" 
 android:orientation="horizontal" 
 android:padding="dip" > 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:background="#" 
 android:gravity="center" 
 android:padding="dip" 
 android:text="Тасмачаи беҳаракат" 
 android:textColor="#FFFFFF" /> 
 </LinearLayout> 
 <ListView 
 android:id="@+id/listView" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" /> 
 </RelativeLayout> 
 Код барои сохтани руйхати тобхуранда. 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.widget.ArrayAdapter; 
 import android.widget.ListView; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 ListView listView = (ListView) findViewById(R.id.listView); 
 final String[] fruitsTaj = new String[] { 
 "Себ", "Зардолу", "Шафтолу", "Олуболӯ", "Гелос", 
 "Анор", "Ангур", "Анҷир", "Нок", "Чормағз", 
 "Бодом", "Писта" 
 }; 
 // Истифодаи адаптери додаҳо 
 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
 android.R.layout.simple_list_item_, fruitsTaj); 
 listView.setAdapter(adapter); 
 } 
 } 
 Натиҷаи барнома: 
 Мисоли. Ба таври барномавӣ сохтани қолаби RelativeLayout. 
 package com.example.user.myfirstapplication; 
 import android.annotation.SuppressLint; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.ViewGroup; 
 import android.widget.Button; 
 import android.widget.RelativeLayout; 
 public class MainActivity extends AppCompatActivity { 
 @SuppressLint("ResourceType") 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 // setContentView(R.layout.activity_main); 
 Button button = new Button(this); 
 RelativeLayout.LayoutParams buttonParam = new RelativeLayout. 
 LayoutParams( 
 ViewGroup.LayoutParams.WRAP_CONTENT, 
 ViewGroup.LayoutParams.WRAP_CONTENT 
 ); 
 button.setText("Button "); 
 button.setId(); 
 button.setLayoutParams(buttonParam); 
 Button button = new Button(this); 
 RelativeLayout.LayoutParams buttonParam = new RelativeLayout. 
 LayoutParams( 
 ViewGroup.LayoutParams.WRAP_CONTENT, 
 ViewGroup.LayoutParams.WRAP_CONTENT 
 ); 
 buttonParam.addRule(RelativeLayout.BELOW, button.getId()); 
 buttonParam.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
 button.setText("Button "); 
 button.setLayoutParams(buttonParam); 
 RelativeLayout relativeLayout = new RelativeLayout(this); 
 RelativeLayout.LayoutParams param = new RelativeLayout. 
 LayoutParams( 
 ViewGroup.LayoutParams.FILL_PARENT, 
 ViewGroup.LayoutParams.FILL_PARENT 
 ); 
 relativeLayout.setLayoutParams(param); 
 relativeLayout.addView(button); 
 relativeLayout.addView(button); 
 setContentView(relativeLayout); 
 } 
 } 
 Натиҷаи барнома: 
 Сар карда аз версияи Android. бо номи GridLayout қолаби нав пайдо шуд.
 Қолаби мазкур ба TableLayout монанд буда, дорои имкониятҳои иловагии зиёде
 мебошад. 
 Баъдтар барои якҷоякоркунӣ класси android.support.v. widget.GridLayout
 илова карда шуд, ки имконияти истифодабарии компоненти мазкурро барои 
 таҷҳизотҳои кӯҳна фароҳам овард. 
 Дар GridLayout барои дилхоҳ компонент метавон сатр ва сутунро муайян
 карда, компоненти лозимиро дар катакчаи лозимӣ гузошт. 
 Барои қолаби мазкур истифодаи атрибути вазн иҷозат дода намешавад. Ба
 ҷойи он метавон аз атрибути layout_gravity истифода кард. 
 Атрибутҳои layout_column ва layout_columnSpan мувофиқан барои сутун-
 чаи чаптар ва миқдори сутунчаҳое, ки компонент банд мекунад истифода бурда
 мешаванд. Илова бар ин, аз layout_row ва layout_rowSpan низ истифода бурдан
 мумкин аст. 
 Барои элементҳои духтарӣ муқарракунии атрибутҳои layout_height ва 
 layout_width шарт намебошад. Ба таври пешфарз онҳо дорои қимати 
 wrap_content мебошанд. 
 Барои муайянкунии миқдори сутунҳо ва сатрҳо аз атрибутҳои 
 android:columnCount="number" ва android:rowCount="number" мувофиқан 
 истифода бурда мешавад. 
 Мисоли. Сохтани клавиатураи рақамӣ. 
 <?xml version="." encoding="utf-"?> 
 <GridLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_gravity="center" 
 android:columnCount="" 
 android:orientation="horizontal" > 
 <Button android:text="" /> 
 <Button android:text="" /> 
 <Button android:text="" /> 
 <Button android:text="" /> 
 <Button android:text="" /> 
 <Button android:text="" /> 
 <Button android:text="" /> 
 <Button android:text="" /> 
 <Button android:text="" /> 
 <Button android:text="" /> 
 <Button android:text="" /> 
 <Button android:text="" /> 
 <Button android:text="" /> 
 <Button android:text="" /> 
 <Button android:text="" /> 
 <Button android:text="" /> 
 </GridLayout> 
 Натиҷаи барнома: 
 Яке аз хосиятҳои ҷолиби диққати GridLayout атрибути 
 android:columnCount мебошад. Атрибути мазкур миқдори сутунчаҳоро дар 
 GridLayout муайян мекунад. 
 Мисоли. Истифодаи хосиятҳои GridLayout. 
 <?xml version="." encoding="utf-"?> 
 <GridLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_gravity="center" 
 android:columnCount="" 
 android:orientation="horizontal" > 
 <Button 
 android:layout_column="" 
 android:text="/" /> 
 <Button android:text="" /> 
 <Button android:text="" /> 
 <Button android:text="" /> 
 <Button android:text="*" /> 
 <Button android:text="" /> 
 <Button android:text="" /> 
 <Button android:text="" /> 
 <Button android:text="-" /> 
 <Button android:text="" /> 
 <Button android:text="" /> 
 <Button android:text="" /> 
 <Button 
 android:layout_rowSpan="" 
 android:text="+" /> 
 <Button 
 android:layout_columnSpan="" 
 android:text="" /> 
 <Button android:text="" /> 
 <Button 
 android:layout_columnSpan="" 
 android:text="=" /> 
 </GridLayout> 
 Натиҷаи барнома: 
 Мисоли. Истифодаи массиви сатрӣ. 
 <RelativeLayout xmlns:tools="http://schemas.android.com/tools" 
 xmlns:android="http://schemas.android.com/apk/res/android" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" > 
 <GridView 
 android:id="@+id/gridview" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 android:columnWidth="dp" 
 android:gravity="center" 
 android:numColumns="auto_fit" 
 android:stretchMode="columnWidth" > 
 </GridView> 
 </RelativeLayout> 
 Коди барнома: 
 package com.example.user.myfirstapplication; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.View; 
 import android.widget.AdapterView; 
 import android.widget.AdapterView.OnItemClickListener; 
 import android.widget.ArrayAdapter; 
 import android.widget.GridView; 
 import android.widget.TextView; 
 import android.widget.Toast; 
 public class MainActivity extends AppCompatActivity { 
 GridView gridView; 
 static final String[] numbers = new String[] { 
 "A", "B", "C", "D", "E", 
 "F", "G", "H", "I", "J", 
 "K", "L", "M", "N", "O", 
 "P", "Q", "R", "S", "T", 
 "U", "V", "W", "X", "Y", "Z" 
 }; 
 @Override 
 public void onCreate(Bundle savedInstanceState) 
 { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 gridView = (GridView) findViewById(R.id.gridview); 
 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
 android.R.layout.simple_list_item_, numbers); 
 gridView.setAdapter(adapter); 
 gridView.setOnItemClickListener(new OnItemClickListener() 
 { 
 @Override 
 public void onItemClick(AdapterView<?> parent, View v, 
 int position, long id) { 
 Toast.makeText(getApplicationContext(), 
 ((TextView) v).getText(), 
 Toast.LENGTH_SHORT).show(); 
 } 
 }); 
 } 
 } 
 Натиҷаи барнома: 
 Мисоли.Истифодаи тугмачаҳо. 
 <GridLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:id="@+id/GridLayout" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:columnCount="" 
 android:rowCount="" 
 android:orientation="horizontal" 
 tools:context=".MainActivity" > 
 <Button 
 android:id="@+id/button" 
 android:layout_gravity="left|top" 
 android:text="Button" /> 
 <Button 
 android:id="@+id/button" 
 android:layout_gravity="left|top" 
 android:text="Button" /> 
 <Button 
 android:id="@+id/button" 
 android:layout_gravity="left|top" 
 android:text="Button" /> 
 <Button 
 android:id="@+id/button" 
 android:layout_gravity="left|top" 
 android:text="Button" /> 
 </GridLayout> 
 Натиҷаи барнома: 
 Мисоли. Клавиатураи рақамӣ. 
 <GridLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_gravity="center" 
 android:columnCount="" > 
 <Button 
 android:id="@+id/Button" 
 android:layout_height="wrap_content" 
 android:layout_width="dp" 
 android:textSize="pt" 
 android:text=""/> 
 <Button 
 android:id="@+id/Button" 
 android:layout_height="wrap_content" 
 android:layout_width="dp" 
 android:textSize="pt" 
 android:text=""/> 
 <Button 
 android:id="@+id/Button" 
 android:layout_height="wrap_content" 
 android:layout_width="dp" 
 android:textSize="pt" 
 android:text=""/> 
 <Button 
 android:id="@+id/Button" 
 android:layout_height="wrap_content" 
 android:layout_width="dp" 
 android:textSize="pt" 
 android:text=""/> 
 <Button 
 android:id="@+id/Button" 
 android:layout_height="wrap_content" 
 android:layout_width="dp" 
 android:textSize="pt" 
 android:text=""/> 
 <Button 
 android:id="@+id/Button" 
 android:layout_height="wrap_content" 
 android:layout_width="dp" 
 android:textSize="pt" 
 android:text=""/> 
 <Button 
 android:id="@+id/Button" 
 android:layout_height="wrap_content" 
 android:layout_width="dp" 
 android:textSize="pt" 
 android:text=""/> 
 <Button 
 android:id="@+id/Button" 
 android:layout_height="wrap_content" 
 android:layout_width="dp" 
 android:textSize="pt" 
 android:text=""/> 
 <Button 
 android:id="@+id/Button" 
 android:layout_height="wrap_content" 
 android:layout_width="dp" 
 android:textSize="pt" 
 android:text=""/> 
 <Button 
 android:id="@+id/Button" 
 android:layout_height="wrap_content" 
 android:layout_width="dp" 
 android:layout_columnSpan="" 
 android:textSize="pt" 
 android:text=""/> 
 <Button 
 android:id="@+id/Button" 
 android:layout_height="wrap_content" 
 android:layout_width="dp" 
 android:layout_columnSpan="" 
 android:textSize="pt" 
 android:text="*"/> 
 <Button 
 android:id="@+id/Button" 
 android:layout_height="wrap_content" 
 android:layout_width="dp" 
 android:textSize="pt" 
 android:text="#"/> 
 </GridLayout> 
 Натиҷаи барнома: 
 ConstraintLayout контейнери типи нав буда, инкишофи контейнери 
 RelativeLayout ба ҳисоб меравад. Контейнери мазкур имконияти сохтани 
 лоиҳаҳои мувофиқ ва дорои интерфейси масштабронидашударо фароҳам меорад. 
 ConstraintLayout сар карда аз версияи Android Studio. ба руйхати 
 компонентҳои стандартӣ илова карда шудааст. Ҳангоми сохтани лоиҳа ба намуди
 пешфарз дар файлҳои layout мавҷуд мебошад. 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Hello World!" 
 app:layout_constraintBottom_toBottomOf="parent" 
 app:layout_constraintLeft_toLeftOf="parent" 
 app:layout_constraintRight_toRightOf="parent" 
 app:layout_constraintTop_toTopOf="parent" /> 
 </android.support.constraint.ConstraintLayout> 
 Агар истифодабаранда(барномасоз) версияи Android Studio. ё поёнтар аз
 онро истифода кардани бошад, пас зарурати иловакунии имкониятҳои 
 ConstraintLayout пеш меояд. 
 Ҳоло усули иловакунии ConstraintLayout барои Android Studio то версияи
 Дар охири теги dependencies сатри compile 'com.android.support. 
 constraint:constraint-layout:..' –ро илова мекунем. 
 Пас аз сабти файл дар Android Studio пайғоми дорои истиноди "Sync Now"
 пайдо мешавад. Ин истинодро пахш карда, лоиҳаро бо файли build.gradle 
 ҳамоҳангсозӣ мекунем. 
 Барои муайянкунии мавқеи ягон элемент дар дохили ConstraintLayout зарур
 аст, ки маҳдудиятҳо ишора карда шаванд. Дар ҳолати хусусӣ барои муайянкунии
 мавқеъ нисбат ба ягон элемент аз маҳдудиятҳои зерин истифода бурда мешаванд:
 layout_constraintLeft_toLeftOf: сарҳади чап нисбат ба сарҳади чапи 
 дигар элемент ҷойгузорӣ карда мешавад; 
 layout_constraintLeft_toRightOf: сарҳади чап нисбат ба сарҳади рости
 дигар элемент ҷойгузорӣ карда мешавад; 
 layout_constraintRight_toLeftOf: сарҳади рост нисбат ба сарҳади чапи
 дигар элемент ҷойгузорӣ карда мешавад; 
 layout_constraintRight_toRightOf: сарҳади рост нисбат ба сарҳади рости
 дигар элемент ҷойгузорӣ карда мешавад; 
 layout_constraintTop_toTopOf: сарҳади болоӣ нисбат ба сарҳади болоии
 дигар элемент ҷойгузорӣ карда мешавад; 
 layout_constraintBottom_toBottomOf: сарҳади поёни нисбат ба сарҳади 
 болоии дигар элемент ҷойгузорӣ карда мешавад; 
 layout_constraintBaseline_toBaselineOf: хати базавӣ нисбат ба хати 
 базавии дигар элемент ҷойгузорӣ карда мешавад; 
 layout_constraintTop_toBottomOf: сарҳади болоӣ нисбат ба сарҳади 
 поёнии дигар элемент ҷойгузорӣ карда мешавад; 
 layout_constraintBottom_toTopOf: сарҳади поёнӣ нисбат ба сарҳади 
 болоии дигар элемент ҷойгузорӣ карда мешавад; 
 layout_constraintStart_toEndOf: ба layout_constraintLeft_toRightOf мо-
 нанд аст; 
 layout_constraintStart_toStartOf: ба layout_constraintLeft_toLeftOf мо-
 нанд аст; 
 layout_constraintEnd_toStartOf: ба layout_constraintRight_toLeftOf мо-
 нанд аст; 
 layout_constraintEnd_toEndOf: ба layout_constraintRight_toRightOf мо-
 нанд аст. 
 Ҷойгузорӣ метавонад, нисбат ба сарҳадҳои худи контейнери ContentLayout
 (дар ин ҳолат маҳдудият дорои қимати "parent"мебошад), ё нисбати дигар 
 элементи дохили ConstraintLayout иҷро карда шавад. Дар ин ҳолат ба сифати
 маҳдудият id-и ин элемент бахшида мешавад. 
 Барои нишон додани ҷойи холигӣ аз элементе, ки нисбат ба он ҷойгузорӣ
 ба амал меояд аз атрибутҳои зерин истифода бурда мешавад: 
 android:layout_marginLeft: ҷойи холигӣ аз тарафи чапи сарҳад; 
 android:layout_marginRight: ҷойи холигӣ аз тарафи рости сарҳад; 
 android:layout_marginTop: ҷойи холигӣ аз тарафи болоии сарҳад; 
 android:layout_marginBottom: ҷойи холигӣ аз тарафи поёнии сарҳад; 
 android:layout_marginStart: ҷойи холигӣ аз тарафи чапи сарҳад; 
 android:layout_marginEnd: ҷойи холигӣ аз тарафи рости сарҳад; 
 Ҳоло бо мисоли содае ин атрибутҳоро дида мебароем. Барои ин барномаи нав
 сохта, файли қолаби (activity_main) онро ба сурати зерин тағйир медиҳем: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:android="http://sche-
 mas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Hello World!" 
 app:layout_constraintTop_toTopOf="parent" 
 android:layout_marginTop="dp" 
 android:layout_marginLeft="dp" 
 app:layout_constraintLeft_toLeftOf="parent" /> 
 </android.support.constraint.ConstraintLayout> 
 Дар ин ҷо ду маҳдудият нисбат ба контейнери асосӣ (волидайнӣ), яъне Con-
 straintLayout истифода шудааст. Аз ин рӯ маҳдудиятҳо дорои қимати parent 
 мебошанд. Дар натиҷа элементи TextView нисбат ба қисми болоӣ ва чапи 
 контейнер ҷобаҷо шудааст: 
 Ҷойҳои холӣ худ аз худ ҳеҷ амалро иҷро намекунанд, бинобар ин ба мо 
 лозим аст, ки маҳдудиятҳои лозимиро муайян кунем, яъне муайян кунем, ки 
 элемент нисбат ба кадом элемент ҷойгир мешавад. Мисол. 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 android:id="@+id/activity_main" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent"> 
 <ImageView 
 android:text="TextView" 
 android:background=" dd" 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:id="@+id/imageView" 
 app:layout_constraintLeft_toLeftOf="parent" 
 android:layout_marginLeft="dp" 
 app:layout_constraintTop_toTopOf="parent" 
 android:layout_marginTop="dp" /> 
 <TextView 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:textSize="sp" 
 android:id="@+id/textView" 
 android:text="@string/rudaki_text" 
 app:layout_constraintLeft_toRightOf="@+id/imageView" 
 android:layout_marginLeft="dp" 
 app:layout_constraintTop_toBottomOf="@+id/imageView" 
 android:layout_marginTop="dp" 
 app:layout_constraintRight_toRightOf="parent" 
 android:layout_marginRight="dp" 
 app:layout_constraintBottom_toTopOf="@+id/button" 
 android:layout_marginBottom="dp" /> 
 <Button 
 android:text="Cancel" 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:id="@+id/button" 
 app:layout_constraintRight_toRightOf="parent" 
 android:layout_marginRight="dp" 
 app:layout_constraintBottom_toBottomOf="parent" 
 android:layout_marginBottom="dp" /> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:text="OK" 
 app:layout_constraintBaseline_toBaselineOf="@+id/button" 
 app:layout_constraintRight_toLeftOf="@+id/button" /> 
 </android.support.constraint.ConstraintLayout> 
 Агар барномаро иҷро кунем, натиҷаи зерин ба даст меояд: 
 Дар ин ҷо аввалан элемент нисбат ба контейнери ConstraintLayout 
 ҷойгузорӣ карда шудааст, яъне аз сарҳади болоӣ ва чапи контейнер то андозаи
 мувофиқи ImageView бо dip. 
 Сониян, нисбат ба контейнер инчунин тугмачаи дорои id=button 
 ҷойгузорӣ шудааст, яъне аз тарафи рост ва поёни сарҳади контейнер то сарҳади
 мувофиқи Button бо андозаи dip. 
 Солисан тугмачаи дорои id=button нисбат ба тугмачаи якум ҷойгузорӣ 
 шудааст, яъне аз сарҳади рости тугмачаи дуюм то сарҳади чапи тугмачаи якум
 (app:layout_constraintRight_toLeftOf ="@+id/button") бо андозаи dip. Барои
 дар як хат қарор додани тугмачаҳо аз атрибути баробаркунӣ аз рӯи хати базавӣ
 истифода шудааст: app:layout_constraintBaseline_toBaselineOf="@+id/button".
 Элементи TextView бо матни худ нисбат ба контейнер, элементи 
 ImageView ва тугмачаи дуюм ҷойгузорӣ шудааст. 
 Агар ба реҷаи албомӣ низ гузарем, ин муносибат нигоҳ доша мешавад. 
 кадом хусусият фарқ мекунад? 
 мешаванд? 
 Боби. Фрагментҳо (Fragments) ва AlertDialog 
 Фрагмент (класси Fragment) як қисм ё рафтори интерфейси 
 истифодабарандаро муайян карда, шурӯъ аз версияи API (Android.) пайдо
 шудаанд. Аз рӯи амалкард фрагментҳо ба активитиҳо монанд буда, фарқият дар
 он аст, ки дар як активитӣ метавон аз якчанд фрагмент истифода кард. Барои
 ҳамбастагӣ бо дигар воситаҳо (воситаҳои кӯҳна) китобхонаи махсуси Android
 Support library навишта шудааст. Ҳамин тариқ, дар айни ҳол ду намуди класси
 Fragment мавҷуд аст: барои воситаҳои нав ва барои воситаҳои кӯҳна. 
 Қайд кардан ба маврид аст, ки фрагментҳо наметавонанд активитиҳоро 
 иваз кунанд, зеро онҳо мустақилона наметавонанд фаъолият намоянд.Бинобар ин
 дар файли манифест қайд кардани онҳо шарт намебошад. 
 Дар вақти лозимӣ барноманавис метавонад як нусхаи лоиҳаро барои 
 воситаҳои кӯҳна низ созад, аммо ин амал хело душвор мебошад. Метавон як код
 барои гузаштан аз як активитӣ ба активатии дигар ҳангоми истифодабарии 
 планшетҳо ва дигар код барои гузаштан аз як равзана (экран) ба равзанаи дигари
 (экрани) барои планшет навишт. Барои садатар ҳал намудани ин масъала 
 фрагментҳо пешниҳод карда шудаанд. 
 Бо суханҳои дигар фрагмент низ монанади тугмачаҳои Button, TextView ё
 LinearLayout бо имкониятҳои иловагӣ мебошад. Монанди тугмачаҳо фрагментро
 низ метавон дар равзанаи активитӣ гузошт. Қайд кардан ба маврид аст, ки як
 франгментро метавон дар ду активити гуногун танзим кард. Барои тугмачаҳо ин
 имконият мавҷуд намебошад. Барои ҳар як активити лозим аст, ки тугмачаҳои
 мувофиқ сохта шавад. 
 Фрагментҳо монанди маҳсулоти сохтмонӣ мебошанд. Ҳангоми лозим 
 шудан метавон фрагменти нав илова кард ва ё дар вақти лозимӣ метавон ягон
 фрагменти нодаркорро нест кард ва ё ин ки як фрагментро ба фрагменти дигар
 иваз кард. 
 Фрагмент метавонад дорои файли нишона (разметка) бошад ва ё бе файли
 нишона кор кунад. Ҳар як фрагмент инчунин даври зиндагӣ (жизненный цикл) 
 дошта, аз рӯӣ аксар хосиятҳо ба даври зиндагии активитиҳо монанд мебошад.
 Якчанд шаклҳои фрагментҳо мавҷуд мебошанд: - ListFragment, 
 DialogFragment ва ғайра. 
 Ду варианти истифодабарии фрагмент дар барнома мавҷуд аст. Моҳияти 
 варианти якум аз он иборат аст, ки вақти сохтан дар файли нишона тавассути теги
 fragment метавон фрагментро нишон дод. 
 Варианти дуюм бошад, иловакунии фрагмент ба таври динамикӣ мебошад. 
 Принсипи кори ин амал чунин аст: дар нишона (разметка) аз ViewGroup макет
 илова карда мешавад, ки ҳамчун контейнер барои фрагмент истифода шавад. 
 Одатан барои ин мақсад FrameLayout истифода бурда мешавад. 
 Дар ибтидо истифодаи фрагментҳо каме душвор буда, баъдтар бо одат 
 кардан истифодаи онҳо хело мувофиқ мешавад. 
 Кор бо усули кӯҳна 
 Барои ба моҳияти фрагментҳо хубтар сарфаҳм рафтан ибтидо як барномаи
 стандартӣ сохта, дар он якчанд тугмача ва компонентҳои гуногун мегузорем. Дар
 натиҷа файли қолаби асосии барнома шакли зеринро мегирад: 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:id="@+id/LinearLayout" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:gravity="center_horizontal" 
 android:orientation="vertical" 
 tools:context=".MainActivity" > 
 <Button 
 android:id="@+id/button" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="Нишон" /> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="Парчам" /> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="Суруди миллӣ" /> 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Маълумот оиди муқаддасоти миллӣ:" 
 android:textAppearance="?android:attr/textAppearanceLarge" /> 
 <ImageView 
 android:id="@+id/imageView" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:scaleType="fitCenter" 
 android:src="@drawable/parcham" /> 
 </LinearLayout> 
 Пас аз омодасозии активити барномаро иҷро мекунем, ки шакли зеринро 
 соҳиб гардад: 
 Ҳангоми пахш намудани тугмачаи мувофиқ барои дар қисми поёнии 
 равзана баровардани расми бо он мувофиқ аз коди зерин истифода мекунем: 
 package com.example.user.myapplication; 
 import android.graphics.Bitmap; 
 import android.graphics.BitmapFactory; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.View; 
 import android.view.View.OnClickListener; 
 import android.widget.Button; 
 import android.widget.ImageView; 
 public class MainActivity extends AppCompatActivity { 
 Button btnnishon,btnparcham,btnsurud; 
 ImageView myimg; 
 Bitmap bitmap; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 btnnishon=(Button)findViewById(R.id.button); 
 btnparcham=(Button)findViewById(R.id.button); 
 btnsurud=(Button)findViewById(R.id.button); 
 myimg=(ImageView) findViewById(R.id.imageView); 
 OnClickListener myBtnClLst= new OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 switch(v.getId()) { 
 case R.id.button: 
 bitmap = BitmapFactory.decodeResource(getResources(), 
 R.drawable.nishon); 
 myimg.setImageBitmap(bitmap); break; 
 case R.id.button: 
 bitmap = BitmapFactory.decodeResource(getResources(), 
 R.drawable.parcham); 
 myimg.setImageBitmap(bitmap); break; 
 case R.id.button: 
 bitmap = BitmapFactory.decodeResource(getResources(), 
 R.drawable.surud); 
 myimg.setImageBitmap(bitmap); break; 
 } 
 } 
 }; 
 btnnishon.setOnClickListener(myBtnClLst); 
 btnparcham.setOnClickListener(myBtnClLst); 
 btnsurud.setOnClickListener(myBtnClLst); 
 } 
 } 
 Ҳоло ин амалро тавассути фрагментҳо дида мебароем. Монанди 
 активитиҳо фрагментҳо низ дорои нишона ва класс мебошанд. Ибтидо ба сохтани
 нишона шурӯъ мекунем. Равзанаро метавон ба ду қисми мантиқӣ ҷудо кард: 
 қисми болоӣ (қисми бетағйир бо тугмачаҳо) ва қисми поёнӣ (барои матн ва расм).
 Ҳангоми пахш кардани тугмача расми қисми поёнӣ мувофиқан тағйир меёбад. 
 Ду нишонаи алоҳида бо номҳои fragment.xml (қисми болоии равзана) ва
 fragment.xml қисми поёнии равзана месозем. 
 Мӯҳтавои файли fragment.xml: 
 <?xml version="." encoding="utf-"?> 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical" > 
 <Button 
 android:id="@+id/button" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="Рыжик" /> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="Барсик" /> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="Мурзик" /> 
 </LinearLayout> 
 Мӯҳтавои файли fragment.xml: 
 <?xml version="." encoding="utf-"?> 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical" > 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Маълумот оиди муқаддасоти миллӣ:" 
 android:textAppearance="?android:attr/textAppearanceLarge" /> 
 <ImageView 
 android:id="@+id/imageView" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:scaleType="fitCenter" 
 android:src="@drawable/parcham" /> 
 </LinearLayout> 
 Акнун барои фрагментҳои сохтаамон класс месозем. 
 Класси Fragment: 
 package com.example.user.myapplication; 
 import android.os.Bundle; 
 import android.support.annotation.Nullable; 
 import android.support.v.app.Fragment; 
 import android.view.LayoutInflater; 
 import android.view.View; 
 import android.view.ViewGroup; 
 public class Fragment extends Fragment { 
 @Override 
 public View onCreateView(LayoutInflater inflater, ViewGroup 
 container, Bundle savedInstanceState) { 
 View rootView = 
 inflater.inflate(R.layout.fragment, container, false); 
 return rootView; 
 } 
 } 
 Класси Fragment: 
 package com.example.user.myapplication; 
 import android.os.Bundle; 
 import android.support.annotation.Nullable; 
 import android.support.v.app.Fragment; 
 import android.view.LayoutInflater; 
 import android.view.View; 
 import android.view.ViewGroup; 
 public class Fragment extends Fragment { 
 @Override 
 public View onCreateView(LayoutInflater inflater, ViewGroup 
 container, Bundle savedInstanceState) { 
 View rootView = 
 inflater.inflate(R.layout.fragment, container, false); 
 return rootView; 
 } 
 } 
 Қайд. Ҳангоми ворид (импорт) кардани класс, кушиш кунед, ки класси 
 android.support.v.app.Fragment ворид карда шавад на класси 
 android.app.Fragment. 
 Дар ин ҷо класси LayoutInflater барои таҳия намудани макети лозимӣ 
 истифода шудааст, ки иттилоотро аз XML-файли нишондодашуда мехонад. 
 Ба нишонаи асосӣ баргашта, дар реҷаи дизайни он ҳамаи элементҳоро ба
 ғайр аз LinearLayout тоза мекунем. Аз варақаи Containers -и панели асбобҳо
 (компонентҳо) элементи <fragment> - ро меёбем. 
 Аз ин ҷо ин элементро кашида ба LinearLayout монданӣ мешавем, ки 
 равзанаи зерин пайдо мешавад: 
 Аз ин равзанаи банди якум (Fragment)-ро интихоб карда тугмачаи Ок-ро
 пахш мекунем. 
 Ин амалро барои Fragment низ иҷро мекунем. 
 Пас аз иҷрои ин амалҳо матни активатамон шакли зеринро мешгирад: 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:id="@+id/LinearLayout" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:gravity="center_horizontal" 
 android:orientation="vertical" 
 tools:context=".MainActivity" > 
 <fragment 
 android:id="@+id/fragment" 
 android:name="com.example.user.myapplication.Fragment" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" /> 
 <fragment 
 android:id="@+id/fragment" 
 android:name="com.example.user.myapplication.Fragment" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" /> 
 </LinearLayout> 
 Пас аз иҷрои ин амалҳо барномаро иҷро мекунем, ки шакли ҳолати қаблиро 
 дорад: 
 Агар шакли экранро албомӣ гардонем, на он қадар хуб менамояд. Пас, 
 барои дар реҷаи албомӣ нағз намоиш додан, дар папкаи res бо номи layout-land
 папкаи нав сохта, дар он файли activity_main.xml-ро нусхабардорь карда 
 мегузорем. 
 Папкаи сохташудаамон ба намуди пешфарз дида намешавад. Пас барои 
 мушоҳида кардани он ба реҷаи Project гузашта, папкаи лозимиро меёбем. 
 Файли қолаби фрагментро ба сурати зерин тағйир медиҳем. 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:id="@+id/LinearLayout" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="horizontal" 
 android:baselineAligned="false" 
 tools:context=".MainActivity" > 
 <fragment 
 android:id="@+id/fragment" 
 android:name="com.example.user.myapplication.Fragment" 
 android:layout_width="dp" 
 android:layout_height="match_parent" 
 android:layout_weight="" 
 tools:layout="@layout/fragment" /> 
 <fragment 
 android:id="@+id/fragment" 
 android:name="com.example.user.myapplication.Fragment" 
 android:layout_width="dp" 
 android:layout_height="match_parent" 
 android:layout_weight="" 
 tools:layout="@layout/fragment" /> 
 </LinearLayout> 
 Барномаро иҷро мекунем, ки шакли зеринро соҳиб мешавад: 
 Ин амалро метавон ба таври муқаррарӣ низ иҷро кард. Бартарӣ дар он аст,
 ки дар ин ҷо мо нишонаро танҳо дар фрагментҳо иваз кардем. Аммо мӯҳтавои 
 фрагментҳоро тағйир надодем. 
 Мақсади фрагментҳо тавре ки қайд карда будем –ин навиштани лоиҳа 
 барои экранҳои гуногун (планшетҳо ва смартфонҳо) дар муддати кӯтоҳ мебошад.
 Баъзан ба чунин ҳолатҳое дучор шудан мумкин аст, ки дар як равзанаи 
 смартфонҳо руйхат нишон дода шуда бошаду, бо пахш кардани банди меню дар 
 экрани минбаъда ягон иттилооти вобаста ба он нишон дода шавад. Дар 
 планшетҳо бошад, метавон руйхат ва иттилооти вобаста ба онро дар як экран
 ҷойгир кард. 
 Биёед ба реҷаи планшет мегузарем. Бо номи layout-swdp дар папкаи res
 як папкаи нав месозем. Дар ин ҷо идентификатори sw маънои онро дорад ки
 андозаи минималии равзана метавонад ба dp баробар бошад, ки ба экрани 
 дюмаи планшет дар реҷаи албомӣ мувофиқ меояд. 
 Дар папкаи layout-land номи файли activity_main.xml-ро ба 
 activity_main_wide.xml (Refactor | Rename) номгузорӣ карда, онро ба папкаи
 layout мекӯчонем. Папкаи layout-land-ро акнун метавон нест кард. 
 Акнун бо номи values-land дар папкаи res/values-land папкаи нав сохта, дар
 дохили он бо номи refs.xml файли нав месозем. 
 <?xml version="." encoding="utf-"?> 
 <resources> 
 <item name="activity_main" type="layout">@layout/activity_main_wide 
 </item> 
 </resources> 
 Ин файл маънои онро дорад, ки дар реҷаи албомӣ ба сифати манбаи activ-
 ity_main манбаи layout/activity_main_wide истифода шавад. Лоиҳаро иҷро карда,
 метавон натиҷаро мушоҳида кард. 
 Ҳоло мисоли дигареро дида мебароем, ки дар он аз фрагментҳо васеъ 
 истифода шудааст. 
 Бигзор талаб карда шавад, ки дар зери лоиҳа меню сохта шавад, ки бо пахш
 кардани банди лозимӣ саҳифаи ба он мувофиқ кушода шавад. 
 Барои иҷрои ин амал бо номи BottomNavigationExample лоиҳаи нав сохта,
 файли color.xml-ро ба сурати зерин тағйир медиҳем. 
 <?xml version="." encoding="utf-"?> 
 <resources> 
 <color name="colorPrimary">#be</color> 
 <color name="colorPrimaryDark">#f</color> 
 <color name="colorAccent">#a</color> 
 <color name="colorNavIcon">#daef</color> 
 <color name="colorNavText">#b</color> 
 </resources> 
 Баъд аз ин, файли string.xml-ро низ ба сурати зерин тағйир медиҳем. 
 <resources> 
 <string name="app_name">Bottom Navigation Android Example 
 </string> 
 <string name="title_home">Home</string> 
 <string name="title_favorite">Favorite</string> 
 <string name="title_settings">Settings</string> 
 </resources> 
 Дар папкаи res бо номи menu як папка сохта, дар дохили он бо номи 
 navigation як файли menu_resource file месозем. 
 Мӯҳтавои файли сохтаамон шакли зеринро дорад: 
 <?xml version="." encoding="utf-"?> 
 <menu xmlns:android="http://schemas.android.com/apk/res/android"> 
 <item 
 android:id="@+id/navigation_home" 
 android:icon="@drawable/home" 
 android:title="@string/title_home" /> 
 <item 
 android:id="@+id/navigation_favorite" 
 android:icon="@drawable/favorite" 
 android:title="@string/title_favorite" /> 
 <item 
 android:id="@+id/navigation_settings" 
 android:icon="@drawable/settings" 
 android:title="@string/title_settings"/> 
 </menu> 
 Қайд. Дар ин ҷо атрибути android:icon нишондиҳанда расме мебошад, ки
 дар тугмача нишон дода мешавад. Бинобар ин, ибтидо расмҳои home favorite 
 ва settings -ро ки дорои пасванди.png мебошанд нусхабардорӣ карда, дар папкаи
 drawable мегузорем. 
 Пас аз ин, файли activity_main.xml-ро кушода онро ба сурати зайл тағйир
 медиҳем. 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:id="@+id/container" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <FrameLayout 
 android:id="@+id/fragment_container" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:layout_marginBottom="dp" 
 android:text="@string/title_home" 
 app:layout_constraintLeft_toLeftOf="parent" 
 app:layout_constraintTop_toTopOf="parent" /> 
 <android.support.design.widget.BottomNavigationView 
 android:id="@+id/navigation" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:background="@color/colorPrimary" 
 app:itemIconTint="@color/colorNavIcon" 
 app:itemTextColor="@color/colorNavText" 
 app:layout_constraintBottom_toBottomOf="parent" 
 app:layout_constraintLeft_toLeftOf="parent" 
 app:layout_constraintRight_toRightOf="parent" 
 app:menu="@menu/navigation" /> 
 </android.support.constraint.ConstraintLayout> 
 Ҳамин тариқ баъди ин амалҳо барномаро иҷро намоем, он шакли зеринро 
 мегирад: 
 Акнун дар барномаамон се фрагмент бо номҳои fragment_home, frag- 
 ment_settings ва fragment_favorite илова мекунем. Барои иҷрои ин амал, ибтидо
 дар папкаи layout файли xml-и онҳоро месозем, ки аз рӯи муҳтаво ба ҳам наздик
 мебошанд. Ҳоло барои намуна мӯҳтавои файли fragment_home.xml–ро меорем. 
 <?xml version="." encoding="utf-"?> 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent"> 
 <TextView 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_centerHorizontal="true" 
 android:layout_centerVertical="true" 
 android:text="@string/title_home" 
 android:textAppearance="@style/Base.TextAppearance. 
 AppCompat.Large" /> 
 </RelativeLayout> 
 Мӯҳтавои ду файли дигар низ айнан ҳамин хел буда, фақат параметри 
 android:text –ро бо параметри мувофиқ ба файл иваз мекунем. 
 Пас аз омода намудани версияи xml-и файлҳои fragment_home, 
 fragment_settings ва fragment_favorite ба сохтани класси ба онҳо мувофиқ шурӯъ
 мекунем. Тавре ки медонем, классҳо дар папкаи java сохта мешаванд. 
 Ҳоло мӯҳтавои файли HomeFragment.java-ро меорем, файлҳои боқимонда 
 низ бо он монанд мебошанд. 
 package com.example.user.myapplication; 
 import android.os.Bundle; 
 import android.support.annotation.Nullable; 
 import android.support.v.app.Fragment; 
 import android.view.LayoutInflater; 
 import android.view.View; 
 import android.view.ViewGroup; 
 public class HomeFragment extends Fragment { 
 @Nullable 
 @Override 
 public View onCreateView(LayoutInflater inflater, @Nullable 
 ViewGroup container, @Nullable Bundle savedInstanceState) { 
 return inflater.inflate(R.layout.fragment_home, null); 
 } 
 } 
 Дар файлҳои дигар танҳо қисми R.layout.fragment_home-ро ба сатри 
 мувофиқ ба файл иваз мекунем. 
 Ҳамин тариқ, фрагментҳои лозимӣ омода карда шудаанд. Акнун барои 
 истифода кардани фрагментҳои сохташуда файли MainActivity.java –ро ба сурати
 зерин тағйир медиҳем. 
 package com.example.user.myapplication; 
 import android.os.Bundle; 
 import android.support.annotation.NonNull; 
 import android.support.design.widget.BottomNavigationView; 
 import android.support.v.app.Fragment; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.MenuItem; 
 public class MainActivity extends AppCompatActivity implements Bot- 
 tomNavigationView.OnNavigationItemSelectedListener { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 //Фрагменти ба намуди пешфарзӣ 
 loadFragment(new HomeFragment()); 
 /*Ба даст овардани bottom navigation view ва навиштани метод 
 барои он*/ 
 BottomNavigationView navigation = findViewById 
 (R.id.navigation); 
 navigation.setOnNavigationItemSelectedListener(this); 
 } 
 @Override 
 public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
 Fragment fragment = null; 
 switch (item.getItemId()) { 
 case R.id.navigation_home: 
 fragment = new HomeFragment(); 
 break; 
 case R.id.navigation_favorite: 
 fragment = new FavoriteFragment(); 
 break; 
 case R.id.navigation_settings: 
 fragment = new SettingsFragment(); 
 break; 
 } 
 return loadFragment(fragment); 
 } 
 private boolean loadFragment(Fragment fragment) { 
 //Интихоби fragment-ҳо 
 if (fragment!= null) { 
 getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit(); 
 return true; 
 } 
 return false; 
 } 
 } 
 Равзанаи гуфтугӯӣ: AlertDialog васеъшудаи класси Dialog буда, одатан
 барои сохтани равзанаҳои муколамавӣ истифода бурда мешавад. Қариб ҳаррӯз 
 ҳангоми кор кардан бо барномаҳо мо ба равзанаи дорои ду ё се тугмачадор, ки аз
 тугмачаҳои ҳа, не ва бекоркунӣ иборат мебошанд, дучор мешавем. 
 Барои истифодабарии AlertDialog ибтидо нусхаи класси Builder сохта 
 мешавад: 
 AlertDialog.Builder builder = new AlertDialog.Builder(this); 
 Пас аз сохтани нусхаи класси мазкур метавон равзанаи муколамавии 
 лозимиро сохт. Ба сифати параметри равзанаи муколамавӣ метавон, параметрҳои
 гуногунро истифода кард. Ҳоло муҳимтарин аз ин параметрҳоро дида мебароем:
 setTitle(int resID) — сарлавҳаи равзанаи муколамавӣ; 
 setMessage(int resID) — пайғоми равзанаи муколамавӣ; 
 setPositiveButton(int textID, DialogInterface.OnClickListener listener) —
 насби тугмачаҳои тасдиқкунанда, бо манбаи матнии textID ва listener.
 Методҳои setNegativeButton ва setNeutralButton тақрибан якхела мебошанд.
 Ҳоло аз мисоли содае шурӯъ мекунем. Як барномаи нав бо номи 
 SimpleApplication сохта, дар формаи он як тугмачаи Button мегузорем ва матни
 онро Баромад менависем: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <Button 
 android:id="@+id/button" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Баромад" /> 
 </android.support.constraint.ConstraintLayout> 
 Акнун дар файли Java барои ҳосил намудани равзанаи гуфтугӯии иборат аз
 ду тугмача коди зеринро менависем. 
 package com.example.user.simpleapplication; 
 import android.content.DialogInterface; 
 import android.support.v.app.AlertDialog; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.View; 
 import android.widget.Button; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 final Button button = findViewById(R.id.button); 
 button.setOnClickListener(new 
 View.OnClickListener() { 
 public void onClick(View v) { 
 final AlertDialog.Builder builder = new 
 AlertDialog.Builder(MainActivity.this); 
 builder.setTitle("Баромад"); 
 builder.setMessage("Шумо мехоҳед, аз 
 барнома бароед?"); 
 builder.setPositiveButton("Ҳа!", new 
 DialogInterface.OnClickListener() { 
 @Override 
 public void onClick(DialogInterface 
 dialogInterface, int i){ 
 finish(); 
 } 
 }); 
 AlertDialog dialog = builder.create(); 
 dialog.show(); 
 } 
 }); 
 } 
 } 
 Барномаро иҷро мекунем. Ҳангоми пахш намудани тугмачаи баромад 
 шакли зерин ҳосил мегардад. 
 Агар дар ин ҷо тугмачаи “Ҳа”-ро пахш кунем, барнома корашро ба охир 
 мерасонад. Барои ба охир расонидани кори барнома методи finish() даъват карда
 шудааст. 
 Барои дар равзанаи муколамавӣ илова намудани расм аз методи setMessage
 истифода бурда мешавад. 
 builder.setMessage("Шумо мехоҳед, аз барнома 
 бароед?").setIcon(R.drawable.info); 
 Барои илова намудани ду тугмача дар равзанаи муколамавӣ коди 
 барномаро ба сурати зерин тағйир медиҳем: 
 package com.example.user.simpleapplication; 
 import android.content.DialogInterface; 
 import android.support.v.app.AlertDialog; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.View; 
 import android.widget.Button; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 final Button button = findViewById(R.id.button); 
 button.setOnClickListener(new View.OnClickListener() 
 { 
 public void onClick(View v) 
 { 
 final AlertDialog.Builder builder = new 
 AlertDialog.Builder(MainActivity.this); 
 builder.setTitle("Баромад"); 
 builder.setMessage("Шумо мехоҳед, аз барнома ба- 
 роед?").setIcon(R.drawable.info); 
 builder.setPositiveButton("Ҳа!", new DialogInter- 
 face.OnClickListener() 
 { 
 @Override 
 public void onClick(DialogInterface dialogInterface, int i) 
 { 
 finish(); 
 } 
 }); 
 builder.setNegativeButton("Не!", new DialogInter- 
 face.OnClickListener() { 
 @Override 
 public void onClick(DialogInterface dialogInterface, int i){ 
 dialogInterface.dismiss(); 
 } 
 }); 
 AlertDialog dialog = builder.create(); 
 dialog.show(); 
 } 
 }); 
 } 
 } 
 Натиҷаи барнома: 
 Барои илова намудани се тугмача дар равзанаи муколамавӣ бошад, коди 
 барномаро ба сурати зерин тағйир медиҳем: 
 package com.example.user.simpleapplication; 
 import android.content.DialogInterface; 
 import android.support.v.app.AlertDialog; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.View; 
 import android.widget.Button; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 final Button button = findViewById(R.id.button); 
 button.setOnClickListener(new View.OnClickListener() { 
 public void onClick(View v) { 
 final AlertDialog.Builder builder = new 
 AlertDialog.Builder(MainActivity.this); 
 builder.setTitle("Баромад"); 
 builder.setMessage("Шумо мехоҳед, аз барнома ба- 
 роед?").setIcon(R.drawable.info); 
 builder.setNeutralButton("Бекоркунӣ!", new Di- 
 alogInterface.OnClickListener() { 
 @Override 
 public void onClick(DialogInterface dialogInterface, int i){ 
 dialogInterface.cancel(); 
 } 
 }); 
 builder.setPositiveButton("Ҳа!", new DialogInterface. 
 OnClickListener() { 
 @Override 
 public void onClick(DialogInterface dialogInterface, int i){ 
 finish(); 
 } 
 }); 
 builder.setNegativeButton("Не!", new DialogInterface. 
 OnClickListener() { 
 @Override 
 public void onClick(DialogInterface dialogInterface, int i) 
 { 
 dialogInterface.dismiss(); 
 } 
 }); 
 AlertDialog dialog = builder.create(); 
 dialog.show(); 
 } 
 }); 
 } 
 } 
 Натиҷаи барнома: 
 Барои илова намудани руйхат (массиви сатрӣ) ба равзанаи муколамавӣ, 
 коди барномаро ба сурати зерин тағйир медиҳем. 
 package com.example.user.simpleapplication; 
 import android.content.DialogInterface; 
 import android.support.v.app.AlertDialog; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.View; 
 import android.widget.Button; 
 import android.widget.Toast; 
 public class MainActivity extends AppCompatActivity 
 { 
 final String[] languageName ={"Java", "C++", "C#","Python"}; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) 
 { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 final Button button = findViewById(R.id.button); 
 button.setOnClickListener(new View.OnClickListener() 
 { 
 public void onClick(View v) 
 { 
 final AlertDialog.Builder builder = new AlertDialog. 
 Builder(MainActivity.this); 
 builder.setTitle("Забони барноманависиро интихоб кунед!"); 
 builder.setIcon(R.drawable.my_ic); 
 builder.setItems(languageName, new DialogInterface. 
 OnClickListener() 
 { 
 @Override 
 public void onClick(DialogInterface dialog, int item) 
 { 
 Toast.makeText(getApplicationContext(),"Шумо 
 забони " + languageName[item]+"-ро интихоб 
 кардед!",Toast.LENGTH_SHORT).show(); 
 } 
 }); 
 builder.setCancelable(false); 
 AlertDialog dialog = builder.create(); 
 dialog.show(); 
 } 
 }); 
 } 
 } 
 Тавре ки дида мешавад, дар ин ҷо ибтидо бо номи массиви сатрӣ муаррифӣ
 карда шуда, сипас тавассути методи setItems() ба равзанаи муколамавӣ ҳамроҳ
 карда шудааст. Барои сохтани ҳодиса ҳангоми пахш намудани элементи ягон 
 руйхат интерфейси dialogInterface.OnClickListener истифода карда шудааст.
 Натиҷаи барнома: 
 Барои дар руйхат илова намудани RadioButton ба сифати методи setItems()
 аз методи setSingleChoiceitems() истифода карда шудааст. 
 package com.example.user.simpleapplication; 
 import android.content.DialogInterface; 
 import android.support.v.app.AlertDialog; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.View; 
 import android.widget.Button; 
 import android.widget.Toast; 
 public class MainActivity extends AppCompatActivity { 
 final String[] languageName ={"Java", "C++", 
 "C#","Python"}; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) 
 { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 final Button button = findViewById(R.id.button); 
 button.setOnClickListener(new View.OnClickListener(){ 
 public void onClick(View v) 
 { 
 final AlertDialog.Builder builder = new AlertDialog. 
 Builder(MainActivity.this); 
 builder.setTitle("Забони барноманависиро интихоб 
 кунед!"); 
 builder.setIcon(R.drawable.my_ic); 
 builder.setSingleChoiceItems(languageName, -, new 
 DialogInterface.OnClickListener() { 
 @Override 
 public void onClick(DialogInterface dialog, int item){ 
 Toast.makeText(getApplicationContext(),"Шумо 
 забони " + languageName[item]+"-ро интихоб 
 кардед!",Toast.LENGTH_SHORT).show(); 
 dialog.dismiss(); 
 } 
 }); 
 builder.setCancelable(false); 
 AlertDialog dialog = builder.create(); 
 dialog.show(); 
 } 
 }); 
 } 
 } 
 Тавре ки дида мешавад, дар ин ҷо ҳангоми даъвати методи 
 setSingleChoiceItems() параметри дуюм адади бутун буда, ифодакунандаи рақами
 тартибии радиотугмачаи интихобшуда мебошад. 
 Натиҷаи барнома: 
 Аз натиҷа дида мешавад, ки ҳангоми интихоб намудани ягон забони 
 барномасозӣ ба таври автоматӣ руйхат пӯшида намешавад. Пас барои ба таври
 автоматӣ пӯшонидани равзанаи муколамавӣ, дар дохили методи onClick() методи
 dialog.dismiss()даъват карда мешавад. 
 public void onClick(DialogInterface dialog, int item) { 
 Toast.makeText(getApplicationContext(),"Шумо забони " + 
 languageName[item]+"-ро интихоб кардед!", 
 Toast.LENGTH_SHORT).show(); 
 dialog.dismiss(); 
 } 
 Амали дар руйхат истифода намудани гузинаҳо (CheckBox) монанди 
 радиотугмачаҳо буда, барои пиёдасозии дар як вақт интихоби якчанд банд аз
 setMultiChoiceItems() истифода карда мешавад. 
 Коди барнома: 
 package com.example.user.simpleapplication; 
 import android.content.DialogInterface; 
 import android.support.v.app.AlertDialog; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.View; 
 import android.widget.Button; 
 import android.widget.Toast; 
 public class MainActivity extends AppCompatActivity { 
 final String[] languageName ={"Java", "C++", "C#","Python"}; 
 final boolean[] mCheckedItems = { false, true, false, false }; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 final Button button = findViewById(R.id.button); 
 button.setOnClickListener(new View.OnClickListener() 
 { 
 public void onClick(View v) 
 { 
 final AlertDialog.Builder builder = new AlertDialog. 
 Builder(MainActivity.this); 
 builder.setTitle("Забони барноманависиро интихоб кунед!"); 
 builder.setIcon(R.drawable.my_ic); 
 builder.setMultiChoiceItems(languageName, mCheckedItems, 
 new DialogInterface.OnMultiChoiceClickListener() 
 { 
 @Override 
 public void onClick(DialogInterface dialog, int which, 
 boolean isChecked) 
 { 
 mCheckedItems[which] = isChecked; 
 } 
 }); 
 builder.setPositiveButton("Ok",new DialogInterface. 
 OnClickListener() 
 { 
 @Override 
 public void onClick(DialogInterface dialog,int id) 
 { 
 StringBuilder state = new StringBuilder(); 
 for (int i =; i < languageName.length; i++) { 
 state.append("Забони " + languageName[i]); 
 if (mCheckedItems[i]) 
 state.append(" -интихоб карда шуд\n"); 
 else 
 state.append(" - интихоб карда нашуд.\n"); 
 } 
 Toast.makeText(getApplicationContext(), state.toString(), 
 Toast.LENGTH_LONG).show(); 
 } 
 }); 
 builder.setCancelable(false); 
 AlertDialog dialog = builder.create(); 
 dialog.show(); 
 } 
 }); 
 } 
 } 
 Натиҷаи барнома: 
 Тавре ки айён аст, дар ин ҷо методи setMultiChoiceItems() дорои ду 
 параметр мебошад, ки параметри якуми он массиви руйхат буда, параметри 
 дуюми он бошад, массиви мантиқӣ, ки ҳолати руйхатро муайян мекунад, 
 мебошад. 
 Монанди Toast, ки равзанаи он дар муддати ду-се сония пӯшида мешавад,
 равзанаи муколамавӣ худ аз худ пӯшида намешавад. Барои худ аз худ пӯшида 
 шудани равзанаи мазкур аз таймер истифода бурда, дар равзана як тугмачаи ба
 таври худкор пӯшидашавии равзанаро илова мекунем ва барои он ҳодиса 
 менависем. 
 package com.example.user.simpleapplication; 
 import android.content.DialogInterface; 
 import android.support.v.app.AlertDialog; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.View; 
 import android.widget.Button; 
 import android.widget.Toast; 
 import java.util.Timer; 
 import java.util.TimerTask; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 final Button button = findViewById(R.id.button); 
 button.setOnClickListener(new View.OnClickListener() { 
 public void onClick(View v) { 
 AlertDialog.Builder builder = new AlertDialog. 
 Builder(v.getContext()); 
 builder.setTitle("Ба таври худкор пӯшонидани равзана"); 
 builder.setMessage("Пас аз сония равзана пӯшида мешавад!"); 
 builder.setCancelable(true); 
 final AlertDialog dlg = builder.create(); 
 dlg.show(); 
 final Timer timer = new Timer(); 
 timer.schedule(new TimerTask() { 
 public void run() { 
 dlg.dismiss(); 
 timer.cancel(); 
 } 
 }, ); 
 } 
 }); 
 } 
 } 
 Натиҷаи барнома: 
 Баъзан зарурати дар равзанаи муколамавӣ истифода намудани компоненти
 RatingBar низ пеш меояд. Барои иҷрои ин амал, ибтидо дар папкаи layout бо номи
 ratingdialog.xml як файли манба месозем, ки мӯҳтавои он шакли зеринро дорад:
 res/layout/ratingdialog.xml 
 <?xml version="." encoding="utf-"?> 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an- 
 droid" 
 android:id="@+id/linearlayout" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:orientation="vertical" 
 android:padding="dip" > 
 <RatingBar 
 android:id="@+id/ratingbar" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_gravity="center" 
 android:layout_marginBottom="dp" 
 android:layout_marginTop="dp" 
 android:clickable="true" 
 android:isIndicator="false" 
 android:numStars="" 
 android:rating="" 
 android:stepSize="." /> 
 </LinearLayout> 
 Коди барномаро бошад, ба сурати зайл менависем: 
 package com.example.user.simpleapplication; 
 import android.content.DialogInterface; 
 import android.support.v.app.AlertDialog; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.View; 
 import android.widget.Button; 
 import android.widget.RatingBar; 
 import android.widget.Toast; 
 public class MainActivity extends AppCompatActivity { 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 final Button button = findViewById(R.id.button); 
 button.setOnClickListener(new View.OnClickListener() { 
 public void onClick(View v) { 
 final AlertDialog.Builder ratingdialog = new AlertDialog. 
 Builder(MainActivity.this); 
 ratingdialog.setIcon(android.R.drawable.btn_star_big_on); 
 ratingdialog.setTitle("Баҳо диҳед!"); 
 View linearlayout = getLayoutInflater().inflate(R.layout. 
 ratingdialog, null); 
 ratingdialog.setView(linearlayout); 
 final RatingBar rating = (RatingBar) linearlayout. 
 findViewById(R.id.ratingbar); 
 ratingdialog.setPositiveButton("Ок", new DialogInterface. 
 OnClickListener() { 
 public void onClick(DialogInterface dialog, int which) { 
 Toast.makeText(getApplicationContext(), String.valueOf(rating. 
 getRating()), Toast.LENGTH_LONG).show(); 
 dialog.dismiss(); 
 } 
 }); 
 ratingdialog.setNegativeButton("Бекоркунӣ", new DialogInterface. 
 OnClickListener() { 
 public void onClick(DialogInterface dialog, int id) { 
 dialog.cancel(); 
 } 
 }); 
 ratingdialog.create(); 
 ratingdialog.show(); 
 } 
 }); 
 } 
 } 
 Натиҷаи барнома: 
 Илова бар амалҳои дар боло иҷро кардаамон, инчунин метавон равзанаи 
 воридшавӣ низ сохт. Барои иҷрои ин кор чунин амал мекунем. 
 Дар папкаи layout бо номи dialog_signin як файл месозем, ки мӯҳтавои он
 чунин шакл дорад: 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content"> 
 <ImageView 
 android:src="@drawable/user" 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:scaleType="center" 
 android:background="#bea" 
 android:contentDescription="@string/app_name" /> 
 <EditText 
 android:id="@+id/username" 
 android:inputType="textEmailAddress" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_marginTop="dp" 
 android:layout_marginLeft="dp" 
 android:layout_marginRight="dp" 
 android:layout_marginBottom="dp" 
 android:hint="@string/username" /> 
 <EditText 
 android:id="@+id/password" 
 android:inputType="textPassword" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_marginTop="dp" 
 android:layout_marginLeft="dp" 
 android:layout_marginRight="dp" 
 android:layout_marginBottom="dp" 
 android:fontFamily="sans-serif" 
 android:hint="@string/password"/> 
 </LinearLayout> 
 Пас аз иҷрои ин амал, матни барномаро ба сурати зерин тағйир медиҳем:
 package com.example.user.simpleapplication; 
 import android.content.DialogInterface; 
 import android.os.Bundle; 
 import android.support.v.app.AlertDialog; 
 import android.support.v.app.AppCompatActivity; 
 import android.view.LayoutInflater; 
 import android.view.View; 
 import android.widget.Button; 
 public class MainActivity extends AppCompatActivity { 
 LayoutInflater inflater; 
 AlertDialog.Builder builder; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 builder = new AlertDialog.Builder(MainActivity.this); 
 inflater = this.getLayoutInflater(); 
 final Button button = findViewById(R.id.button); 
 button.setOnClickListener(new View.OnClickListener() { 
 public void onClick(View v) { 
 final AlertDialog.Builder builder = new AlertDialog. 
 Builder(MainActivity.this); 
 builder.setView(inflater.inflate(R.layout.dialog_signin, null)); 
 builder.setPositiveButton(R.string.signin, new DialogInterface. 
 OnClickListener() { 
 @Override 
 public void onClick(DialogInterface dialog, int id) { 
 // Коди дохилшавӣ 
 } 
 }); 
 builder.setNegativeButton(R.string.cancel, new DialogInterface. 
 OnClickListener() { 
 public void onClick(DialogInterface dialog, int id) 
 { 
 dialog.dismiss(); 
 } 
 }); 
 builder.create(); 
 builder.show(); 
 } 
 }); 
 } 
 } 
 Натиҷаи барнома: 
 Тавре ки медонем, телефонҳом мобилӣ дар ду реҷа: китобӣ ва албомӣ кор
 мекунанд. Аксари телефонҳо ба намуди пешфарз дорои реҷаи китобӣ мебошанд 
 Ҳоло мисоли содаеро дида мебароем. Бигзор барномаи мо аз формаи ба 
 қайдгирӣ иборат бошад, ки мӯҳтавои файли қолаби он шакли зеринро дорад: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <LinearLayout 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical"> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:textSize="pt" 
 android:gravity="center" 
 android:hint="Насаб" 
 android:inputType="textPersonName" /> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:textSize="pt" 
 android:gravity="center" 
 android:hint="Ном" 
 android:inputType="textPersonName" /> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:textSize="pt" 
 android:gravity="center" 
 android:hint="Номи хонаводагӣ" 
 android:inputType="textPersonName" /> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:textSize="pt" 
 android:gravity="center" 
 android:hint="Синну сол" 
 android:inputType="textPersonName" /> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:textSize="pt" 
 android:hint="Телефон" 
 android:inputType="textPersonName" 
 android:gravity="center" /> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:textSize="pt" 
 android:hint="Суроға" 
 android:inputType="textPersonName" 
 android:gravity="center" /> 
 <Button 
 android:id="@+id/button" 
 android:textSize="pt" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="Ба қайд гирифтан" /> 
 <Button 
 android:id="@+id/button" 
 android:textSize="pt" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="Бекор кардан" /> 
 </LinearLayout> 
 </android.support.constraint.ConstraintLayout> 
 Баъди иҷроиш натиҷаи барнома шакли зеринро соҳиб мешавад. 
 Агар ин барномаро ба реҷаи албомӣ гардонем, чунин шакл ҳосил 
 мешавад: 
 Тавре ки дида мешавад, дар ин реҷа ду тугмачаи охирон ноайён гардиданд.
 Барои бартараф кардани ин мушкилӣ метавон компонентҳоро ба шакли 
 дигар тавре ҷобаҷо кард, ки дар як сатр ду компонент ҷойгир шавад. Барои иҷрои
 ин амал аз контейнери TableLayout истифода кардан мумкин аст 
 Дар папкаи res папкаи типи Android resource directory месозем. Дар вақти
 сохтан аз равзанаи пайдошуда, аз руйхати Resource type: банди layout-ро интихоб
 карда, аз қисми Available qualifiers бошад, элементи Orientation-ро интихоб
 мекунем. Тавассути тугмачаи дуто аломати хурд (<<) Orientation-ро ба тарафи
 рост мегузаронем. Пас аз ин, дар қисми рост, аз руйхати Screen orientation банди
 Landscape-ро интихоб мекунем. Ҳамин тариқ папка бо номи layout-land сохта
 мешавад. 
 Папкаи сохтаамон ба таври пешфарз дар руйхати файлҳо нишон дода
 намешавад. Пас, барои ёфтани он аз руйхати кушодашаванда қисми болоии
 равзанаи руйхати файлҳо банди Project–ро интихоб мекунем. 
 Пас аз ин, дар папкаи сохтаамон бо номи activity_main.xml XML – файл
 месозем ва мӯҳтавои онро ба сурати зерин тағйир медиҳем: 
 <?xml version="." encoding="utf-"?> 
 <LinearLayout 
 xmlns:android="http://schemas.android.com/apk/res/android" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical"> 
 <LinearLayout 
 android:orientation="vertical" 
 android:layout_height="wrap_content" 
 android:layout_width="match_parent" 
 android:layout_gravity="center" 
 android:paddingLeft="dp" 
 android:paddingRight="dp"> 
 <TableLayout 
 android:layout_height="wrap_content" 
 android:layout_width="wrap_content" 
 android:layout_gravity="center" 
 android:stretchColumns="*"> 
 <TableRow> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:textSize="pt" 
 android:gravity="center" 
 android:hint="Насаб" 
 android:inputType="textPersonName" /> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:textSize="pt" 
 android:gravity="center" 
 android:hint="Ном" 
 android:inputType="textPersonName" /> 
 </TableRow> 
 <TableRow> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:textSize="pt" 
 android:gravity="center" 
 android:hint="Номи хонаводагӣ" 
 android:inputType="textPersonName" /> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:textSize="pt" 
 android:gravity="center" 
 android:hint="Синну сол" 
 android:inputType="textPersonName" /> 
 </TableRow> 
 <TableRow> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:textSize="pt" 
 android:hint="Телефон" 
 android:inputType="textPersonName" 
 android:gravity="center" /> 
 <EditText 
 android:id="@+id/editText" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:textSize="pt" 
 android:hint="Суроға" 
 android:inputType="textPersonName" 
 android:gravity="center" /> 
 </TableRow> 
 <TableRow> 
 <Button 
 android:id="@+id/button" 
 android:textSize="pt" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="Ба қайд гирифтан" /> 
 <Button 
 android:id="@+id/button" 
 android:textSize="pt" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:text="Бекор кардан" /> 
 </TableRow> 
 </TableLayout> 
 </LinearLayout> 
 </LinearLayout> 
 Барномаро иҷро мекунем, пас аз гузаштан ба реҷаи албомӣ натиҷа шакли зайлро
 соҳиб мешавад: 
 Қайд кардан ба маврид аст, ки ҳангоми сохтани варинати алтернативӣ бояд
 ҳамаи компонентҳои реҷаи асосӣ дар он илова карда шаванд. Дар ҳолати акс 
 барнома ба хатогӣ рӯбаурӯ мешавад. 
 Барои аз коди барнома муайянкунии самти мавқеи ҷорӣ метавон аз 
 зербарномаи поёнӣ истифода кард: 
 private String getScreenOrientation(){ 
 if(getResources().getConfiguration().orientation == 
 Configuration.ORIENTATION_PORTRAIT) 
 return "самти китобӣ"; 
 else 
 if (getResources().getConfiguration().orientation == 
 Configuration.ORIENTATION_LANDSCAPE) 
 return "самти албомӣ"; 
 else 
 return ""; 
 } 
 Илова бар ин, метавон баланди ва паҳноии экранро ҳисоб кард. Агар 
 баландӣ аз бар зиёд бошад, самти экран китобӣ аст, дар сурати акс албомӣ.
 Барои муайянкунии реҷаи ҷории экран метавон аз зербарномаи зерин 
 истифода кард: 
 private String getRotateOrientation() { 
 int rotate = 
 getWindowManager().getDefaultDisplay().getRotation(); 
 switch (rotate) { 
 case Surface.ROTATION_: 
 return "Намуди пешфарзӣ"; 
 case Surface.ROTATION_: 
 return "Аз рӯӣ ақрабаки соат градус 
 тоб додан"; 
 case Surface.ROTATION_: 
 return " градус тоб додан"; 
 case Surface.ROTATION_: 
 return "Муқобили ақрабаки соат градус 
 тоб додан"; 
 default: 
 return "Намедонам"; 
 } 
 } 
 Барои маҳдуд кардани тағйирдиҳии самти мавқеъ метавон коди зеринро 
 дар методи onCreate() навишт. 
 setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LAND- 
 SCAPE); //барои реҷаи албомӣ 
 // ё 
 // setRequestedOrientation (ActivityInfo.SCREEN_ORIENTA- 
 TION_PORTRAIT); //барои реҷаи китобӣ 
 Коди мазкур корбурди на он қадар зиёд дорад, беҳтар мешавад, агар дар
 файли манифест дар элементи <activity> параметри android:screenOrientation-ро
 ҳамроҳ кард: 
 аndroid:screenOrientation="portrait" 
 android:screenOrientation="landscape" 
 Илова бар ин, як варианти дигар низ мавҷуд аст, ки барои нишон додани
 сенсор истифода бурда мешавад. 
 android:screenOrientation="sensor" 
 Пас аз пайдоиши Android. қимати нав пайдо шуд, ки шакли зеринро 
 дорад: 
 android:screenOrientation=["unspecified" | "behind" | 
 "landscape" | "portrait" | 
 "reverseLandscape" | "reversePortrait" | 
 "sensorLandscape" | "sensorPortrait" | 
 "userLandscape" | "userPortrait" | 
 "sensor" | "fullSensor" | "nosensor" | 
 "user" | "fullUser" | "locked"] 
 Баъзан лоиҳаҳои дар Android сохташуда, метавонанд истифодаи васеъ 
 пайдо карда, дар давлатҳои гуногун мавриди таваҷуҳ ва қабул қарор гирад. Барои
 дар ин ҳолатҳо аз сари нав иваз накардани интерфейси барнома ва танзимҳои
 дигар аз маҳаллисозии лоиҳа истифода бурда мешавад. 
 Маънои маҳаллисозӣ он аст, ки дар барнома имконияти интихоби забони 
 истифодабарӣ (масалан, интерфейс), вақту соат ва ғайра мебошад. 
 Метавон барномаро аз рӯи якчанд мақсад ё бахш маҳаллисозӣ кард. 
 Қайд кардан ба маврид аст, ки забони ягонае ки дилхоҳ воситаи Android онро
 пуштибонӣ мекунад, забони англисии амрико мебошад, ки тавассути коди en_US
 ишора карда мешавад. Барои илова намудани забони алтернативӣ ба лоиҳа дар
 папкаи res бо номи values-<коди забон> ё values-<коди забон>-r<коди давлат>
 папка сохта мешавад. 
 Барои маҳаллисозӣ намудан, як лоиҳаи нав месозем. Барои танзими забони 
 тоҷикӣ файли манбаи мавҷудбуда, яъне res/values/strings.xml-ро истифода бурда,
 манбаҳои сатрии лозимиро дар он илова мекунем. Барои забони англисӣ бошад,
 дар папкаи res/ бо номи /values-en папкаи манба сохта, дар дохили он файли
 strings.xml-ро аз папкаи res/values нусхабардорӣ мекунем. 
 Ин амалро метавон, ба таври дигар ки аксари барномасозон онро тавсия
 медиҳанд иҷро кард. 
 Папкаи res-ро интихоб карда, тугмачаи рости мушро дар болои он пахш 
 карда, аз руйхати пайдошуда банди New ва сипас Sample Data Directory-ро 
 интихоб мекунем. 
 Дар натиҷаи ин амал равзанаи зерин кушода мешавад: 
 Аз тарафи рости ин равзана (варақаи Available qualifiers:) банди Locale-
 ро интихоб карда, тавассути тугмачаи >> аз қисми миёна равзанаи онро ба
 тарафи рост мекӯчонем. Дар натиҷа равзана шакли зеринро мегирад: 
 Дар ин равзана аз қисмати (варақаи) Language забони лозимӣ ва аз бахши
 Specific Region Only минтақаи лозимиро интихоб мекунем. Дар натиҷа номи 
 папка Ditrectory name пайдо мешавад. Пас аз иҷрои ин амалиёт тугмачаи Ок-ро
 пахш мекунем. Ҳамин тариқ, папкаи лозимӣ сохта мешвад. 
 Барои мушоҳида кардани папкаи сохтаамон аз қисми чапи болоии экран 
 Project-ро интихоб карда, зеркаталоги app\src\main\res –ро меёбем. 
 Барои намуна файли res/values/strings.xml-ро ба сурати зерин омода 
 мекунем: 
 <?xml version="." encoding="utf-"?> 
 <resources> 
 <string name="app_name">Лоиҳаи нахустини ман дар Android 
 Studio</string> 
 <string name="hello_world">Салом Дунё!</string> 
 <string name="action_settings">Танзимот</string> 
 <string name="word">Калима</string> 
 </resources> 
 Файли res/values-en/strings.xml-ро бошад ба сурати зерин омода мекунем:
 <?xml version="." encoding="utf-"?> 
 <resources> 
 <string name="app_name">My Application in Android Studio</string> 
 <string name="hello_world">Hello world!</string> 
 <string name="action_settings">Settings</string> 
 <string name="word">Word</string> 
 </resources> 
 Ин манбаҳои матниро чунин истифода мекунем: Дар файли қолаб се 
 элементи TextView мегузорем ва онҳоро ба сурати зерин омода месозем: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:id="@+id/activity_main" 
 android:orientation="horizontal" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent"> 
 <TextView 
 android:id="@+id/textView" 
 android:textSize="sp" 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:layout_marginBottom="dp" 
 android:text="@string/hello_world" 
 app:layout_constraintBottom_toTopOf="@+id/textView" 
 app:layout_constraintEnd_toEndOf="parent" 
 app:layout_constraintStart_toStartOf="parent" 
 app:layout_constraintTop_toTopOf="parent" /> 
 <TextView 
 android:id="@+id/textView" 
 android:textSize="sp" 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:layout_marginTop="dp" 
 android:text="@string/action_settings" 
 app:layout_constraintEnd_toEndOf="parent" 
 app:layout_constraintStart_toStartOf="parent" 
 app:layout_constraintTop_toBottomOf="@+id/textView" /> 
 <TextView 
 android:id="@+id/textView" 
 android:textSize="sp" 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:layout_marginTop="dp" 
 android:text="@string/word" 
 app:layout_constraintEnd_toEndOf="parent" 
 app:layout_constraintHorizontal_bias="." 
 app:layout_constraintStart_toStartOf="parent" 
 app:layout_constraintTop_toBottomOf="@+id/textView" /> 
 </android.support.constraint.ConstraintLayout> 
 Ҳамин тариқ, пас аз иҷроиш ҳангоми иваз намудани забони телефон 
 (эмулятор) ба тоҷикӣ иттилооти тоҷикӣ, ва ҳангоми ба англисӣ иваз намудани он
 иттилооти англисиро пешниҳод мекунад. 
 Натиҷаи барнома: 
 Барои танзими маҳаллисозии таърихи рӯз метавон аз класси DateFormat, ки
 дар фазои номии android.text.format ҷойгир аст, истифода кард. Барои ба даст
 овардани таърихи ҷории рӯз аз дастури зерин истифода бурда мешавад 
 Date currentDate = Calendar.getInstance().getTime(); 
 Дастури зерин бошад, барои ба даст овардани намуди стандартии 
 таърихи рӯз, барои маҳаллисозии ҷории барнома истифода мешавад. 
 java.text.DateFormat dateFormat; 
 dateFormat = android.text.format.DateFormat.getDateFor- 
 mat(this) 
 Барои ба мавқеи ҷойгиршавии барнома муайян намудани таърихи рӯз 
 бошад, метавон аз дастури зерин истифода кард: 
 String formattedCurrentDate = dateFormat.format(currentDate) 
 Масалан, агар мавқеи ҷойгиршавии барнома дар ИМА бошад, пас таърихи 
 рӯз ба сурати // нишон дода мешавад. Класси DateFormat метавонад 
 шакли дигари таърихи рӯзро низ ҳосил кунад. 
 Агар ба сифати методи getDateFormat методи getLongDateFormat истифода
 шавад, он гоҳ таърихи рӯзро ба сурати Сешанбе, Апрел ба даст меорем. 
 Дар Android SDK вақт ҳамчун объекти Date муайян карда шуда, инчунин 
 тавассути класси DateFormat аз фазои номии android.text.format танзим карда
 мешавад. 
 // Ба даст овардани вақти ҷорӣ: 
 java.util.Date currentDate = Calendar.getInstance().getTime(); 
 // Ба даст овардани вақт барои маҳаллисозии ҷории барнома: 
 java.text.DateFormat timeFormat; 
 timeFormat = android.text.format.DateFormat.getTimeFormat(this); 
 //Танзим кардани вақт дар мувофиқан бо маҳаллисозии барнома 
 String formattedTime = timeFormat.format(currentDate); 
 Ҳамин тариқ, ба маҳаллисозии барнома шинос шудем. 
 Боби. Кор бо пойгоҳи додаҳо дар Android Studio 
 Платформаи Android барои идоракунии манбаи додаҳо воситаи дохилии 
 sqlite-ро доро мебошад, ки он маҳсулоти шоёни диққат дар 
 тамоми дунё ба ҳисоб меравад. Имрӯз воситаҳои муҳиме дар дунё 
 мавҷуданд, ки аз ПД SQLite истифода мебаранд, ба монанди 
 браузери Firefox, IOS (iPhone, iPod, iPad), телефонҳои бо СО 
 Windows (Phone ) коркунанда ва ғайра. 
 Ба намуди пешфарз дар Android манбаи додаҳои SQLite – мавҷуд аст. ПД-
 и мазкур аз тарафи Ричард Хипп сохта шуда, пойгоҳи додаҳои хело маъмул, сода
 ва тезкоркунанда мебошад. 
 ПД-и SQLite дорои якчанд хусусиятҳои хос мебошад, ки дар ёд гирифтани 
 онҳо аз манфиат холӣ нест, ба монанди: 
  Тафтиши типи доддаҳоро пуштибонӣ намекунад. Ин маънои онро дорад, 
 ки Шумо метавонед, дар сутунчае, ки типи адади дорад ягон сатр нависед.
  Истиноди якпорчагиро пуштибонӣ намекунад, яъне дар он пуштибонии 
 FOREIGN KEY ва дастури JOIN мавҷуд нест. 
  Ба таври комил пуштибонӣ намудани Unicode. 
 Қайд кардан ба маврид аст, ки SQLite – лоиҳаи бо кодҳои кушода буда,
 имкониятҳои стандартии SQL-ро истифода мебарад, ба монанди: синтаксис, 
 муомила ва ғайра. ПД-ҳои мазкур ҳаҷми хело камеро дар диск банд мекунад, 
 тақрибан кб. Саҳифаи расмии SQLite http://www.sqlite.org ба ҳисоб меравад.
 Типҳои стандартии SQLite инҳо мебошанд: 
  NULL – қимати холӣ; 
  INTEGER – адади бутун; 
  REAL – адади ҳақиқӣ; 
  TEXT – сатр; 
  BLOB – барои расмҳо ва файлҳои бинорӣ. 
 Тавре ки дида мешавад, дар SQLite типи мантиқӣ мавҷуд намебошад, пас
 барои додаҳои вобаста ба он аз типи бутун бо қимати ҳамчун false ва ҳамчун
 true истифода бурдан мумкин аст. 
 Ҳамаи амалиёт бо ҷадвалҳо дар SQLite тавассути фармонҳои забони SQL 
 гузаронида мешаванд. Ҳоло ин амалиётро мавриди баҳс қарор намедиҳем. 
 Барои кор кардан бо пойгоҳи додаҳо як лоиҳаи нав сохта, дар қолаби он
 (файли activity_main.xml) шаш тугмачаи идоракунӣ барои иловакунӣ, ҷустуҷӯ,
 таҳриркунӣ, несткунӣ, хондани ҳамаи иттилоот ва баромад илова мекунем. Илова
 бар ин се майдони матнӣ, низ барои дохилкунии (хориҷкунии) насаб, ном ва 
 синну сол дар қолаби барнома мегузорем. Дар натиҷа файли қолаби асосии 
 барнома шакли зеринро мегирад. 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:layout_marginTop="dp" 
 android:text="Насаб" 
 android:textSize="sp" 
 app:layout_constraintStart_toStartOf="parent" 
 app:layout_constraintTop_toTopOf="parent" /> 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:layout_marginTop="dp" 
 android:text="Ном" 
 android:textSize="sp" 
 app:layout_constraintTop_toBottomOf="@+id/textView" 
 tools:ignore="MissingConstraints" 
 tools:layout_editor_absoluteX="dp" /> 
 <TextView 
 android:id="@+id/textView" 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:layout_marginTop="dp" 
 android:text="Синну сол" 
 android:textSize="sp" 
 app:layout_constraintStart_toStartOf="parent" 
 app:layout_constraintTop_toBottomOf="@+id/textView" /> 
 <EditText 
 android:id="@+id/edFName" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:ems="" 
 android:inputType="textPersonName" 
 android:textSize="sp" 
 app:layout_constraintEnd_toEndOf="parent" 
 app:layout_constraintTop_toTopOf="parent" /> 
 <EditText 
 android:id="@+id/edName" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:layout_marginTop="dp" 
 android:ems="" 
 android:inputType="textPersonName" 
 android:textSize="sp" 
 app:layout_constraintEnd_toEndOf="parent" 
 app:layout_constraintTop_toBottomOf="@+id/edFName" 
 tools:ignore="MissingConstraints" /> 
 <EditText 
 android:id="@+id/edAge" 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:layout_marginTop="dp" 
 android:ems="" 
 android:inputType="textPersonName" 
 android:text="" 
 android:textSize="sp" 
 app:layout_constraintEnd_toEndOf="parent" 
 app:layout_constraintTop_toBottomOf="@+id/edName" /> 
 <Button 
 android:id="@+id/btnAdd" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:layout_marginTop="dp" 
 android:text="Иловакунӣ" 
 app:layout_constraintStart_toStartOf="parent" 
 app:layout_constraintTop_toBottomOf="@+id/textView" /> 
 <Button 
 android:id="@+id/btnFind" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:layout_marginStart="dp" 
 android:layout_marginTop="dp" 
 android:text="Ҷустуҷӯ" 
 app:layout_constraintStart_toEndOf="@+id/btnAdd" 
 app:layout_constraintTop_toBottomOf="@+id/edAge" 
 tools:ignore="MissingConstraints" /> 
 <Button 
 android:id="@+id/btnEdit" 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:layout_marginTop="dp" 
 android:text="Таҳриркунӣ" 
 app:layout_constraintEnd_toEndOf="parent" 
 app:layout_constraintTop_toBottomOf="@+id/edAge" /> 
 <Button 
 android:id="@+id/btnDelete" 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:layout_marginTop="dp" 
 android:text="Несткунӣ" 
 app:layout_constraintStart_toStartOf="parent" 
 app:layout_constraintTop_toBottomOf="@+id/btnAdd" /> 
 <Button 
 android:id="@+id/btnReadAll" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:layout_marginStart="dp" 
 android:layout_marginTop="dp" 
 android:text="Хондани ҳамаи иттилоот" 
 app:layout_constraintStart_toEndOf="@+id/btnDelete" 
 app:layout_constraintTop_toTopOf="@+id/btnFind" 
 tools:ignore="MissingConstraints" /> 
 <Button 
 android:id="@+id/btnExit" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:layout_marginStart="dp" 
 android:layout_marginTop="dp" 
 android:text="Баромад" 
 app:layout_constraintEnd_toEndOf="parent" 
 app:layout_constraintHorizontal_bias="." 
 app:layout_constraintStart_toEndOf="@+id/btnReadAll" 
 app:layout_constraintTop_toTopOf="@+id/btnEdit" 
 tools:ignore="MissingConstraints" /> 
 <ListView 
 android:id="@+id/listStudents" 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:layout_marginTop="dp" 
 app:layout_constraintBottom_toBottomOf="parent" 
 app:layout_constraintEnd_toEndOf="parent" 
 app:layout_constraintStart_toStartOf="parent" 
 app:layout_constraintTop_toBottomOf="@+id/btnExit" 
 app:layout_constraintVertical_bias="." /> 
 </android.support.constraint.ConstraintLayout> 
 Пас аз ин экран шакли зеринро мегирад: 
 Барои осонии кор ибтидо дар папкаи Java бо номи Student.java як класс 
 месозем, ки мӯҳтавои он чунин шакл дорад: 
 package com.example.user.dbapplication; 
 class Student { 
 private int id; 
 private String fname; 
 private String name; 
 private int age; 
 Student() { 
 this(null, null, ); 
 } 
 Student(String fname, String lname, int age) { 
 this.fname = fname; 
 this.name = lname; 
 this.age = age; 
 } 
 public int getId() { 
 return id; 
 } 
 public void setId(int id) { 
 this.id = id; 
 } 
 public String getFname() { 
 return fname; 
 } 
 public void setFname(String fname) { 
 this.fname = fname; 
 } 
 public String getName() { 
 return name; 
 } 
 public void setName(String name) { 
 this.name = name; 
 } 
 public int getAge() { 
 return age; 
 } 
 public void setAge(int age) { 
 this.age = age; 
 } 
 @Override 
 public String toString() { 
 return "Донишҷӯ [id=" + id + ", Насаб=" + fname + ", Ном=" + 
 name+ ", Синну сол= "+age+"]"; 
 } 
 } 
 Тавре ки дида мешавад, дар ин ҷо ибтидо класси Student, ки иборат аз 
 майдон (id, fname, name, age) ва ду конструктор (конструктори бепараметр-
 пешфарзӣ ва конструктори параметрдор) аст муаррифӣ гардида, сипас барои 
 майдонҳои зарурии он гузоранда(сеттерн) ва дарёфткунанда(геттерн) сохта 
 шудааст. Дар охири класс бо номи toString як метод муаррифӣ шудааст, ки 
 объектҳои классро ба намуди як сатр бармегардонад. 
 Илова бар ин, барои кор кардан бо ПД як класси дигар бо номи 
 MySQLiteHelper, ки меросбари класси SQLiteOpenHelper мебошад, сохта 
 шудааст, ки мӯҳтавои он шакли зайлро дорад: 
 package com.example.user.dbapplication; 
 import android.content.ContentValues; 
 import android.content.Context; 
 import android.database.Cursor; 
 import android.database.sqlite.SQLiteDatabase; 
 import android.database.sqlite.SQLiteOpenHelper; 
 import java.util.LinkedList; 
 import java.util.List; 
 class MySQLiteHelper extends SQLiteOpenHelper { 
 // Версияи ПД 
 private static final int DATABASE_VERSION =; 
 // Номи ПД 
 private static final String DATABASE_NAME = "DBStudents"; 
 //Даъвати конструктори MySQLiteHelper барои сохтани ПД 
 public MySQLiteHelper(Context context) { 
 super(context, DATABASE_NAME, null, DATABASE_VERSION); 
 } 
 @Override 
 public void onCreate(SQLiteDatabase db) { 
 // Сохтани дархост 
 String sql="create table Students (" 
 + "id INTEGER PRIMARY KEY AUTOINCREMENT, " 
 + "fname TEXT, " 
 + "name TEXT, " 
 + "age INTEGER )"; 
 System.out.println(sql); 
 //Иҷрокуни 
 db.execSQL(sql); 
 } 
 //Таҳриркунии ПД 
 @Override 
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int 
 newVersion) { 
 // Нест кардани ҷадвали Students дар ҳолати мавҷуд будан 
 db.execSQL("DROP TABLE IF EXISTS Students"); 
 // Сохтани ҷадвали нав 
 this.onCreate(db); 
 } 
 //Амалҳои асосӣ бо ПД 
 private static final String TABLE_STUDENTS = "Students"; 
 // Номи сутунчаҳои ҷадвали Students 
 private static final String KEY_id = "id"; 
 private static final String KEY_fName = "fname"; 
 private static final String KEY_name = "name"; 
 private static final String KEY_age = "age"; 
 private static final String[] COLUMNS = {KEY_id, KEY_fName, 
 KEY_name, KEY_age}; 
 //Илова намудани донишҷӯ ба ҷадвал 
 public void addStudent(Student student){ 
 //. Сохтани истинод ба ПД 
 SQLiteDatabase db = this.getWritableDatabase(); 
 /*. Сохтани ContentValues барои илова намудани калид қимат "col- 
 umn"/value */ 
 ContentValues values = new ContentValues(); 
 values.put(KEY_fName, student.getFname()); // Гузоштани насаб 
 values.put(KEY_name, student.getName()); // Гузоштани ном 
 values.put(KEY_age, student.getAge()); // Гузоштани синну сол 
 //. Гузоштан 
 db.insert(TABLE_STUDENTS,null, values); 
 //. Пӯшонидан 
 db.close(); 
 } 
 //Ба даст овардани иттилооти як донишҷӯ 
 public Student getStudent(int id){ 
 //. Сохтани истинод ба ПД 
 SQLiteDatabase db = this.getReadableDatabase(); 
 //. Иҷро намудани дархост 
 Cursor cursor = 
 db.query(TABLE_STUDENTS, COLUMNS, " id =?", new 
 String[] { String.valueOf(id) },null, null, null, null); 
 //. Агар ягон натиҷа ба даст ояд, ба записи нахустин меоем 
 if (cursor!= null) 
 cursor.moveToFirst(); 
 //. Сохтан ва иҷро намудани объекти Student 
 Student student = new Student(); 
 student.setId(Integer.parseInt(cursor.getString())); 
 student.setFname(cursor.getString()); 
 student.setName(cursor.getString()); 
 student.setAge(cursor.getInt()); 
 //. баргардонидани student 
 return student; 
 } 
 // Ба даст овардани руйхати ҳамаи донишҷӯён 
 public List<Student> getAllStudents() { 
 List<Student> students = new LinkedList<Student>(); 
 //. Навиштани дархост 
 String query = "SELECT * FROM " + TABLE_STUDENTS; 
 //. Сохтани истинод ба ПД 
 SQLiteDatabase db = this.getWritableDatabase(); 
 Cursor cursor = db.rawQuery(query, null); 
 /*. Пайдарпай ба даст овардани иттилооти донишҷӯён ва дар 
 рӯйхат илова намудани онҳо */ 
 Student student = null; 
 if (cursor.moveToFirst()) { 
 do { 
 student = new Student(); 
 student.setId(Integer.parseInt(cursor.getString())); 
 student.setFname(cursor.getString()); 
 student.setName(cursor.getString()); 
 student.setAge(cursor.getInt()); 
 // Илова намудани student ба рӯйхати students 
 students.add(student); 
 } while (cursor.moveToNext()); 
 } 
 // Баргардонидани students 
 return students; 
 } 
 // Таҳриркунии Student 
 public int updateStudent(Student student) { 
 //. Сохтани истинод ба ПД 
 SQLiteDatabase db = this.getWritableDatabase(); 
 //. Сохтани ContentValues барои иловакунии калид ва қимат "col- 
 umn"/value 
 ContentValues values = new ContentValues(); 
 values.put("fname", student.getFname()); // get fname 
 values.put("name", student.getName()); // get name 
 values.put("age", student.getAge()); // get age 
 //. Таҳриркунии як сатр 
 int i = db.update(TABLE_STUDENTS, values, null,null); 
 //. Пӯшонидани db 
 db.close(); 
 return i; 
 } 
 // Несткунии як Student 
 public void deleteStudent(Student student) { 
 //. Сохтани истинод ба ПД 
 SQLiteDatabase db = this.getWritableDatabase(); 
 //. Несткунӣ 
 db.delete(TABLE_STUDENTS,KEY_id+" =?",new String[] { 
 String.valueOf(student.getId()) }); 
 //. Пӯшонидан 
 db.close(); 
 } 
 } 
 Тавре ки дида мешавад, дар ин ҷо пас аз муаррификунии класси 
 MySQLiteHelper, ибтидо тағйирёбандаҳои лозимӣ, ки шомили 
 DATABASE_VERSION(версияи ПД) ва DATABASE_NAME (номи ПД) 
 мебошанд, муаррифӣ карда шудаанд. 
 // Версияи ПД 
 private static final int DATABASE_VERSION =; 
 // Номи ПД 
 private static final String DATABASE_NAME = "DBStudents"; 
 Пас аз муаррификунии тағйирёбандаҳои мазкур барои класси 
 сохтаамон, яъне MySQLiteHelper конструктори MySQLiteHelper()-ро месозем. 
 Дар дохили конструктори мазкур конструктори класси базавӣ 
 (SQLiteOpenHelper) барои сохтани ПД даъват карда шудааст. 
 //Даъвати конструктори MySQLiteHelper барои сохтани ПД 
 public MySQLiteHelper(Context context) { 
 super(context, DATABASE_NAME, null, DATABASE_VERSION); 
 } 
 Тавре ки дида мешавад, дар ин ҷо конструктори суперкласс, ки дорои чор
 параметр мебошад ба таври муқаррарӣ даъват карда мешавад: 
 Context- контекст, пайвасткунӣ бо ПД. 
 dataBaseName- номи ПД. 
 CursorFactory- метавон классеро, ки дар асоси класси Cursor сохта 
 шудааст истифода кард. Ин имкон медиҳад, ки якчанд тафтишоти иловагӣ
 бо натиҷаи дархост гузаронида шавад. Агар дар ин ҷо истинод ба класси
 сохтаамон гузорем, он гоҳ он ба ҷои курсори стандартӣ истифода бурда
 мешавад. Дар ин ҷо мо бо CursorFactory кор карданро мавриди баҳс қарор
 намедиҳем, бинобар ин, ба сифати ин параметр аз қимати null истифода
 мебарем. 
 Version- версияи ПД. Баъдтар ин параметрро мавриди баҳс қарор медиҳем.
 Класси SQLiteOpenHelper азнавмуаррификунии методҳояшро ба таври 
 ҳатмӣ талаб мекунад. Ин методҳо onCreate ва onUpgrade мебошанд. Дар методи
 onCreate фармонҳои сохтани ҷадвал навишта мешаванд. Методи мазкур ҳангоми
 қимати аввала бахшидан ба ПД мустақилона даъват карда мешавад. Ин маънои 
 онро дорад, ки даъвати методи мазкур дар ягон ҷойи барнома шарт намебошад.
 Тавре ки медонем, барои сохтани ҷадвал аз оператори create table истифода
 шудааст. Оператори мазкур яке аз операторҳои асосии забони SQL буда, барои
 сохтани ҷадвалҳо истифода бурда мешавад. Тарзи истифодабарии ин оператор 
 чунин аст: 
 CREATE TABLE database_name.table_name( 
 column datatype PRIMARY KEY(one or more columns), 
 column datatype, 
 column datatype,..... 
 columnN datatype 
 ); 
 Дар ин ҷо 
 table_name – номи ҷадвали сохташаванда; 
 column(,,..) – номи сутунчаҳои ҷадвал, 
 datatype –типи сутунчаҳои ҷадвал; 
 PRIMARY KEY – калиди ибтидоӣ. 
 Мисол. Ҳоло бо номи Students ҷадвале месозем, ки дорои майдонҳои 
 (сутунчаҳои) id, fname, name ва age бошад. 
 create table Students 
 id INTEGER PRIMARY KEY AUTOINCREMENT, 
 fname TEXT, 
 name TEXT, 
 age INTEGER 
 ); 
 Дар ин ҷо майдони id ҳамчун AUTOINCREMENT гирифта шудааст. Ин 
 маънои онро дорад, ки ҳангоми илова намудани донишҷӯӣ нав қимати он як 
 воҳид зиёд гардида ба таври худкор гузошта мешавад. onCreate –ро 
 азнавмуаррифӣ кунем, шакли зеринро мегирад. 
 // Сохтани ҷадвал 
 @Override 
 public void onCreate(SQLiteDatabase db) { 
 // Сохтани дархост 
 String sql="create table Students (" 
 + "id INTEGER PRIMARY KEY AUTOINCREMENT, " 
 + "fname TEXT, " 
 + "name TEXT, " 
 + "age INTEGER )"; 
 System.out.println(sql); 
 //Иҷрокуни 
 db.execSQL(sql); 
 } 
 Баъзан зарурати тағйирдиҳии ПД пеш меояд, яъне баъзан лозим мешавад,
 ки дар ПД схемаҳо иваз карда шуда, ҷадвалҳои нав илова карда шаванд ё ҷойи
 сутунчаҳои ҷадвал тағйир дода шаванд. Ҳамаи ин амалҳоро метавон дар дохили
 методи onUpdate иҷро кард. 
 Ин метод ҳангоми ивазкунии рақами версияи дар конструктори класс 
 нишондодашуда (DATABASE_VERSION), даъват карда мешавад. Агар зарурати 
 ивазкунии ПД пеш ояд, он гоҳ қимати тағйирёбандаи мазкурро иваз мекунем, 
 яъне ба ҷойи қимати қимати, ва ғайра мегузорем. 
 Пас аз ин лоиҳа мефаҳмад, ки истифодабаранда (барномасоз) мехоҳад 
 ПД-и худро таҳрир кунад ва методи onUpgrade-ро даъват мекунад. Одатан дар
 дохили ин метод ҷадвал нест карда шуда, ҷадвали нав бо майдонҳои нав сохта
 мешаванд. 
 //Таҳриркунии ПД 
 @Override 
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int 
 newVersion) { 
 // Нест кардани ҷадвали Students дар ҳолати мавҷуд будан 
 db.execSQL("DROP TABLE IF EXISTS Students"); 
 // Сохтани ҷадвали нав 
 this.onCreate(db); 
 } 
 Дар ин ҷо методи onUpgrade() ҷадвали мавҷудбударо нест карда, онро аз
 сари нав месозад. Дар ин ҷо метавон шартҳо низ гузошт, ки ҳангоми дуруст 
 будани онҳо методи мазкур даъват карда шавад. 
 Пас аз сохтани ҷадвал зарурати дар он навиштани иттилоот пеш меояд. 
 Барои илова намудани иттилооти донишҷӯ ба ҷадвал бо номи addStudent методи
 нав месозем. 
 //Илова намудани донишҷӯ ба ҷадвал 
 public void addStudent(Student student){ 
 //. Сохтани истинод ба ПД 
 SQLiteDatabase db = this.getWritableDatabase(); 
 //. Сохтани ContentValues барои илова намудани калид қимат 
 "column"/value 
 ContentValues values = new ContentValues(); 
 values.put(KEY_fName, student.getFname()); // Гузоштани насаб 
 values.put(KEY_name, student.getName()); // Гузоштани ном 
 values.put(KEY_age, student.getAge()); // Гузоштани синну сол 
 //. Гузоштан 
 db.insert(TABLE_STUDENTS,null, values); 
 //. Пӯшонидан db 
 db.close(); 
 } 
 Дар ин ҷо барои бо ПД пайваст шудан методи this.getWritableDatabase()
 даъват карда шудааст. Сипас, бо номи values объекти класси ContentValues 
 муаррифӣ карда шудааст. Класси ContentValues имконияти сохтани карта бо 
 калид ва қиматро фароҳам меорад. Класси мазкур дорои методи ContentValues.put
 мебошад, ки тавассути он ҷуфти калид-қиматҳо таҳия карда мешаванд. Ин карта,
 сипас дар методи insert барои иловакунии record -ҳо (иттилооти як донишҷӯйро
 record ё навишт мегуем) истифода бурда мешавад. Методи insert дар сурати бо
 мувафақият иҷро гардидан, қимати ID - и record-и гузошташударо бармегардонад.
 Дар охир тавассути методи close() ПД пушонида мешавад. 
 Пас аз иловакунӣ зарурати бадастоварии иттилооти як донишҷӯ пеш меояд. 
 Барои иҷрои ин амал бо номи getStudent методи нав месозем. 
 //Ба даст овардани иттилооти як донишҷӯ 
 public Student getStudent(int id){ 
 //. Сохтани истинод ба ПД 
 SQLiteDatabase db = this.getReadableDatabase(); 
 //. Иҷро намудани дархост 
 Cursor cursor = 
 db.query(TABLE_STUDENTS, COLUMNS, " id =?", new String[] 
 { String.valueOf(id) },null,null, null, null); 
 //. Агар ягон натиҷа ба даст ояд, ба навишти нахустин меоем 
 if (cursor!= null) 
 cursor.moveToFirst(); 
 //. Сохтан ва иҷро намудани объекти Student 
 Student student = new Student(); 
 student.setId(Integer.parseInt(cursor.getString())); 
 student.setFname(cursor.getString()); 
 student.setName(cursor.getString()); 
 student.setAge(cursor.getInt()); 
 //. баргардонидани student 
 return student; 
 } 
 Пас аз муаррификунии объекти SQLiteDatabase як объекти класси Cursor
 бо номи cursor низ муаррифӣ карда шуда, сипас методи query даъват карда 
 шудааст. 
 Методи db.query дорои параметрҳои зерин мебошад: 
 String Table Name: номи ҷадвал; 
 String [ ] columns: руйхати сутунҳое, ки дар натиҷа дохил мешаванд; 
 String WHERE clause: шаблони where-шарт ё null; 
 String [ ] selection args: массив бо аргументи where-шарт; 
 String Group by: шарти гурӯҳбандӣ; 
 String Having: шарти HAVING; 
 String Order by: тартиби мураттабсозӣ. 
 Дар натиҷаи иҷроиши дархост объекти Cursor баргардонида мешавад, ки 
 дорои ҷадвали натиҷаи дархост мебошад. Cursor пайдарпай бо сатри натиҷа кор
 карда, дар ҳар вақт танҳо як сатр, ки ба он нишонагари Cursor ба он ишора
 мекунад фаъол мебошад. Объекти мазкур дорои методҳои зиёде мебошад, ки дар
 поён баъзе аз онҳо оварда шудаанд: 
 boolean moveToNext() - ишорагари курсорро як мавқеъ ба пеш мекучонад.
 Ҳангоми ба охири ҷадвали натиҷа расидан қимати false бармегардонад; 
 boolean moveToFirst() - ишорагари курсорро ба сатри нахустини ҷадвал
 мекучонад. Ҳангоми мавҷуд набудани сатр қимати false бармегардонад; 
 boolean moveToPosition(int position) - ишорагари курсорро ба сатри 
 нишондодашудаи ҷадвал мекӯчонад. Ҳангоми мавҷуд набудани сатри 
 мазкур қимати false бармегардонад; 
 boolean moveToPrevious() -- ишорагари курсорро як мавқеъ ба қафо 
 мекучонад. Ҳангоми ба аввали ҷадвал расидан қимати false бармегардонад;
 boolean moveToLast()- ишорагари курсорро ба сатри охирини ҷадвал 
 мекӯчонад. Ҳангоми мавҷуд набудани сатр қимати false бармегардонад; 
 int getColumnIndex(String column) – истинод ба сутунчаи column, ки дар
 сатри ҷорӣ ҷойгир аст бармегардонад. Барои ба даст овардани қимати дар
 истинод мавҷудбуда, аз методҳои Cursor.getInt(int ColumnIndex), getShort,
 getString, getDouble, getBlob истифода карда мешавад. 
 Барои муайянкунии мавқеи ҷории нишондиҳандаи (ишорагари) Cursor аз 
 методҳои boolean isAfterLast(), isBeforeFirst, isFirst, isLast ва isNull(columnIndex)
 истифода бурда мешавад. 
 Барои хондани иттилоот аз ҷадвал аз методи query истифода бурда 
 шудааст. Ба сифати параметри вурудии методи мазкур номи ҷадвал, руйхати 
 майдонҳои талабкардашуда, шарти интихобкунӣ, гурӯҳбандӣ ва мураттабсозӣ 
 равон карда мешавад. Агар бе мураттабсозӣ ва гурӯҳбандӣ танҳо қимати 
 майдонҳо лозим бошад, ба сифати параметрҳои ба онҳо мувофиқ аз доимии null
 истифода бурда шуда, танҳо номи ҷадвал нишон дода мешаваду халос. Азбаски
 методи getStudent барои аз рӯӣ id ба бадаст овардани иттилооти як донишҷӯ
 пешбинӣ шудааст, бинобар ин дар ин ҷо ба сифати параметри дуюм (selection) аз
 " id =?", new String[] { String.valueOf(id)} истифода бурда шудааст. Ин маънои
 онро дорад, ки ҳангоми id –и донишҷӯ ба id – и равонкардаи истифодабар 
 мувофиқат кардан, иттилооти он баргардонида мешаванд. Методи query объекти
 Cursor бар мегардонад. Пас аз ин шарти мавҷуд будани record санҷида мешавад,
 дар сурати мавҷуд будан тавассути методи moveToFirst курсор ба навишт(record)-
 и нахустини ҷадвал интиқол дода мешавад. Пас аз ин, бо номи student объекти
 класси Student муаррифӣ карда мешавад. Баъди муаррификунии объекти класси
 мазкур тавассути методи getString – и объекти cursor қимати лозимӣ аз майдони
 лозимӣ ба даст оварда шуда, тавассути гузорандаҳои класси Student дар майдони
 мувофиқи объекти он ҳамроҳ карда мешавад. Баъди бадастоварӣ объекти student
 тавассути дастури return ба ҷойи даъватшаванда баргардонида мешавад. 
 Қадами оянда барои ба даст овардани руйхати ҳамаи донишҷӯёни дар 
 ҷадвал маҷудбуда, бо номи getAllStudents методи нав месозем. 
 // Ба даст овардани руйхати ҳамаи донишҷӯён 
 public List<Student> getAllStudents() { 
 List<Student> students = new LinkedList<Student>(); 
 //. Навиштани дархост 
 String query = "SELECT * FROM " + TABLE_STUDENTS; 
 //. Сохтани истинод ба ПД 
 SQLiteDatabase db = this.getWritableDatabase(); 
 Cursor cursor = db.rawQuery(query, null); 
 /*. Пайдарпай ба даст овардани иттилооти донишҷӯён ва дар рӯй- 
 хат илова намудани онҳо */ 
 Student student = null; 
 if (cursor.moveToFirst()) { 
 do { 
 student = new Student(); 
 student.setId(Integer.parseInt(cursor.getString())); 
 student.setFname(cursor.getString()); 
 student.setName(cursor.getString()); 
 student.setAge(cursor.getInt()); 
 // Илова намудани student ба рӯйхати students 
 students.add(student); 
 } while (cursor.moveToNext()); 
 } 
 // Баргардонидани students 
 return students; 
 } 
 Дар ин ҷо ибтидо бо номи students як объекти класси List аз навъи Student
 сохта шудааст. Пас аз ин, барои ба дастовардани иттилооти донишҷуён бо 
 истифода аз оператори SELECT дархост сохта шуда, ба тағйирёбандаи query аз
 типи String бахшида шудааст. Оператори SELECT яке аз операторҳои асосии 
 забони SQL ба ҳисоб меравад, чунин тарзи истифодабарӣ дорад: 
 SELECT column, column, …, columnN FROM table_name; 
 Дар ин ҷо column, column, column номи сутунчаҳои ҷадвали table_name
 мебошанд. Агар зарурати интихоб намудани ҳамаи сутунчаҳо пешояд, он гоҳ ба
 сифати онҳо аз аломати ситорача (*) истифода бурда мешавад. 
 Пас аз муаррификунии тағйирёбандаи сатрии query бо номи объекти 
 класси SQLiteDatabase ва бо номи cursor объекти типи Cursor муаррифӣ карда
 шудааст. Пас аз муаррификунии объекти Cursor барои иҷро намудани дархост 
 методи rawQuery даъват карда шудааст. 
 Cursor cursor = db.rawQuery(query, null); 
 Методи rawQuery дорои ду параметр мебошад: 
 String query: сатр бо SQL дархости SELECT. 
 String[] selection args: массиви аргументҳо where, агар он дар дархости
 SELECT истифода шавад. 
 Дар мисоли овардашуда, ба сифати параметри дуюм аз null истифода бурда
 шудааст. 
 Қайд. Ба сифати натиҷа ин дархост объекти Cursor бармегардонад. Агар
 ба сифати майдони калидӣ дар ҷадвал аз сутунча бо номи аз _id фарқкунанда
 истифода шавад, он гоҳ зарурати истифодаи alias дар қолаби "SELECT [Column
 Name] as _id" пеш меояд. Мақсад аз он иборат аст, ки объекти Cursor ҳамавақт
 майдони калидиро ҳамчун _id ба назар мегирад. Дар ғайри ин сурат ҳолатҳои
 истисноӣ ба амал меоянд. 
 Қайд. Баъзе барноманависон истифодаи методи rawQuery-ро барои 
 операторҳои INSERT, UPDATE ва DELETE ё операторҳое, ки сохтори ҷадвалро 
 тағйир мекунанд, маслиҳат намедиҳанд! 
 Пас аз ин, бо номи student объекти класси Student сохта шудааст. Пас аз
 муаррификунӣ, шарти дар ибтидои ҷадвали натиҷа қарор доштани курсор 
 санҷида шуда, дар дохили оператори do while то расидан ба охири ҷадвал, ҳар
 маротиба якто - якто record ба даст оварда шуда, ба руйхати students илова карда
 мешавад. Пас аз иловакунии ҳамаи иттилооти дар ҷадвал мавҷуд буда, ба сифати
 натиҷа students баргардонида мешавад. 
 Барои таҳрир намудани иттилооти як донишҷӯ бо номи updateStudent як
 метод сохта шудааст: 
 // Таҳриркунии Student 
 public int updateStudent(Student student) { 
 //. Сохтани истинод ба ПД 
 SQLiteDatabase db = this.getWritableDatabase(); 
 //. Сохтани ContentValues барои иловакунии калид ва қимат "col- 
 umn"/value 
 ContentValues values = new ContentValues(); 
 values.put("fname", student.getFname()); // get fname 
 values.put("name", student.getName()); // get name 
 values.put("age", student.getAge()); // get age 
 //. Таҳриркунии як сатр 
 int i = db.update(TABLE_STUDENTS, values, null,null); 
 //. Пӯшонидани db 
 db.close(); 
 return i; 
 } 
 Амалкарди ин метод, низ монанди методи addStudent буда, барои 
 таҳриркунии иттилооти як донишҷӯ аз методи update истифода карда шудааст.
 Методи update дорои параметрҳои зерин мебошад: 
 String Table: номи ҷадвале, ки додаҳои онро мехоҳем иваз кунем. 
 ContentValues cv: ҷуфти калид-қимат бо иттилооти нав. 
 String where: сатри қолаб, ки шарти WHERE-ро муайян мекунад ва барои
 тафтиши ҳар як сатри ҷадвал истифода бурда мешавад. Агар шарт дорои 
 қимати ҳақ бошад, он гоҳ иттилооти мувофиқ ба параметри cv азнав карда
 мешаванд. 
 String[] args: массив бо аргументҳо, ки дар сатри қолаби where гузошта
 мешаванд. 
 Барои истифодаи методи update дар вуруди он номи ҷадвал, ContentValues
 бо қиматҳои барои азнавкунӣ пуршуда, сатри шарт (Where) ва массиви 
 аргументҳоро барои сатри шарт равон мекунем дар сатри шарт нишонаи? 
 истифода бурда шудааст. Ҳангоми сохтани дархост ба ПД ба ҷойи ин нишона 
 қимати массиви аргументҳо гузошта мешавад, дар мисоли мо-қимати 
 тағйирёбандаи id. Агар дар сатри шарт аломати? якчандто бошад, он гоҳ аз рӯи
 тартиб қиматҳои массив бо тартиб гузошта мешаванд. Методи update миқдори 
 навиштҳои азнавкарадшударо бармегардонад. 
 Барои нест кардани ягон record аз SQL фармони DELETE ё аз методи 
 db.delete истифода карда мешавад. Амалкарди методи мазкур монанди методи 
 update буда, руйхаи параметрҳояшон монанд мебошанд, ба истиснои 
 ContentValues.Барои иҷрои ин амал бо номи deleteStudent як метод менависем.
 // Несткунии як Student 
 public void deleteStudent(Student student) { 
 //. Сохтани истинод ба ПД 
 SQLiteDatabase db = this.getWritableDatabase(); 
 //. Несткунӣ 
 db.delete(TABLE_STUDENTS,KEY_id+" =?",new String[] { String.val- 
 ueOf(student.getId()) }); 
 //. Пӯшонидан db 
 db.close(); 
 } 
 Файли MainActivity.java-ро кушода, дар он фармонҳои зеринро менависем: 
 package com.example.user.dbapplication; 
 import android.content.DialogInterface; 
 import android.support.v.app.AlertDialog; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.LayoutInflater; 
 import android.view.View; 
 import android.widget.ArrayAdapter; 
 import android.widget.Button; 
 import android.widget.EditText; 
 import android.widget.ListView; 
 import java.util.List; 
 public class MainActivity extends AppCompatActivity { 
 Button btnAdd, btnFind, btnEdit, btnReadAll, btnDelete, btnExit; 
 EditText edfName, edName, edAge; 
 Student st; 
 MySQLiteHelper db; 
 ListView listStudents; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 btnAdd = (Button) findViewById(R.id.btnAdd); 
 btnFind = (Button) findViewById(R.id.btnFind); 
 btnEdit = (Button) findViewById(R.id.btnEdit); 
 btnDelete = (Button) findViewById(R.id.btnDelete); 
 btnReadAll = (Button) findViewById(R.id.btnReadAll); 
 btnExit = (Button) findViewById(R.id.btnExit); 
 edfName = (EditText) findViewById(R.id.edFName); 
 edName = (EditText) findViewById(R.id.edName); 
 edAge = (EditText) findViewById(R.id.edAge); 
 db = new MySQLiteHelper(this); 
 View.OnClickListener btnClick=new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 int index=v.getId(); 
 switch(index){ 
 case R.id.btnAdd: 
 String fName=edfName.getText().toString(); 
 String name=edfName.getText().toString(); 
 int age=Integer.valueOf(edAge.getText().toString()); 
 db.addStudent(new Student(fName, name,age)); 
 break; 
 case R.id.btnFind: 
 { 
 LayoutInflater li=LayoutInflater.from(MainActivity.this); 
 View myView=li.inflate(R.layout.my_dialog, null); 
 AlertDialog.Builder builder = new AlertDialog. 
 Builder(MainActivity.this); 
 builder.setView(myView); 
 final EditText input=(EditText) myView. 
 findViewById(R.id.myID); 
 builder.setPositiveButton("Ok", new DialogInterface. 
 OnClickListener() { 
 @Override 
 public void onClick(DialogInterface dialog, int id) { 
 int myid =Integer.valueOf(input.getText().toString()); 
 st = db.getStudent(myid); 
 edfName.setText(st.getFname()); 
 edName.setText(st.getName()); 
 edAge.setText(String.valueOf(st.getAge())); 
 } 
 }); 
 builder.setNegativeButton("Бекоркунӣ", new DialogInterface. 
 OnClickListener() { 
 public void onClick(DialogInterface dialog, int id) { 
 dialog.dismiss(); 
 } 
 }); 
 builder.create(); 
 builder.show(); 
 } 
 break; 
 case R.id.btnEdit: 
 st = new Student(); 
 st.setFname(String.valueOf(edfName.getText())); 
 st.setName(String.valueOf(edName.getText())); 
 st.setAge(Integer.valueOf(edAge.getText().toString())); 
 db.updateStudent(st); 
 break; 
 case R.id.btnDelete: 
 { 
 LayoutInflater li=LayoutInflater.from(MainActivity.this); 
 View myView=li.inflate(R.layout.my_dialog, null); 
 AlertDialog.Builder builder = new AlertDialog. 
 Builder(MainActivity.this); 
 builder.setView(myView); 
 final EditText input=(EditText) myView. 
 findViewById(R.id.myID); 
 builder.setPositiveButton("Ok",new DialogInterface. 
 OnClickListener(){ 
 @Override 
 public void onClick(DialogInterface dialog, int id) { 
 int myid =Integer.valueOf(input.getText().toString()); 
 st = db.getStudent(myid); 
 db.deleteStudent(st); 
 } 
 }); 
 builder.setNegativeButton("Бекоркунӣ", new DialogInterface. 
 OnClickListener() { 
 public void onClick(DialogInterface dialog, int id) { 
 dialog.dismiss(); 
 } 
 }); 
 builder.create(); 
 builder.show(); 
 } 
 break; 
 case R.id.btnReadAll: 
 List<Student>array_list = db.getAllStudents(); 
 ArrayAdapter arrayAdapter=new ArrayAdapter(MainActivity. 
 this,android.R.layout.simple_list_item_, array_list); 
 listStudents = (ListView)findViewById 
 (R.id.listStudents); 
 listStudents.setAdapter(arrayAdapter); 
 break; 
 case R.id.btnExit: 
 finish(); 
 break; 
 } 
 } 
 }; 
 btnAdd.setOnClickListener(btnClick); 
 btnFind.setOnClickListener(btnClick); 
 btnEdit.setOnClickListener(btnClick); 
 btnReadAll.setOnClickListener(btnClick); 
 btnDelete.setOnClickListener(btnClick); 
 btnExit.setOnClickListener(btnClick); 
 } 
 } 
 Тавре ки айён аст, дар ин ҷо ибтидо тағйирёбандаҳои зарурӣ муаррифӣ 
 шудаанд: 
 Button btnAdd, btnFind, btnEdit, btnReadAll, btnDelete, btnExit; 
 EditText edfName, edName, edAge; 
 Student st; 
 MySQLiteHelper db; 
 ListView listStudents; 
 Пас аз муаррификунӣ тағйирёбандаҳои зарурӣ дар дохили методи onCreate
 ба онҳо қимати аввала бахшида шудааст. 
 btnAdd = (Button) findViewById(R.id.btnAdd); 
 btnFind = (Button) findViewById(R.id.btnFind); 
 btnEdit = (Button) findViewById(R.id.btnEdit); 
 btnDelete = (Button) 
 findViewById(R.id.btnDelete); 
 btnReadAll = (Button) 
 findViewById(R.id.btnReadAll); 
 btnExit = (Button) findViewById(R.id.btnExit); 
 edfName = (EditText) 
 findViewById(R.id.edFName); 
 edName = (EditText) findViewById(R.id.edName); 
 edAge = (EditText) findViewById(R.id.edAge); 
 db = new MySQLiteHelper(this); 
 Барои ба амал омадани ҳодисаи мувофиқ ҳангоми пахш намудани ягон 
 тугмача бо номи btnClick метод муаррифӣ карда шудааст, ки мӯҳтавои он чунин
 шаклро дорад: 
 View.OnClickListener =new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 int index=v.getId(); 
 switch(index){ 
 case R.id.btnAdd: 
 String fName=edfName.getText().toString(); 
 String name=edfName.getText().toString(); 
 int age=Integer.valueOf(edAge.getText().toString()); 
 db.addStudent(new Student(fName, name,age)); 
 break; 
 case R.id.btnFind: 
 { 
 LayoutInflater li=LayoutInflater.from(MainActivity.this); 
 View myView=li.inflate(R.layout.my_dialog, null); 
 AlertDialog.Builder builder = new AlertDialog. 
 Builder(MainActivity.this); 
 builder.setView(myView); 
 final EditText input=(EditText) myView.findViewById 
 (R.id.myID); 
 builder.setPositiveButton("Ok", new DialogInterface. 
 OnClickListener() { 
 @Override 
 public void onClick(DialogInterface dialog, int id) { 
 int myid =Integer.valueOf(input. 
 getText().toString()); 
 st = db.getStudent(myid); 
 edfName.setText(st.getFname()); 
 edName.setText(st.getName()); 
 edAge.setText(String.valueOf(st.getAge())); 
 } 
 }); 
 builder.setNegativeButton("Бекоркунӣ", new 
 DialogInterface. OnClickListener() { 
 public void onClick(DialogInterface dialog, int id) { 
 dialog.dismiss(); 
 } 
 }); 
 builder.create(); 
 builder.show(); 
 } 
 break; 
 case R.id.btnEdit: 
 st = new Student(); 
 st.setFname(String.valueOf(edfName.getText())); 
 st.setName(String.valueOf(edName.getText())); 
 st.setAge(Integer.valueOf(edAge.getText(). 
 toString())); 
 db.updateStudent(st); 
 break; 
 case R.id.btnDelete: 
 { 
 LayoutInflater li=LayoutInflater.from(MainActivity.this); 
 View myView=li.inflate(R.layout.my_dialog, null); 
 AlertDialog.Builder builder = new AlertDialog. 
 Builder(MainActivity.this); 
 builder.setView(myView); 
 final EditText input=(EditText) myView.findViewById 
 (R.id.myID); 
 builder.setPositiveButton("Ok", new DialogInterface. 
 OnClickListener() { 
 @Override 
 public void onClick(DialogInterface dialog, int id) { 
 int myid =Integer.valueOf(input.getText().toString()); 
 st = db.getStudent(myid); 
 db.deleteStudent(st); 
 } 
 }); 
 builder.setNegativeButton("Бекоркунӣ", new DialogInterface. 
 OnClickListener() { 
 public void onClick(DialogInterface dialog, int id) { 
 dialog.dismiss(); 
 } 
 }); 
 builder.create(); 
 builder.show(); 
 } 
 break; 
 case R.id.btnReadAll: 
 List<Student>array_list = db.getAllStudents(); 
 ArrayAdapter arrayAdapter=new ArrayAdapter(MainActivity. 
 this, android.R.layout.simple_list_item_, array_list); 
 listStudents = (ListView)findViewById(R.id.listStudents); 
 listStudents.setAdapter(arrayAdapter); 
 break; 
 case R.id.btnExit: 
 finish(); 
 break; 
 } 
 } 
 }; 
 Тавре ки дида мешавад, дар ин ҷо дар дохили методи onClick аввал бо номи
 index тағйирёбандаи типи бутун муаррифӣ карда шуда, ба сифати қимати 
 ибтидои идентификатори v, ки аз типи View буда ба сифати параметр иштирок
 мекунад, нигоҳ дошта мешавад. 
 int index=v.getId() 
 Сипас дар дохили дастури switch ба id-и ягон тугмача мувофиқ будани 
 index санҷида шудааст. Масалан, барои тугмачаи btnAdd ибтидо қиматҳои fName,
 name ва age аз майдонҳои матнии мувофиқ хонда шуда, сипас барои онҳо методи
 addStudent даъват карда мешавад. 
 public void onClick(View v) { 
 int index=v.getId(); 
 switch(index){ 
 case R.id.btnAdd: 
 String fName=edfName.getText().toString(); 
 String name=edfName.getText().toString(); 
 int age=Integer.valueOf(edAge.getText().toString()); 
 db.addStudent(new Student(fName, name,age)); 
 break; 
 Амалкарди шартҳои дигар низ он қадар душвор намебошад, бинобар ин, 
 ҳар яки онҳоро пурра мавриди баҳс қарор намедиҳем. Азбаски ҳангоми пахш 
 намудани тугмачаи btnFind бо дохил намудудани идентификатори донишҷӯ 
 иттилооти мувофиқи он дар майдонҳои матнӣ бароварда мешаванд. Бинобар ин 
 барои дохилкунии идентификатори донишҷӯ аз равзанаи муколамавии 
 alertDialog истифода шудааст. 
 case R.id.btnFind: 
 { 
 LayoutInflater li=LayoutInflater.from(MainActivity.this); 
 View myView=li.inflate(R.layout.my_dialog, null); 
 AlertDialog.Builder builder = new AlertDialog.Builder( 
 MainActivity.this); 
 builder.setView(myView); 
 final EditText input=(EditText) myView.findViewById(R.id.myID); 
 builder.setPositiveButton("Ok", new DialogInterface. 
 OnClickListener() { 
 @Override 
 public void onClick(DialogInterface dialog, int id) { 
 int myid =Integer.valueOf(input.getText().toString()); 
 st = db.getStudent(myid); 
 edfName.setText(st.getFname()); 
 edName.setText(st.getName()); 
 edAge.setText(String.valueOf(st.getAge())); 
 } 
 }); 
 builder.setNegativeButton("Бекоркунӣ", new DialogInterface. 
 OnClickListener() { 
 public void onClick(DialogInterface dialog, int id) { 
 dialog.dismiss(); 
 } 
 }); 
 builder.create(); 
 builder.show(); 
 } 
 break; 
 Барномаро иҷро мекунем. Ҳангоми пахш кардани тугмачаҳои ҷустуҷӯ ва 
 несткунӣ равзанаи муколамавӣ пайдо мешавад. 
 Ба омӯхтани объекти Cursor мепардозем. Набояд онро ба курсори мӯш, ки
 дар экран ҳаракат мекунад иваз кард. 
 Курсор – ин руйхати сатрҳо дар намуди ҷадвал мебошад; 
 барои дастрасӣ ба курсор аз методи moveToFirst() истифода карда мешавад,
 чунки курсор пеш аз сатри якум қарор мегирад; 
 истифодабаранда бояд номи сарлавҳаи сутунҳоро донад; 
 истифодабаранда бояд типи сутунҳоро донад; 
 курсор тасодуфӣ мебошад (random cursor) – он метавонад ба пеш, қафо ва
 сатр ба сатр ҳаракат кунад; 
 азбаски курсор тасодуфӣ аст, пас он метавонад миқдори сатрҳоро (row 
 count) баргардонад. 
 Класси Cursor дорои имкониятҳои бисёре барои самтёбӣ (навигация) 
 мебошад, ҳоло якчандтои онҳоро меорем: 
 moveToFirst() — дар натиҷаи дархост курсор ба сатри якум мегузарад; 
 moveToNext() —гузаштани курсор ба сатри баъдӣ; 
 moveToLast() - гузаштани курсор ба сатри охирон; 
 moveToPrevious() — гузаштани курсор ба сатри қаблӣ; 
 getCount() — баргардонидани миқдори сатрҳо дар натиҷаи набори додаҳо;
 getColumnIndexOrThrow() —баргардонидани индекс барои сутун бо нишон 
 додани ном, дар ҳолати бо чунин ном мавҷуд набудани сутун ҳолати 
 истисноӣ ба амал меояд; 
 getColumnName() —бо нишон додани индекс баргардонидани номи сутун; 
 getColumnNames() —дар объекти Cursor баргардонидани массиви сатрие, 
 ки дар он номи ҳамаи сутунҳо мавҷуданд; 
 moveToPosition() — бо сатри нишондадошуда гузаронидани курсор; 
 getPosition() —мавқеи ҷории курсорро баргардонидан; 
 Барои озод намудани ҳофиза бояд курсор тавассути методи close() маҳкам
 (пӯшида) шавад. 
 Дар Android Studio Тавре ки қайд кардем барои кор кардан бо ПД ду усул
 вуҷуд дорад. Дар усули якум ПД дар ҳодисаи OnCreate –и қолаби асосӣ сохта
 мешавад. Ин усулро муфассал мавриди баҳс қарор дода будем. Тавре ки 
 мушоҳида кардем, ин навъ истифодаи ПД дар ҳолатҳое ки ПД дар вақти иҷроиши
 барнома холӣ аст ва ё маълумоти зиёд надорад, мувофиқ мебошад. 
 Баъзан зарурати таҳияи лоиҳаҳое, ки дар онҳо маълумоти зиёд пеш аз 
 иҷроиши барнома мавҷуд аст ба миён меояд, ба монанди маълумотнома, фарҳанг
 (словарь) ва ғайра. Дар ин ҳолатҳо беҳтар мешавад, ки ПД пешакӣ сохта шуда,
 баъдан истифода карда шавад. Ҳоло ин усулро дида мебароем. 
 Барои сохтани ПД-и SQLite аз барномаи DB Browser for SQLite истифода
 мебарем. Ин барномаро метавон ба таври ройгон аз суроғаи 
 www.sqlitebrowser.org ба даст овард. 
 Манбаи додаҳое меозем, ки аз як ҷадвал иборат аст. 
 _id name age 
 Ali 
 Vali 
 Karim 
 Said 
 Барои сохтани ПД DB Browser for SQLite-ро кушода, тугмачаи «Новая база
 данных»-ро пахш мекунем. 
 ПД-и сохтаамонро дар ягон ҷо бо номи Students.db сабт мекунем. 
 Пас аз сохтани ПД ба сохтани ҷадвал мепардозем ва бо номи myStudents 
 ҷадвал сохта, бо пахши тугмачаи «Добавить поле» дар он майдонҳои лозимиро
 илова мекунем. 
 Тавре ки айён аст, майдони нахустини мо id ном дошта, ҳамчун майдони
 калидӣ муаррифӣ гардидааст. Майдони дуюм майдони матнӣ буда, майдони 
 сеюм бошад, барои нигоҳ доштани синусол пешбинӣ шудааст. 
 Пас аз пахш кардани тугмачаи «Ок» дар тарафӣ рост номи ҷадваламон 
 пайдо мегардад. 
 Барои дар ҷадвал навиштани иттиллоот ҷадвалро интихоб карда, аз ва- 
 рақаи «Данные» фармони «Добавить запись»-ро пахш мекунем. Тугмачаи 
 охиронро якчанд маротиба пахш карда иттилооти лозимиро дар ҷадвал илова 
 мекунем. 
 Пас аз навиштани иттилооти лозима барои сабт намудани онҳо тугмачаи
 «Записать изменения»-ро пахш мекунем. Ҳамин тариқ ҷадваламон омода гардид.
 Сохтани лоиҳаи Android 
 Android Studio-ро кушода, дар он лоиҳаи нав бо номи 
 mySQLiteApplication сохта, активитии онро ба сурати зерин тағйир медиҳем.
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <Button 
 android:id="@+id/btnAdd" 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:text="Илова кардан" 
 app:layout_constraintEnd_toEndOf="parent" 
 app:layout_constraintStart_toStartOf="parent" 
 app:layout_constraintTop_toTopOf="parent" /> 
 <ListView 
 android:id="@+id/list" 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:layout_marginEnd="dp" 
 android:layout_marginStart="dp" 
 app:layout_constraintBottom_toBottomOf="parent" 
 app:layout_constraintEnd_toEndOf="parent" 
 app:layout_constraintHorizontal_bias="." 
 app:layout_constraintStart_toStartOf="parent" 
 app:layout_constraintTop_toBottomOf="@+id/button" 
 app:layout_constraintVertical_bias="." /> 
 </android.support.constraint.ConstraintLayout> 
 Пас аз омодакунии қолаби лоиҳа, ба кор оғоз мекунем. Ибтидо файли ПД-
 ро ба лоиҳа илова (ҳамроҳ) мекунем. Барои иҷрои ин амал дар лоиҳа папкаи assets
 месозем: Интихоби папкаи res->Тугмачаи рости муш->New->Folder->assets 
 Folder->Finish. 
 Файли ПД-ро ба папкаи сохтаамон нусхабардорӣ мекунем. 
 Ҳамин тариқ ПД-и лозима ба лоиҳа илова карда мешавад. Акнун ба 
 қисмати навиштани класс мегузарем. 
 Барои кушодан ва омода кардани ПД дар Android аз меросбари класси 
 SQLiteOpenHelper истифода бурда мешавад. Дар ин ҷо бо номи DatabaseHelper
 меросбари ин классро месозем. 
 Барои сохтани класси мазкур чунин амал карда мешавад. Интихоби папкаи
 java аз проекти сохтаамон->тугмачаи рости муш->New->Java Class->Ok->Name=
 DatabaseHelper->Ok. 
 Дар поён коди пурраи классро меорем, ки барои кор кардан нусхабардорӣ
 кардани он кифоя аст. 
 package com.example.user.mysqliteapplication; 
 import android.database.SQLException; 
 import android.database.sqlite.SQLiteOpenHelper; 
 import android.database.sqlite.SQLiteDatabase; 
 import android.content.Context; 
 import android.util.Log; 
 import java.io.File; 
 import java.io.FileOutputStream; 
 import java.io.IOException; 
 import java.io.InputStream; 
 import java.io.OutputStream; 
 class DatabaseHelper extends SQLiteOpenHelper { 
 private static String DB_PATH; // Суроғаи файли ПД 
 private static String DB_NAME = "studentinfo.db"; //Номи ПД 
 private static final int SCHEMA =; // версияи ПД 
 static final String TABLE = "students"; // Номи ҷадвал 
 // Номи сутунчаҳо 
 static final String COLUMN_ID = "_id"; 
 static final String COLUMN_NAME = "name"; 
 static final String COLUMN_YEAR = "age"; 
 private Context myContext; 
 DatabaseHelper(Context context) { 
 super(context, DB_NAME, null, SCHEMA); 
 this.myContext=context; 
 DB_PATH =context.getFilesDir().getPath() + DB_NAME; 
 } 
 @Override 
 public void onCreate(SQLiteDatabase db) { 
 } 
 @Override 
 public void onUpgrade(SQLiteDatabase db, int oldVersion, 
 int newVersion) { 
 } 
 void create_db(){ 
 InputStream myInput = null; 
 OutputStream myOutput = null; 
 try { 
 File file = new File(DB_PATH); 
 if (!file.exists()) { 
 this.getReadableDatabase(); 
 //ПД-и локалиро ҳамчун сел ба даст меорем 
 myInput = myContext.getAssets().open(DB_NAME); 
 // Суроғаи ПД-и нав 
 String outFileName = DB_PATH; 
 // Кушодани ПД-и холӣ 
 myOutput = new FileOutputStream(outFileName); 
 // Ба таври байти нусхабардорӣ намудани иттилоот 
 byte[] buffer = new byte[]; 
 int length; 
 while ((length = myInput.read(buffer)) > ) { 
 myOutput.write(buffer,, length); 
 } 
 myOutput.flush(); 
 myOutput.close(); 
 myInput.close(); 
 } 
 } 
 catch(IOException ex){ 
 Log.d("DatabaseHelper", ex.getMessage()); 
 } 
 } 
 public SQLiteDatabase open()throws SQLException { 
 return SQLiteDatabase.openDatabase(DB_PATH, null, SQLiteDatabase. 
 OPEN_READWRITE); 
 } 
 } 
 Ба намуди пешфарз ПД дар папкаи /data/data/[номи_пакет] /databases/ 
 нигоҳ дошта мешавад, барои ба даст овардани суроғаи файл аз дастури зерин
 истифода бурда мешавад: 
 DB_PATH =context.getFilesDir().getPath() + DB_NAME; 
 Барои сохтани ПД бошад, методи create_db(), сохта шуда дар методи 
 create() даъват карда шудааст. Мақсади сохтани методи create_db() нусхабардорӣ
 намудани ПД аз папкаи assets ба суроғаи дар тағйирёбандаи DB_PATH мебошад.
 Илова бар ин, дар ин ҷо методи open() муаррифӣ карда шудаст, ки барои 
 кушодани ПД тавассути SQLiteDatabase.openDatabase() истифода бурда мешавад.
 Барои кор кардан бо ПД-и дигар иваз кардани фармонҳои зерин кифоя асту
 халос. 
 private static String DB_PATH; // Суроғаи файли ПД 
 private static String DB_NAME = "studentinfo.db"; //Номи ПД 
 private static final int SCHEMA =; // версияи ПД 
 static final String TABLE = "students"; // Номи ҷадвал 
 // Номи сутунчаҳо 
 static final String COLUMN_ID = "_id"; 
 static final String COLUMN_NAME = "name"; 
 static final String COLUMN_AGE = "age"; 
 private Context myContext; 
 Ба класси асосӣ (MainActivity) рафта, мӯҳтавои онро ба сурати зерин
 тағйир медиҳем: 
 package com.example.user.mysqliteapplication; 
 import android.content.Intent; 
 import android.database.Cursor; 
 import android.database.sqlite.SQLiteDatabase; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.view.View; 
 import android.widget.AdapterView; 
 import android.widget.Button; 
 import android.widget.ListView; 
 import android.widget.SimpleCursorAdapter; 
 public class MainActivity extends AppCompatActivity { 
 //Муаррифӣ намудани тағйирёбандаҳо 
 ListView userList; 
 DatabaseHelper databaseHelper; 
 SQLiteDatabase db; 
 Cursor userCursor; 
 SimpleCursorAdapter userAdapter; 
 Button btnAdd; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 btnAdd=(Button)findViewById(R.id.btnAdd); 
 userList = (ListView)findViewById(R.id.list); 
 //Навиштани метод барои userList 
 userList.setOnItemClickListener(new AdapterView. 
 OnItemClickListener() { 
 @Override 
 public void onItemClick(AdapterView<?> parent, View view, 
 int position, long id) { 
 Intent intent = new Intent(getApplicationContext(), 
 UserActivity.class); 
 intent.putExtra("id", id); 
 startActivity(intent); 
 } 
 }); 
 databaseHelper = new DatabaseHelper(getApplicationContext()); 
 // ПД месозем 
 databaseHelper.create_db(); 
 btnAdd.setOnClickListener(new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 Intent intent = new Intent(MainActivity.this, 
 UserActivity.class); 
 startActivity(intent); 
 } 
 }); 
 } 
 @Override 
 public void onResume() { 
 super.onResume(); 
 // Кушодани пайвасткунӣ 
 db = databaseHelper.open(); 
 //Аз ПД ба даст овардани иттилоот ба шакли курсор 
 userCursor = db.rawQuery("select * from "+ DatabaseHelper. 
 TABLE, null); 
 // Муайянкунии сутунҳо барои баровардан дар ListView 
 String[] headers = new String[] {DatabaseHelper.COLUMN_NAME, 
 DatabaseHelper.COLUMN_YEAR}; 
 // Сохтани адаптер ва ба он равон кардани курсор 
 userAdapter = new SimpleCursorAdapter(this, android.R. 
 layout.two_line_list_item, 
 userCursor, headers, new int[]{android.R.id.text, android.R. 
 id.text}, ); 
 userList.setAdapter(userAdapter); 
 } 
 @Override 
 public void onDestroy(){ 
 super.onDestroy(); 
 // Пӯшидани курсор 
 db.close(); 
 userCursor.close(); 
 } 
 } 
 Тавре ки дида мешавад дар ин ҷо бо номи UserActivity.java як класс ва
 мувофиқ ба он як файли қолаб бо номи activity_user.xml низ истифода шудааст.
 Файлҳои мазкурро метавон дарҳол таҳия кард. Мӯҳтавои файли activity_user.xml
 чунин аст: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout 
 xmlns:android="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent"> 
 <EditText 
 android:id="@+id/nameEdit" 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:layout_marginBottom="dp" 
 android:ems="" 
 android:inputType="textPersonName" 
 android:hint="Ном" 
 app:layout_constraintBottom_toTopOf="@+id/ageEdit" 
 app:layout_constraintEnd_toEndOf="parent" 
 app:layout_constraintStart_toStartOf="parent" 
 app:layout_constraintTop_toTopOf="parent" 
 app:layout_constraintVertical_bias="." /> 
 <EditText 
 android:id="@+id/ageEdit" 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:layout_marginTop="dp" 
 android:ems="" 
 android:hint="Синну сол" 
 android:inputType="textPersonName" 
 android:text=" " 
 app:layout_constraintEnd_toEndOf="parent" 
 app:layout_constraintHorizontal_bias="." 
 app:layout_constraintStart_toStartOf="parent" 
 app:layout_constraintTop_toBottomOf="@+id/nameEdit" 
 tools:ignore="MissingConstraints" /> 
 <Button 
 android:id="@+id/saveButton" 
 android:layout_width="dp" 
 android:layout_height="wrap_content" 
 android:layout_marginStart="dp" 
 android:layout_marginTop="dp" 
 android:text="Сабт кардан" 
 app:layout_constraintStart_toStartOf="parent" 
 app:layout_constraintTop_toBottomOf="@+id/ageEdit" /> 
 <Button 
 android:id="@+id/deleteButton" 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:layout_marginEnd="dp" 
 android:layout_marginTop="dp" 
 android:text="Нест кардан" 
 app:layout_constraintEnd_toEndOf="parent" 
 app:layout_constraintTop_toBottomOf="@+id/ageEdit" 
 tools:ignore="MissingConstraints" /> 
 </android.support.constraint.ConstraintLayout> 
 Дар ин ҷо тугмачаҳо барои иловакунӣ/таҳриркунӣ ва несткунии иттилооти
 ягон донишҷӯ мавҷуд аст. 
 Коди файли UserActivity –ро бошад, ба сурати зерин омода мекунем. 
 package com.example.user.mysqliteapplication; 
 import android.os.Bundle; 
 import android.support.annotation.Nullable; 
 import android.support.v.app.AppCompatActivity; 
 import android.content.ContentValues; 
 import android.content.Intent; 
 import android.database.Cursor; 
 import android.database.sqlite.SQLiteDatabase; 
 import android.support.v.app.AppCompatActivity; 
 import android.os.Bundle; 
 import android.support.v.widget.Toolbar; 
 import android.view.MenuItem; 
 import android.view.View; 
 import android.widget.Button; 
 import android.widget.EditText; 
 import android.widget.Toast; 
 public class UserActivity extends AppCompatActivity { 
 EditText nameBox; 
 EditText ageBox; 
 Button delButton; 
 Button saveButton; 
 DatabaseHelper sqlHelper; 
 SQLiteDatabase db; 
 Cursor userCursor; 
 long userId=; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_user); 
 //Илова кардани тугмачаи ба хона 
 getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
 getSupportActionBar().setDisplayShowHomeEnabled(true); 
 nameBox = (EditText) findViewById(R.id.nameEdit); 
 ageBox = (EditText) findViewById(R.id.ageEdit); 
 delButton = (Button) findViewById(R.id.deleteButton); 
 saveButton = (Button) findViewById(R.id.saveButton); 
 sqlHelper = new DatabaseHelper(this); 
 db = sqlHelper.open(); 
 Bundle extras = getIntent().getExtras(); 
 if (extras!= null) { 
 userId = extras.getLong("id"); 
 } 
 // агар бошад, он гоҳ иловакунӣ 
 if (userId > ) { 
 // элементро аз рӯӣ id ПД мегирем 
 userCursor = db.rawQuery("select * from " + DatabaseHelper. 
 TABLE + " where " +DatabaseHelper.COLUMN_ID + "=?", 
 new String[]{String.valueOf(userId)}); 
 userCursor.moveToFirst(); 
 nameBox.setText(userCursor.getString()); 
 ageBox.setText(String.valueOf(userCursor.getInt())); 
 userCursor.close(); 
 } else { 
 // пинҳонкунии тугмачаи несткунӣ 
 delButton.setVisibility(View.GONE); 
 } 
 } 
 @Override 
 public boolean onOptionsItemSelected(MenuItem item) { 
 switch (item.getItemId()) { 
 case android.R.id.home: 
 goHome(); 
 break; 
 } 
 return true; 
 } 
 public void save(View view){ 
 ContentValues cv = new ContentValues(); 
 cv.put(DatabaseHelper.COLUMN_NAME, nameBox.getText(). 
 toString()); 
 cv.put(DatabaseHelper.COLUMN_YEAR, Integer.parseInt 
 (ageBox.getText().toString())); 
 if (userId > ) { 
 db.update(DatabaseHelper.TABLE, cv, DatabaseHelper. 
 COLUMN_ID + "=" + String.valueOf(userId), null); 
 } else { 
 db.insert(DatabaseHelper.TABLE, null, cv); 
 } 
 goHome(); 
 } 
 public void delete(View view){ 
 db.delete(DatabaseHelper.TABLE, "_id =?", new String[] 
 {String.valueOf(userId)}); 
 goHome(); 
 } 
 private void goHome(){ 
 // пушонидани пайвасткунӣ 
 db.close(); 
 // гузариш ба activity-и асосӣ 
 Intent intent = new Intent(this, MainActivity.class); 
 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent. 
 FLAG_ACTIVITY_SINGLE_TOP); 
 startActivity(intent); 
 } 
 } 
 Ҳамин тариқ, пас аз иҷрои ин амалҳо барномаамонро иҷро мекунем, ки 
 шакли зерин ҳосил мешавад: 
 Ҳангоми пахши тугмачаи “Илова кардан” чунин натиҷа ба даст меояд: 
 Ҳангоми аз равзанаи асосӣ бо нишондиҳандаи муш пахш намудани ягон 
 банди руйхат равзанаи зерин кушода мешавад: 
 Тавре ки дида мешавад, дар ин ҷо ду тугмача мавҷуд аст, ки барои таҳрир
 кардан ва нест намудани иттилооти донишҷӯи интихобшуда истифода мешаванд.
 Ҳангоми таҳриркунӣ ё несткунии ягон объект аз руйхати activity-и асосӣ
 ба UserActivity идентификатори он (id) равон карда мешавад. 
 long userId=; 
 //................. 
 Bundle extras = getIntent().getExtras(); 
 if (extras!= null) { 
 userId = extras.getLong("id"); 
 } 
 Агар аз MainActivity идентификатор равон карда нашавад, он гоҳ ба id
 қимати бахшида мешавад. Дар натиҷа дар UserActivity танҳо тугмачаи сабт
 кардан нишон дода мешаваду халос. 
 Дар вақти id ба баробар набудан, аз ПД объекти ба он мувофиқ ба даст
 оварда шуда, дар UserActivity нишон дода мешавад. 
 if (id < ) { 
 userCursor = db.rawQuery("select * from " + DatabaseHelper.TABLE 
 + " where " +DatabaseHelper.COLUMN_ID + "=?", new String[] 
 {String.valueOf(id)}); 
 userCursor.moveToFirst(); 
 nameBox.setText(userCursor.getString()); 
 ageBox.setText(String.valueOf(userCursor.getInt())); 
 userCursor.close(); 
 } 
 Барои илова намудани имконияти ҷустуҷӯ ба лоиҳа, ибтидо дар 
 активитии асосӣ ба ҷойи тугмачаи Button як тугмачаи EditView мегузорем, дар
 натиҷа мӯҳтавои қолаби асосӣ шакли зеринро мегирад: 
 <?xml version="." encoding="utf-"?> 
 <android.support.constraint.ConstraintLayout xmlns:an- 
 droid="http://schemas.android.com/apk/res/android" 
 xmlns:app="http://schemas.android.com/apk/res-auto" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context=".MainActivity"> 
 <EditText 
 android:id="@+id/searchEdit" 
 android:layout_width="match_parent" 
 android:layout_height="dp" 
 android:ems="" 
 android:hint="Ҷустуҷӯ" 
 android:inputType="textPersonName" 
 android:text="" 
 android:textSize="sp" 
 app:layout_constraintEnd_toEndOf="parent" 
 app:layout_constraintHorizontal_bias="." 
 app:layout_constraintStart_toStartOf="parent" 
 app:layout_constraintTop_toTopOf="parent" /> 
 <ListView 
 android:id="@+id/list" 
 android:layout_width="dp" 
 android:layout_height="dp" 
 android:layout_marginTop="dp" 
 app:layout_constraintEnd_toEndOf="parent" 
 app:layout_constraintHorizontal_bias="." 
 app:layout_constraintStart_toStartOf="parent" 
 app:layout_constraintTop_toBottomOf="@+id/searchEdit" 
 tools:ignore="MissingConstraints" /> 
 </android.support.constraint.ConstraintLayout> 
 Коди класси асосиро бошад, ба сурати зерин тағйир медиҳем: 
 package com.example.user.mysqliteapplication; 
 import android.database.Cursor; 
 import android.database.SQLException; 
 import android.database.sqlite.SQLiteDatabase; 
 import android.os.Bundle; 
 import android.support.v.app.AppCompatActivity; 
 import android.text.Editable; 
 import android.text.TextWatcher; 
 import android.widget.EditText; 
 import android.widget.FilterQueryProvider; 
 import android.widget.ListView; 
 import android.widget.SimpleCursorAdapter; 
 public class MainActivity extends AppCompatActivity { 
 //Муаррифӣ намудани тағйирёбандаҳо 
 DatabaseHelper sqlHelper; 
 SQLiteDatabase db; 
 Cursor userCursor; 
 SimpleCursorAdapter userAdapter; 
 ListView userList; 
 EditText searchEdit; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 userList = (ListView)findViewById(R.id.list); 
 searchEdit = (EditText)findViewById(R.id.searchEdit); 
 sqlHelper = new DatabaseHelper(getApplicationContext()); 
 // Сохтани ПД 
 sqlHelper.create_db(); 
 } 
 @Override 
 public void onResume() { 
 super.onResume(); 
 try { 
 db = sqlHelper.open(); 
 userCursor = db.rawQuery("select * from " + DatabaseHelper. 
 TABLE, null); 
 String[] headers = new String[]{DatabaseHelper.COLUMN_NAME, 
 DatabaseHelper.COLUMN_AGE}; 
 userAdapter = new SimpleCursorAdapter(this, android.R. 
 layout.two_line_list_item,userCursor, headers, 
 new int[]{android.R.id.text, android.R.id.text}, ); 
 /*Ҳангоми дар майдони матнӣ мавҷуд будани матн амали 
 полонидан ба вуҷуд меояд. 
 Ин тафтишот ҳангоми иваз намудани самти экран ба амал 
 меояд*/ 
 if(!searchEdit.getText().toString().isEmpty()) 
 userAdapter.getFilter().filter(searchEdit.getText(). 
 toString()); 
 // Муқарраркуни ҳодисаи ивазкунии матн 
 searchEdit.addTextChangedListener(new TextWatcher() { 
 public void afterTextChanged(Editable s) { } 
 public void beforeTextChanged(CharSequence s, int start, 
 int count, int after) { } 
 // Ҳангоми тағйир додани матн амали полонидан ба вуҷуд меояд 
 public void onTextChanged(CharSequence s, int start, 
 int before, int count) { 
 userAdapter.getFilter().filter(s.toString()); 
 } 
 }); 
 // Муқарракунии провайдери полонидан 
 userAdapter.setFilterQueryProvider(new 
 FilterQueryProvider() { 
 @Override 
 public Cursor runQuery(CharSequence constraint) { 
 if (constraint == null || constraint.length() == ) { 
 return db.rawQuery("select * from " + DatabaseHelper. 
 TABLE, null); 
 } 
 else { 
 return db.rawQuery("select * from " +DatabaseHelper. 
 TABLE + " where " + DatabaseHelper.COLUMN_NAME + " 
 like?", new String[]{"%" + constraint.toString() + "%"}); 
 } 
 } 
 }); 
 userList.setAdapter(userAdapter); 
 } 
 catch (SQLException ex){} 
 } 
 @Override 
 public void onDestroy(){ 
 super.onDestroy(); 
 // Пӯшонидани пайвастшавӣ бо курсор 
 db.close(); 
 userCursor.close(); 
 } 
 } 
 Тавре ки дида мешавад, дар ин ҷо танҳо аз як равзана (activity) истифода
 бурда шудааст. Дар методи onResume() ҳангоми дар майдони матнӣ мавҷуд 
 будани матн, амали полонидан иҷро карда шудааст. 
 @Override 
 public void onResume() 
 {... 
 if(!searchEdit.getText().toString().isEmpty()) 
 userAdapter.getFilter().filter(searchEdit.getText(). 
 toString()); 
 // Муқарраркуни шунавандаи ивазкунии матн 
 searchEdit.addTextChangedListener(new TextWatcher() 
 { 
 public void afterTextChanged(Editable s) { } 
 public void beforeTextChanged(CharSequence s, 
 int start, int count, int after) { } 
 // Ҳангоми тағйир додани матн амали полонидан ба вуҷӯъ меояд 
 public void onTextChanged(CharSequence s, int start, 
 int before, int count) { 
 userAdapter.getFilter().filter(s.toString()); 
 } 
 }); 
 Пас аз ин провайдери полонидан муқаррар карда шуда, дар дохили он 
 шарти холи набудани калиди ҷустуҷӯӣ (сатре, ки дар майдони матнӣ барои 
 ҷустуҷӯ навишта мешавад) санҷида шудааст. Дар сурати ба null баробар будани
 он ё дарозиаш ба баробар будан, дархости бешарт иҷро карда мешавад. Дар
 ҳолати акс бошад, дархосте иҷро карда мешавад, ки дар он дастурҳои where ва
 like истифода шудаанд. 
 // Муқарракунии муҳайёкунандаи (provider) полонидан 
 userAdapter.setFilterQueryProvider(new FilterQueryProvider() 
 { 
 @Override 
 public Cursor runQuery(CharSequence constraint) { 
 if (constraint == null || constraint.length() == ) 
 { 
 return db.rawQuery("select * from " + 
 DatabaseHelper.TABLE, null); 
 } 
 else { 
 return db.rawQuery("select * from " + DatabaseHelper. 
 TABLE + " where "+DatabaseHelper.COLUMN_NAME +like?", 
 new String[]{"%" + constraint.toString() + "%"}); 
 } 
 } 
 }); 
 userList.setAdapter(userAdapter); 
 } 
 catch (SQLException ex){} 
 } 
 Барномаро иҷро карда, номи ягон донишҷӯйро барои ҷустуҷӯ дар майдони
 матнӣ дохил мекунем ва натиҷаи зеринро ба даст меорем: 
 Ҳамин тариқ, амали истифодаи ПД-и беруна дар лоиҳаҳои Android ба 
 анҷом расид. 
 Файли ПД-и Students-ро, ки дар папкаи assets ҷойгир аст, тавассути 
 барномаи DB Browser for SQLite кушода, ягон тағйирот дар он илова намуда 
 (масалан, ному насаби студенти якумро тағйир дода, аз нав сабт мекунем. 
 Пас аз тағйирдиҳӣ барномаро иҷро карда мебинем, ки тағйироти иҷро 
 кардаамон ба амал наомадааст. 
 Чаро чунин шуд? Сабаб дар он аст, ки лоиҳа ҳангоми ҳар як иҷроиш 
 файли ПД-ро азнавсозӣ намекунад. Масалан, тасодуфан агар Шумо ягон 
 иттилоот дар ПД илова кунед, он гоҳ бо аз навсозӣ аз байн мераванд. 
 Барои иҷро гардидани тағйирот дар класси DatabaseHelper рақами ПД- 
 ро иваз мекунем, яъне 
 private static final int DB_VERSION =; 
 Акнун пас аз иҷрои барнома ПД азнавсозӣ мешавад. 
 Қайд. Ҳангоми азнавсозии ПД, файли ПД иваз карда мешавад, яъне ҳамаи
 тағйироти дар ПД ба амаломада дар лоиҳаи Android (тавассути дархостҳои 
 INSERT, UPDATE иҷро гардида) аз байн мераванд. Аз ин рӯ, барои ивазкуниҳои
 лозимӣ методи updateDataBase-ро даъват накарда, тавассути методи onUpgrade бо
 истифода аз усулҳои стандартӣ ПД-ро азнавсозӣ кунед. Дар ин ҳангом ивазкунии
 ПД ба амал намеояд. Масалан, бо усули зайл, метавон сутунчаи нав дар ПД 
 ҳамроҳ кард. 
 @Override 
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 if (newVersion > oldVersion) { 
 String q = "ALTER TABLE students ADD tel text"; 
 db.execSQL(q); 
 } 
 } 
 Баъзан ҳангоми истифода, ПД-и аз МБ зиёд, аз папкаи assets 
 нусхабардорӣ карда намешавад ва барнома метавонад ба хатогӣ рӯбарӯ шавад.
 (Дар баъзе мақолаҳо чунин гуфта мешавад, дар асл метавонад пойгоҳи додаҳои
 калонҳаҷм низ бе хатогӣ кор кунад.) Ба сифати ҳалли ин масъала ПД ба папкаи
 res/raw гузошта мешавад. Барои ин, ибтидо папкаи мазкур ба шакли зайл сохта
 мешавад. Интихоби папкаи res->New->Directory->Name=raw->Ok. 
 Файли ПД-ро ба папкаи сохтаамон нусхабардорӣ мекунем. 
 Дар класси DatabaseHelper танҳо як сатри copyDBFile-ро иваз мекунем.
 Сатри қаблӣ 
 myInput = myContext.getAssets().open(DB_NAME); 
 Сатри ҷорӣ 
 myInput = myContext.getResources().openRawResource(R.raw.studentinfo);