2012-03-14 25 views
20

Odio ser la tercera persona en preguntar esto, pero el anterior twoaskings no pareció responderlo por completo. Las pautas de diseño de Android detallan borderless buttons, pero no cómo hacerlas. En una de las respuestas anteriores, hubo una sugerencia de usar:Botones sin bordes de Android

style="@android:style/Widget.Holo.Button.Borderless"

Esto funciona bien para un tema Holo, pero yo uso un montón de Holo.Light también y

style="@android:style/Widget.Holo.Light.Button.Borderless"

Parece que no existe. ¿Hay alguna manera de aplicar un estilo para esos botones sin márgenes en Holo.Light, o mejor aún, simplemente aplicar una etiqueta sin bordes sin especificar a qué tema pertenece, para que la aplicación pueda elegir el estilo adecuado en el tiempo de ejecución?

Holo.ButtonBar parece ajustarse a la factura de lo que estoy buscando, excepto que no proporciona ningún comentario del usuario que haya sido presionado.

Además, ¿hay algún lugar en la documentación que enumera los estilos que se pueden aplicar y una descripción de los mismos? No importa cuánto busque en Google y busque en los documentos, no puedo encontrar nada. Solo hay una lista no descriptiva si hago clic derecho y edito el estilo.

Cualquier ayuda sería apreciada.

Editar: Obtuve una respuesta perfecta de javram, y quería agregar algo de XML para cualquier persona interesada en agregar los bordes parciales que Google ha adoptado.

Fora divisor horizontal, esto funciona muy bien

<View 
    android:id="@+id/horizontal_divider_login" 
    android:layout_width="match_parent" 
    android:layout_height="1dp" 
    android:layout_marginLeft="8dp" 
    android:layout_marginRight="8dp" 
    android:background="@color/holo_blue" /> 

y esto por un eje vertical:

<View 
    android:id="@+id/vertical_divider" 
    android:layout_width="1dip" 
    android:layout_height="match_parent" 
    android:layout_marginBottom="8dp" 
    android:layout_marginTop="8dp" 
    android:background="@color/holo_blue" /> 

Respuesta

21

Comprobar mi respuesta here. En pocas palabras la solución correcta es utilizar la siguiente:

android:background="?android:attr/selectableItemBackground" 
+6

Cuando está usando Android 2.2, 2.3.x, no está funcionando :( – Xdg

+0

@Xdg funcionará si usa HolloEveywhere: https://github.com/Prototik/HoloEverywhere/ –

+5

Si está utilizando la biblioteca AppCompat, elimine el prefijo "android:" y funcionará: android: background = "? Attr/seleccionableItemBackground" –

8

Este código eliminará todos los antecedentes para un botón:

android:background="@android:color/transparent" 
+0

Eso parece como una respuesta que es mucho más sencilla de tomar 3 preguntas para contestar, pero no el truco exactamente. Además, para cualquier persona que vea esto más tarde y se pregunte, para obtener las semiplices que Google ha adoptado, agregué un código que funcionó para mí en la primera publicación, ya que publicar código en sub-respuestas es difícil de leer. –

+0

Recuerdo haber pensado lo mismo cuando estaba tratando de resolver esto. Lo estoy usando como un hipervínculo, que debería haber sido una tarea relativamente simple, o eso creía ... – javram

+0

esto requiere api 11 – gsscoder

38

Basta con añadir el atributo de estilo siguiente en su etiqueta Button:

style="?android:attr/borderlessButtonStyle" 

fuente: http://developer.android.com/guide/topics/ui/controls/button.html#Borderless

+4

Esta es una buena respuesta, pero tenga en cuenta que el atributo se agregó en API 11. –

+0

Y borderlessButtonStyle establece el fondo de seleccionableItemBackground y establece algo de relleno, nada más. – Anderson

1

Sólo en caso que nadie está buscando Solución liviana para obtener el botón sin bordes para las API que no admiten el tema Holo (como lo hice hace mucho tiempo), estoy publicando mi solución a continuación:

<View 
    android:layout_height="1dp" 
    android:layout_width="match_parent" 
    android:background="#505154" 
    android:layout_marginLeft="10dp" android:layout_marginRight="10dp"/> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 

    <Button 
     android:id="@+id/btn_Reply" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="1" 
     android:background="@android:color/transparent" 
     android:paddingBottom="15dp" android:paddingTop="15dp" 
     android:textColor="#5c5966" 
     android:text="@string/btnReplyText"/> 

    <View 
     android:layout_height="fill_parent" 
     android:layout_width="1dp" 
     android:background="#505154" 
     android:layout_marginBottom="7dp" android:layout_marginTop="7dp"/> 

    <Button 
     android:id="@+id/btn_Delete" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="1" 
     android:paddingBottom="15dp" android:paddingTop="15dp" 
     android:textColor="#5c5966" 
     android:background="@android:color/transparent" 
     android:text="@string/btnDeleteText" /> 

    <View 
     android:layout_height="fill_parent" 
     android:layout_width="1dp" 
     android:background="#505154" 
     android:text="@string/btnReplyText" 
     android:layout_marginBottom="7dp" android:layout_marginTop="7dp" /> 

    <Button 
     android:id="@+id/btn_Exit" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:layout_gravity="center" 
     android:text="@string/btnExitText" 
     android:paddingBottom="15dp" android:paddingTop="15dp" 
     android:textColor="#5c5966" 
     android:background="@android:color/transparent"/> 
</LinearLayout> 

Todo lo que tiene que hacer es cambiar los colores y el texto para adaptarlo a su propio fondo. ¡Todo lo mejor!

6

A riesgo de vencer a un caballo muerto, aquí hay otra opción (posiblemente mejor). AppCompat v7 define un estilo de botón sin bordes.Si ya está haciendo uso de la biblioteca AppCompat, sólo tiene que ir con eso:

<Button android:text="@string/borderlessButtonText" style="@style/Widget.AppCompat.Button.Borderless" />

Cuestiones relacionadas