
Рано чи пізно кожен розробник Android накопичує чимало готових рішень і вирішує, що було б чудово поділитися ними з рештою світу. На жаль, більшість з нас так і не доходять до цього, адже кожне рішення потрібно перетворити на окрему бібліотеку та розмістити в окремому відкритому репозиторії. Більше того, деякі вважають, що це все занадто складно, щоб навіть намагатися. Тут я хотів би розвіяти цей міф, адже з появою Gradle в Android-стеку ділитися своєю бібліотекою з світом стало набагато простіше, ніж раніше.
Використання BottomTabLayout
Звісно, перший крок — написати свою бібліотеку. У цьому прикладі я буду використовувати BottomTabLayout. Ця бібліотека дозволяє додати нижній TabLayout, який прийшов з iOS.
1. Набір вкладок задається за допомогою XML-файлу ресурсів меню. Наприклад:
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"><item android:id="@+id/menu_button1" android:icon="@drawable/tab_button1_selector" android:title="Кнопка1"></item> <item android:id="@+id/menu_button2" android:icon="@drawable/tab_button1_selector" android:title="Кнопка2"></item> <item android:id="@+id/menu_button3" android:icon="@drawable/tab_button1_selector" android:title="Кнопка3"></item></menu>
2. У наведеному вище коді властивість icon
є ресурсом selector
, який ми створюємо в drawable
:
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/ic_button1_dark" android:state_pressed="true"></item><!-- натиснуто --><item android:drawable="@drawable/ic_button1_dark" android:state_selected="true"></item><!-- вибрано --><item android:drawable="@drawable/ic_button1"></item><!-- за замовчуванням --></selector>
Стан state_selected
та default
є обов'язковими, оскільки нам потрібно підсвітити вибрану вкладку.
3. Давайте створимо selector
для тексту:
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:color="@color/black" android:state_pressed="true"></item><!-- натиснуто --><item android:color="@color/black" android:state_selected="true"></item><!-- вибрано --><item android:color="@color/white"></item><!-- за замовчуванням --></selector>
4. Тепер створіть стиль для тексту:
<style name="TabButtonTextStyle" parent="android:Widget.Button"><item name="android:textSize">12sp <item name="android:textColor">@drawable/tab_button_text_selector </style>
5. Додайте BottomTabLayout до розмітки Activity
:
<?xml version="1.0" encoding="utf-8"?><relativelayout 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" tools:context="com.stfalcon.bottomtablayout_sample.MainActivity"> <framelayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/bottomTabLayout"></framelayout> <com.stfalcon.bottomtablayout.bottomtablayout android:id="@+id/bottomTabLayout" android:layout_width="match_parent" android:layout_height="56dp" android:layout_alignparentbottom="true" android:background="@color/dark"></com.stfalcon.bottomtablayout.bottomtablayout></relativelayout>
6. Встановіть activity
в класі::
@Override protectedvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); container = R.id.container;//Контейнер для фрагментів//Налаштування табу кнопок bottomTabLayout =(BottomTabLayout) findViewById(R.id.bottomTabLayout);//встановити стиль тексту кнопок bottomTabLayout.setButtonTextStyle(R.style.TextGray16);// встановити кнопки з ресурсів меню bottomTabLayout.setItems(R.menu.menu_bottom_layout);//встановити слухача для вибраної вкладки bottomTabLayout.setListener(new BottomTabLayout.OnItemSelectedListener(){ @Override publicvoid onItemSelected(int id){ switchFragment(id);}});//встановити кнопку, яка буде вибрана при запуску активності bottomTabLayout.setSelectedTab(R.id.menu_button1);}
7. У нашому прикладі, коли вкладка переключається, фрагмент у контейнері змінюється:
*** Показати фрагмент у контейнері * @param id Ресурс id елемента меню */publicvoid switchFragment(int id){ Fragment fragment =null;switch(id){case R.id.menu_button1: fragment = ColoredFragment.newInstance(R.color.blue, "Фрагмент 1");break;case R.id.menu_button2: fragment = ColoredFragment.newInstance(R.color.green, "Фрагмент 2");break;case R.id.menu_button3: fragment = ColoredFragment.newInstance(R.color.pink, "Фрагмент 3");break;case R.id.menu_button4: fragment = ColoredFragment.newInstance(R.color.blueDark, "Фрагмент 4");break;case R.id.menu_button5: fragment = ColoredFragment.newInstance(R.color.white, "Фрагмент 5");break;}if(fragment !=null){ FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(container, fragment); transaction.commit();}}
Ми закінчили, тепер час опублікувати бібліотеку. Відвідайте наш GitHub, щоб ближче ознайомитися з BottomTabLayout.
Публікація вашої бібліотеки Android
Тепер я розкажу вам, як, маючи щось подібне, ви можете поділитися цим із світом. Почнемо зі створення модуля, потім завантажимо його на GitHub і зробимо публічним за допомогою Bintray.
Створення модуля в Android Studio
1. Створіть проект в Android Studio. Для зручності перейменуйте модуль додатку на sample. Він міститиме ваш приклад використання бібліотеки.
2. Створіть новий модуль:
3. Виберіть тип Android Library:
4. Введіть назву — я буду використовувати bottomtablayout.
5. Тепер settings.gradle має виглядати так:
include ':sample', ':bottomtablayout'
6. У модулі sample додайте залежність у build.gradle:
compile project(':bottomtablayout')
Це тимчасове рішення, оскільки наразі наша бібліотека локальна.
7. Тепер ви можете написати свою бібліотеку (або перенести існуючий код у неї) та протестувати її в модулі sample.
8. Коли ваша бібліотека готова, завантажте її на свій обліковий запис GitHub.
9. Напишіть README.md інструкцію.
Додавання бібліотеки до Bintray
1. Якщо бібліотека готова, час показати її всьому світу! Отримайте обліковий запис Bintray.
2. Додайте залежність у файл build.gradle проекту:
dependencies { ... classpath'com.novoda:bintray-release:0.3.4'}
3. У файлі build.gradle модуля бібліотеки (bottomtablayout у нашому випадку) застосуйте плагін:
apply plugin:'com.novoda.bintray-release'
У тому ж файлі:
publish { groupId ='com.github.stfalcon' artifactId ='contentmanager' publishVersion ='0.1.1' desc ='Бібліотека, яка допомагає за допомогою кількох рядків коду отримувати зображення та відео з файлової системи Android або хмари ures, а також з камери.' licences =['Apache-2.0'] uploadName='ContentManager' website ='https://github.com/stfalcon-studio/ContentManager.git'}
Де:
groupId
— пакет (може відрізнятися від пакета модуля). Рекомендую називатиgroupId
так:com.github.<ваше ім'я користувача на GitHub>
, оскільки коли ви входите, щоб завантажити свою бібліотеку на Maven Central, ви повинні бути власником домену, який використовується в назві groupId.artifactId
— назва модуля.publishVersion
— версія публікації.desc
— опис бібліотеки.licences
— ліцензія.uploadName
— назва бібліотеки.website
— посилання на проект GitHub.
4. Тепер вам потрібен API Key вашого облікового запису Bintray. Перейдіть на сторінку профілю Bintray:
5. Знайдіть кнопку Редагувати і натисніть на неї:
6. Тепер перейдіть до API Key:
7. Зберігайте свій ключ у безпечному місці.
8. Відкрийте термінал Android Studio і запустіть:
gradlew clean build bintrayUpload -PbintrayUser=<юзернейм на bintray>-PbintrayKey=<api bintray>-PdryRun=false</api>
9. Зачекайте, поки бібліотека буде зібрана та завантажена на сервер.
10. Тепер перейдіть на сайт Bintray і знайдіть сторінку вашої нової бібліотеки.
11. Наразі, якщо ви хочете використовувати бібліотеку, вам потрібно додати посилання на репозиторій у файл build.gradle проекту:
repositories { maven { url "http://dl.bintray.com/<username>/maven"}}</username>
Але чи можемо ми якось спростити останній крок? Звичайно, можемо!
Додавання Android бібліотеки до jCenter
Нещодавно jCenter став стандартним репозиторієм Android (раніше використовувався Maven Central). Проте, додати вашу бібліотеку в jCenter дуже просто.
1. На сторінці вашої бібліотеки натисніть додати до jCenter і надішліть запит на додавання вашої бібліотеки. Протягом 24 годин ваша бібліотека буде додана до jCenter, і ви отримаєте електронний лист з повідомленням.
2. Тепер ви можете підключити вашу бібліотеку через build.gradle модуля, додавши відповідну залежність:
compile 'com.github.stfalcon:contentmanager:0.1.1'
Висновок
Вітаємо! Тепер ваша бібліотека готова, і ви можете показати її своїм друзям, поділитися з розробницькою спільнотою та спостерігати, як вона приносить вам зірки та форки на GitHub.
UPD: Ознайомтесь з новою статтею на нашому сайті про Android бібліотеки!
Потрібна розробка MVP, iOS та Android застосунків або прототипування? Ознайомтесь з нашим портфоліо та замовте сьогодні!