Наткнулся на довольно необычную библиотеку, объединяющую кнопку и прогрессбар в одном View. На выбор нам дается три вида кнопки:
- ActionProcessButton
- GenerateProcessButton
- SubmitProcessButton
Все View-компоненты описанные выше наследуются от класса ProcessButton.
ActionProcessButton
main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res-auto" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <com.dd.processbutton.iml.ActionProcessButton android:id="@+id/btnSignInAPB" android:layout_width="match_parent" android:layout_height="48dp" android:layout_marginBottom="16dp" android:text="Войти" android:textColor="#fffffe" android:textSize="18sp" custom:pb_colorComplete="@color/green_complete" custom:pb_colorNormal="@color/blue_normal" custom:pb_colorPressed="@color/blue_pressed" custom:pb_colorProgress="@color/purple_progress" custom:pb_textComplete="Авторизован" custom:pb_textProgress="Авторизуемся…"> </LinearLayout>
Разберем атрибуты с префиксом custom:
pb_colorNormal — цвет кнопки в обычном состоянии
pb_colorPressed — цвет кнопки в обычно состоянии
pb_colorProgress — цвет прогрессбара
pb_textProgress — текст, отображающийся при загрузке
pb_colorComplete — текст, отображающийся после завершения загрузки
MainActivity.java:
ActionProcessButton btnSignIn = (ActionProcessButton) findViewById(R.id.btnSignInAPB); btnSignIn.setMode(ActionProcessButton.Mode.PROGRESS);
В методе setMode мы указываем тип загрузки. Всего доступно два типа: PROGRESS и ENDLESS. По умолчанию установлен ENDLESS.
GenerateProcessButton
main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res-auto" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <com.dd.processbutton.iml.GenerateProcessButton android:id="@+id/btnUpload" android:layout_width="match_parent" android:layout_height="48dp" android:text="Загрузить" android:textColor="@android:color/white" android:textSize="18sp" custom:pb_textComplete="Загружено" custom:pb_textProgress="Загрузка…"> </LinearLayout>
MainActivity.java:
GenerateProcessButton btnUpload = (GenerateProcessButton) findViewById(R.id.btnUpload);
SubmitProcessButton
main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res-auto" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <com.dd.processbutton.iml.SubmitProcessButton android:id="@+id/btnSend" android:layout_width="match_parent" android:layout_height="48dp" android:minWidth="100dp" android:text="Отправить" android:textColor="@android:color/white" android:textSize="18sp" custom:pb_textComplete="Готово" custom:pb_textProgress="Загрузка…"> </LinearLayout>
MainActivity.java:
SubmitProcessButton btnSend = (SubmitProcessButton) findViewById(R.id.btnSend);
Библиотека на GitHub: ProcessButton.
Исходники примера: ProcessButton.