Eu estava apenas verificando as diretrizes de design e me perguntando sobre os botões sem borda. Eu arregalei os olhos e tentei encontrar a fonte, mas não consigo reuni-la sozinho. Este é o widget de botão normal, mas você adiciona um estilo personalizado (padrão do Android)? Como fazer esses botões sem borda (claro que você pode definir o fundo como vazio, mas eu não tenho o divisor)?
Aqui estão os links para as diretrizes de design:
android
layout
button
borderless
KarlKarlsom
fonte
fonte
Respostas:
Para limpar alguma confusão:
Isso é feito em 2 etapas: Definir o atributo de fundo do botão como android: attr / selectableItemBackground cria um botão com feedback, mas sem fundo.
A linha para dividir o botão sem borda do restante do layout é feita por uma visualização com o Android de fundo : attr / dividerVertical
Para uma melhor compreensão, aqui está um layout para uma combinação de botões OK / Cancelar sem borda na parte inferior da tela (como na imagem à direita acima).
fonte
?android:attr/selectableItemBackground
para?attr/selectableItemBackground
e?android:attr/dividerVertical
para?attr/dividerVertical
?android:attr/dividerVerticalfor
e?attr/dividerVertical
também funciona para absBasta adicionar o seguinte atributo de estilo em sua
Button
tag:fonte: http://developer.android.com/guide/topics/ui/controls/button.html#Borderless
Em seguida, você pode adicionar divisores como na resposta de Karl .
fonte
Resposta tardia, mas muitos pontos de vista. Como as APIs <11 ainda não morreram, para os interessados aqui está um truque.
Deixe seu container ter a cor desejada (pode ser transparente). Em seguida, dê aos seus botões um seletor com a cor transparente padrão e alguma cor quando pressionados. Dessa forma, você terá um botão transparente, mas mudará de cor quando pressionado (como o holo). Você também pode adicionar alguma animação (como holo). O seletor deve ser algo assim:
E o botão deveria ter
android:background="@drawable/selector_transparent_button"
PS: deixe seu container ter as divisórias (
android:divider='@android:drawable/...
para API <11)PS [Iniciantes]: você deve definir essas cores em values / colors.xml
fonte
API Level 10
eAPI Level > 10
!Para quem deseja botões sem borda, mas ainda animados quando clicados. Adicione isso no botão.
Se você quiser uma divisória / linha entre eles. Adicione isso no layout linear.
Resumo
fonte
Para estilo de material, adicione
style="@style/Widget.AppCompat.Button.Borderless"
ao usar a biblioteca AppCompat.fonte
Da fonte do aplicativo iosched, criei esta
ButtonBar
classe:Este será o local em
LinearLayout
que os botões "OK" e "Cancelar" serão colocados e tratará de colocá-los na ordem apropriada. Em seguida, coloque isso no layout em que deseja que os botões:Isso dá a você a aparência de um diálogo com botões sem bordas. Você pode encontrar esses atributos no res na estrutura.
buttonBarStyle
faz a divisória vertical e o preenchimento.buttonBarButtonStyle
está definido comoborderlessButtonStyle
para o tema Holo, mas acredito que esta seja a maneira mais robusta de exibi-lo como o framework deseja exibi-lo.fonte
Olhar para o tema atributos
buttonBarStyle
,buttonBarButtonStyle
eborderlessButtonStyle
.fonte
buttonBarButtonStyle
, recebo uma exceçãoE/AndroidRuntime(17134): Caused by: java.lang.reflect.InvocationTargetException E/AndroidRuntime(17134): Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x1/d=0x1030281 a=2 r=0x1030281}
Não tenho ideia do porquê, mas usando fazselectableItemBackground
maravilhas.Você também pode tornar os botões sem bordas por meio do código:
fonte
android.R.attr.selectableItemBackground
requer API 21. Alguma ideia de como fazer isso em versões anteriores?Para aqueles que desejam criar botão sem borda programaticamente para APIs> = 8
fonte
Outra solução que deve funcionar nas plataformas Android mais antigas e mais recentes é usar
atributo para a visualização do botão. Mas depois de adicionar o botão da linha acima não fornecerá feedback de toque.
Para fornecer feedback de toque, adicione o seguinte código à classe Activity
Está funcionando bem para mim.
fonte
case MotionEvent.ACTION_CANCEL:
abaixo docase MotionEvent.ACTION_UP:
também.Para quem ainda está procurando:
herde seu próprio estilo para as barras de botão Holo:
ou Holo Light:
e para botões Holo sem borda:
ou Holo Light:
fonte
É assim que você cria um botão sem borda (plano) programaticamente sem usar XML
fonte
ContextThemeWrapper myContext = new ContextThemeWrapper(this.getActivity(), R.style.Widget_AppCompat_Button_Borderless_Colored); Button myButton = new Button(myContext);
e não funcionava. Depois de adicionar o 2º e o 3º parâmetro, está funcionando!Use o código abaixo em seu arquivo xml. Use android: background = "# 00000000" para obter a cor transparente.
fonte
Você pode usar a Biblioteca de Suporte AppCompat para botão sem borda.
Você pode fazer um botão sem borda como este:
Você pode fazer um botão colorido sem borda como este:
fonte
Por algum motivo, nem
style="Widget.Holo.Button.Borderless"
nemandroid:background="?android:attr/selectableItemBackground"
funcionou para mim. Para ser mais preciso,Widget.Holo.Button.Borderless
funcionou no Android 4.0, mas não funcionou no Android 2.3.3. O que funcionou para mim em ambas as versões foiandroid:background="@drawable/transparent"
este XML em res / drawable / transparent.xml:Cabeça plana através da abordagem da parede.
fonte
android:background="?android:attr/dividerVertical"
truque interessante.Uma ótima apresentação de slides sobre como conseguir o efeito desejado do Google Nick Butcher (comece no slide 20). Ele usa o Android padrão
@attr
para estilizar o botão e o divisor.fonte
Adicionando à resposta principal, você também pode usar visualizações com uma cor de fundo cinza escuro em um Layout Linear como este.
Se a sua linha for horizontal, você deve definir a altura para 1 mergulho e a largura para corresponder ao pai e vice-versa se a linha for vertical.
fonte
Se você deseja obter o mesmo programaticamente:
(isso é C #, mas facilmente transacionável para Java)
Combine
fonte
Tente este código, para remover o drawable de fundo (@ drawable / bg) programaticamente, apenas precisamos fornecer null como parâmetro.
fonte