Android - Пользовательский флажок с несколькими кликами с изображениями
Я хочу создать пользовательский флажок с четырьмя различными состояниями:
- Не отмечено (пустой флажок)
- Проверено (зеленая галочка)
- Недоступно (красный крест)
- Частично недоступен (оранжевый флажок)
Я нашел здесь, как создать флажок с пользовательскими изображениями (с нажатыми состояниями, фокусировкой, наведением и настройкой по умолчанию). Но вместо этого я хочу, чтобы цикл между четырьмя состояниями был следующим:
- нажмите один раз: он отмечен зеленым;
- нажмите дважды: это красный крест;
- цена трижды: проверено оранжевым;
- нажмите четыре раза: снова не проверено.
PS: я знаю, что в приложении для Android, вероятно, проще сделать выпадающий список с 4 состояниями или всплывающее окно, где вы выбираете одно из состояний. Но я хочу среди этих двух, этот третий вариант выше, чтобы пользователи сами могли решить, какой из трех параметров они предпочтут.
PSS: в то время как я набираю это, мне пришла в голову идея кнопки с непроверенным изображением, и когда вы щелкаете по ней, она заменяет image-src на следующее, сохраняя все остальное таким же (как ширина / высота и Запас / обивка). Это лучший подход в этой ситуации, или у кого-то есть более элегантное решение?
Заранее спасибо за ответы.
1 ответ
Как указано в PSS, у меня была идея для решения, когда я печатал вопрос выше. Я использовал ImageButton, который меняет свой источник при нажатии. Вот код:
ImageButton в xml:
<ImageButton
android:id="@+id/ibtnCheckbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/checkbox_content_description"
android:src="@drawable/checkbox_unchecked"
android:background="@drawable/transparent_button_background" />
transparent_button_background.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@android:color/transparent" />
<item android:state_pressed="true" android:drawable="@android:color/transparent" />
<item android:drawable="@android:color/transparent" />
</selector>
Деятельность:
public class MainActivity extends ActionBarActivity {
private ImageButton cbButton;
private int status;
private int checkbox_images[] = {
R.drawable.checkbox_unchecked,
R.drawable.checkbox_checked,
R.drawable.checkbox_error,
R.drawable.checkbox_partly
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
status = 0;
addListenerToButton();
}
private void addListenerToButton(){
cbButton = (ImageButton) findViewById(R.id.ibtnCheckbox);
cbButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
switch(status){
// Unchecked -> Green checked
case 0:
// Green checked -> Red cross
case 1:
// Red cross -> Orange-yellow checked
case 2:
cbButton.setImageResource(checkbox_images[++status]);
break;
// Orange-yellow checked -> Unchecked
case 3:
cbButton.setImageResource(checkbox_images[status = 0]);
break;
// Default (just in case)
default:
status = 0;
cbButton.setImageResource(checkbox_images[status++]);
break;
}
}
});
}
...
}