theme style studio icon example color buttons android layout button borderless

android - style - ¿Cómo crear botones estándar sin bordes(como en la guía de diseño mencionada)?



styles buttons android studio (18)

Agregando a la respuesta superior también puede usar vistas con un color de fondo gris oscuro en un diseño lineal como ese.

<View android:layout_width="match_parent" android:layout_height="1dip" android:layout_marginBottom="4dip" android:layout_marginLeft="4dip" android:layout_marginRight="4dip" android:layout_marginTop="4dip" android:background="@android:color/darker_gray"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="4dip" android:orientation="horizontal" android:weightSum="1"> <Button android:id="@+id/button_decline" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_weight="0.50" android:background="?android:attr/selectableItemBackground" android:padding="10dip" android:text="@string/decline"/> <View android:layout_width="1dip" android:layout_height="match_parent" android:layout_marginLeft="4dip" android:layout_marginRight="4dip" android:background="@android:color/darker_gray"/> <Button android:id="@+id/button_accept" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="10dp" android:layout_weight="0.50" android:background="?android:attr/selectableItemBackground" android:padding="10dip" android:text="@string/accept"/> </LinearLayout>

Si su línea es horizontal, querrá establecer la altura en 1 punto y el ancho para que coincida con el elemento primario y viceversa si la línea es vertical.

Estaba comprobando las pautas de diseño y preguntándome sobre los botones sin bordes. Eché un vistazo y traté de encontrarlo en la fuente, pero no puedo reunirlo solo. ¿Es este el widget de Botón normal pero agrega un estilo personalizado (predeterminado de Android)? ¿Cómo hacer estos botones sin bordes (por supuesto, puedes configurar el fondo para que esté vacío, pero no tengo el divisor)?

Aquí enlaces a las pautas de diseño:


Así es como se crea un botón sin bordes (plano) mediante programación sin usar XML

ContextThemeWrapper myContext = new ContextThemeWrapper(this.getActivity(), R.style.Widget_AppCompat_Button_Borderless_Colored); Button myButton = new Button(myContext, null, R.style.Widget_AppCompat_Button_Borderless_Colored);


Desde la fuente de la aplicación iosched , surgió esta clase ButtonBar :

/** * An extremely simple {@link LinearLayout} descendant that simply reverses the * order of its child views on Android 4.0+. The reason for this is that on * Android 4.0+, negative buttons should be shown to the left of positive buttons. */ public class ButtonBar extends LinearLayout { public ButtonBar(Context context) { super(context); } public ButtonBar(Context context, AttributeSet attributes) { super(context, attributes); } public ButtonBar(Context context, AttributeSet attributes, int def_style) { super(context, attributes, def_style); } @Override public View getChildAt(int index) { if (_has_ics) // Flip the buttons so that "OK | Cancel" becomes "Cancel | OK" on ICS return super.getChildAt(getChildCount() - 1 - index); return super.getChildAt(index); } private final static boolean _has_ics = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH; }

Este será el LinearLayout que LinearLayout los LinearLayout "Aceptar" y "Cancelar", y se encargará de ponerlos en el orden apropiado. Luego, coloque esto en el diseño en el que desea que estén los botones:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="?android:attr/dividerHorizontal" android:orientation="vertical" android:showDividers="middle"> <!--- A view, this approach only works with a single view here --> <your.package.ButtonBar style="?android:attr/buttonBarStyle" android:id="@+id/buttons" android:layout_width="match_parent" android:layout_height="wrap_content" android:weightSum="1.0"> <Button style="?android:attr/buttonBarButtonStyle" android:id="@+id/ok_button" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.5" android:text="@string/ok_button" /> <Button style="?android:attr/buttonBarButtonStyle" android:id="@+id/cancel_button" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.5" android:text="@string/cancel_button" /> </your.package.ButtonBar> </LinearLayout>

Esto le da la apariencia del diálogo con botones sin bordes. Puede encontrar estos atributos en res en el marco. buttonBarStyle hace el divisor vertical y el relleno. buttonBarButtonStyle se establece como buttonBarButtonStyle para el tema Holo, pero creo que esta debería ser la forma más robusta de mostrarlo, ya que el framework desea mostrarlo.


Mire en los atributos del tema buttonBarStyle , buttonBarButtonStyle , y buttonBarButtonStyle .


Otra solución que debería funcionar tanto en la plataforma android más vieja y más nueva es usar

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

atributo para la vista de botones. Pero después de agregar el botón de la línea anterior no proporcionará comentarios táctiles.

Para proporcionar comentarios táctiles, agregue el siguiente código a la clase de Actividad

button.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: ((Button)view).setBackgroundColor(Color.LTGRAY); break; case MotionEvent.ACTION_UP: ((Button)view).setBackgroundColor(Color.TRANSPARENT); } return false; } });

esta trabajando bien para mi.


Para aquellos que quieren crear botones sin bordes programáticamente para API> = 8

ImageButton smsImgBtn = new ImageButton(this); //Sets a drawable as the content of this button smsImgBtn.setImageResource(R.drawable.message_icon); //Set to 0 to remove the background or for bordeless button smsImgBtn.setBackgroundResource(0);


Para cualquiera que todavía esté buscando:

hereda tu propio estilo para las barras de botones Holo:

<style name="yourStyle" parent="@android:style/Holo.ButtonBar"> ... </style>

o Holo Light:

