Existe uma maneira fácil de usar uma imagem personalizada para uma caixa de seleção? Estou procurando duplicar o comportamento "estrelado" do gmail. Então, eu quero ter uma caixa de seleção que, quando marcada, é uma estrela preenchida. E quando desmarcada é uma estrela vazia. Preciso usar uma visualização de imagem e fazer minha própria lógica?
182
android:button
solução abaixo é muito melhor do que usar o atributo background!Crie um seletor de caixa de seleção extraível:
Verifique se a sua caixa de seleção é assim
android:button="@drawable/checkbox_selector"
fonte
Copie o btn_check.xml de android-sdk / platform / android - # / data / res / drawable para a pasta drawable do seu projeto e altere os estados da imagem 'on' e 'off' para as imagens personalizadas.
Então seu xml precisará apenas
android:button="@drawable/btn_check"
Se você quiser usar diferentes ícones padrão do Android, poderá usar
android:button="@android:drawable/..."
fonte
res / drawable / day_selector.xml
res / layout / my_layout.xml
fonte
Se você possui código-fonte aberto Android, pode encontrar a definição de estilos em:
src / frameworks / base / core / res / res / values
fonte
Tente -
Adicione este atributo -
Use like -
Ele irá corrigir todos os seus emblemas.
fonte
onSaveInstanceState()
eonRestoreInstanceState()
métodos, eu acho que o estado verificado seria perdido na rotaçãoOutra opção é usar um ToggleButton com plano de fundo nulo e um botão personalizado.
Abaixo um exemplo que também inclui um seletor para a cor do texto.
toggle_selector.xml
toggle_text.xml
fonte
Se você estiver usando adaptadores personalizados
android:focusable="false"
eandroid:focusableInTouchMode="false"
não tiver interesse em tornar os itens da lista clicáveis ao usar a caixa de seleção.Em drawable> checkbox_layout.xml
fonte
Se você usa androidx.appcompat: appcompat e deseja que um drawable personalizado (do tipo
selector
withandroid:state_checked
) funcione nas versões antigas da plataforma, além das novas, é necessário usarao invés de
fonte
Baseado nas respostas Enselic e Rahul.
Funciona para mim (antes e depois da API 21):
fonte