<style name="yourStyle" parent="@android:style/Holo.Light.ButtonBar"> ... </style>

y para botones Holo sin bordes:

<style name="yourStyle" parent="@android:style/Widget.Holo.Button.Borderless.Small"> ... </style>

o Holo Light:

<style name="yourStyle" parent="@android:style/Widget.Holo.Light.Button.Borderless.Small"> ... </style>


Para despejar la confusión:

Esto se hace en 2 pasos: configurar el atributo de fondo del botón en android: attr / seleccionableItemBackground crea un botón con comentarios pero sin fondo.

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

La línea para dividir el botón sin bordes del resto de su diseño se realiza mediante una vista con el fondo android: attr / dividerVertical

android:background="?android:attr/dividerVertical"

Para una mejor comprensión aquí hay un diseño para una combinación de botones OK / CANCELAR sin márgenes en la parte inferior de la pantalla (como en la imagen de la derecha de arriba).

<RelativeLayout android:layout_width="match_parent" android:layout_height="48dp" android:layout_alignParentBottom="true"> <View android:layout_width="match_parent" android:layout_height="1dip" android:layout_marginLeft="4dip" android:layout_marginRight="4dip" android:background="?android:attr/dividerVertical" android:layout_alignParentTop="true"/> <View android:id="@+id/ViewColorPickerHelper" android:layout_width="1dip" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentBottom="true" android:layout_marginBottom="4dip" android:layout_marginTop="4dip" android:background="?android:attr/dividerVertical" android:layout_centerHorizontal="true"/> <Button android:id="@+id/BtnColorPickerCancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_toLeftOf="@id/ViewColorPickerHelper" android:background="?android:attr/selectableItemBackground" android:text="@android:string/cancel" android:layout_alignParentBottom="true"/> <Button android:id="@+id/BtnColorPickerOk" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:background="?android:attr/selectableItemBackground" android:text="@android:string/ok" android:layout_alignParentBottom="true" android:layout_toRightOf="@id/ViewColorPickerHelper"/> </RelativeLayout>


Para el que quiere botones sin bordes pero aún animado cuando hace clic. Agregue esto en el botón.

style="?android:attr/borderlessButtonStyle"

Si quería un divisor / línea entre ellos. Agregue esto en el diseño lineal.

style="?android:buttonBarStyle"

Resumen

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" style="?android:buttonBarStyle"> <Button android:id="@+id/add" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/add_dialog" style="?android:attr/borderlessButtonStyle" /> <Button android:id="@+id/cancel" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/cancel_dialog" style="?android:attr/borderlessButtonStyle" /> </LinearLayout>


Para estilo de material, agregue style="@style/Widget.AppCompat.Button.Borderless" cuando use la biblioteca de AppCompat.


Por alguna razón, ni style="Widget.Holo.Button.Borderless" ni android:background="?android:attr/selectableItemBackground" funcionó para mí. Para ser más preciso, Widget.Holo.Button.Borderless hizo el trabajo en Android 4.0 pero no funcionó en Android 2.3.3. Lo que hizo el truco para mí en ambas versiones fue android:background="@drawable/transparent" y este XML en res / drawable / transparent.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > </shape>

Plain cabeza a través del enfoque de la pared.


Puede usar la Biblioteca de soporte de AppCompat para el botón sin bordes.

Puedes hacer un botón sin bordes como este:

<Button style="@style/Widget.AppCompat.Button.Borderless" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="16dp" android:text="@string/borderless_button"/>

Puede hacer que el Botón de color sin bordes sea así:

<Button style="@style/Widget.AppCompat.Button.Borderless.Colored" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="16dp" android:text="@string/borderless_colored_button"/>


Respuesta tardía, pero muchas vistas. Como las API <11 aún no están muertas, para los interesados ​​aquí hay un truco.

Deje que su contenedor tenga el color deseado (puede ser transparente). Luego, dele a sus botones un selector con color transparente predeterminado y un poco de color cuando lo presione. De esta forma, tendrá un botón transparente, pero cambiará de color cuando se presione (como holo). También puede agregar algunas animaciones (como holo). El selector debería ser algo como esto:

res/drawable/selector_transparent_button.xml <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_shortAnimTime"> <item android:state_pressed="true" android:drawable="@color/blue" /> <item android:drawable="@color/transparent" /> </selector>

Y el botón debería tener android:background="@drawable/selector_transparent_button"

PD: deja que tu contenedor tenga los divisores ( android:divider=''@android:drawable/... para API <11)

PS [Newbies]: debe definir esos colores en values ​​/ colors.xml


Si quieres lograr lo mismo programáticamente:

(esto es C # pero fácilmente transatable a Java)

Button button = new Button(new ContextThemeWrapper(Context, Resource.Style.Widget_AppCompat_Button_Borderless_Colored), null, Resource.Style.Widget_AppCompat_Button_Borderless_Colored);

Partido

<Button style="@style/Widget.AppCompat.Button.Borderless.Colored" .../>



También puede hacer botones sin bordes a través del código:

TypedValue value= new TypedValue(); getApplicationContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground, value, true); myButton.setBackgroundResource(value.resourceId);



Use el siguiente código en su archivo xml. Use android: background = "# 00000000" para tener el color transparente.

<Button android:id="@+id/btnLocation" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#00000000" android:text="@string/menu_location" android:paddingRight="7dp" />