Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo eliminar correctamente el relleno (o margen?) Alrededor de los botones de Android?

Actualmente, tengo el siguiente botón de inicio de sesión inferior.

Cuando no se presiona el botón

Introduzca aquí la descripción de la imagen

Cuando se presiona el botón

Introduzca aquí la descripción de la imagen

El XML se ve así

<LinearLayout android:background="?attr/welcomeBottomNavBarBackground" android:orientation="horizontal" android:id="@+id/sign_in_bottom_nav_bar" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true"> <Button style="?android:attr/buttonBarButtonStyle" android:id="@+id/sign_in_button" android:layout_width="0dp" android:width="0dp" android:layout_weight="1.0" android:layout_height="48dp" android:gravity="center" android:layout_gravity="center" android:enabled="true" android:textAllCaps="true" android:text="@string/log_in" /> </LinearLayout> 

Quisiera quitar el relleno (¿O debería llamarlo margen? Por favor, consulte mi parte inferior más p / s sección) alrededor del botón cuando se está presionando.

¿Cómo puedo eliminar el relleno alrededor de los botones en Android?

Había intentado

 <Button ... ... android:minHeight="0dp" android:minWidth="0dp" /> 

No funciona y no tiene efecto.


Además, intento

 <Button ... ... android:background="@null" android:minHeight="0dp" android:minWidth="0dp" /> 

No más relleno cuando se presiona. Sin embargo, el material diseñado efecto visual presionado se fue demasiado.

¿Puedo saber cuál es la mejor manera de quitar el relleno del botón durante la prensado, pero conservar el material diseñado presionado efecto visual?

PD

Realmente no sé si debería llamarlo estocado o margen. Lo que deseo lograr es que, cuando presione la región inferior, el cambio de efecto visual de la prensa debería cubrir toda la región de la barra inferior del 100% ( @+id/sign_in_bottom_nav_bar ), en lugar de la región de barra inferior del 95% actual.

  • Configuración del proxy para la clase DownloadManager de android
  • Cambiar el tamaño de los diseños de forma programática (como animación) hasta "wrap_content"
  • Copiar directorio de Activos a directorio local
  • ActivityNotFoundException intentando cargar los contactos de ContentProvider?
  • ¿Cómo enviar datos de un dispositivo android a otro?
  • Intente capturar un token inesperado
  • Cómo agregar eventos de calendario al calendario predeterminado, en silencio sin intención, en android 4?
  • Android getActivity () no está definido
  • 10 Solutions collect form web for “¿Cómo eliminar correctamente el relleno (o margen?) Alrededor de los botones de Android?”

    Un botón estándar no se supone que se utiliza en todo el ancho, que es la razón por la que usted experimenta esto.

    Fondo

    Si echa un vistazo al Diseño de Material – Estilo de Botón verá que un botón tiene un área de clic de altura de 48dp, pero se mostrará como 36dp de altura para … alguna razón.

    Este es el contorno de fondo que ves, que no cubrirá todo el área del botón en sí.
    Tiene esquinas redondeadas y un poco de relleno y se supone que se puede hacer clic por sí mismo, envolver su contenido, y no abarcar todo el ancho en la parte inferior de la pantalla.

    Solución

    Como se mencionó anteriormente, lo que quieres es un fondo diferente. No un botón estándar, pero un fondo para un artículo seleccionable con este efecto agradable de la ondulación.

    Para este caso de uso hay el atributo de tema "selectableItemBackground" que puede utilizar para sus fondos (especialmente en las listas).
    Se agregará una ondulación estándar de la plataforma (o alguna lista de estado de color en <21) y utilizará los colores de los temas actuales.

    Para su usecase puede utilizar sólo lo siguiente:

     <Button android:id="@+id/sign_in_button" style="?android:attr/buttonBarButtonStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Login" android:background="?attr/selectableItemBackground" /> <!-- /\ that's all --> 

    También no hay necesidad de añadir pesos de diseño si su vista es la única y se extiende por toda la pantalla

    Si usted tiene alguna idea diferente sobre lo que su fondo debe verse como usted tiene que crear una costumbre drawable usted mismo, y manejar el color y el estado allí.

    Creo que la mejor solución para resolver que es crear su propio Ripple Effect . El relleno al presionar el botón está respetando el Ripple Effect de Ripple Effect predeterminado del componente.

     <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?attr/colorControlHighlight"> <item android:drawable="?attr/colorPrimary"/> </ripple> 

    O puede intentar cambiar el estilo de su botón a style="?android:textAppearanceSmall"

    Recuerde: este efecto sólo se muestra en Android Lollipop (API 21) o superior.

    En styles.xml

     <style name="MyButtonStyle" parent="Base.Widget.AppCompat.Button"> <item name="android:background">@drawable/selector</item> <item name="android:textColor">@android:color/black</item> </style> 

    En values/drawable :

    My_drawable.xml

     <?xml version="1.0" encoding="utf-8"?> <shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="2dp" /> <!-- specify your desired color here --> <solid android:color="#9e9b99" /> </shape> 

    Selector.xml

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

    En values/drawable-v21 :

    My_drawable.xml

     <?xml version="1.0" encoding="utf-8"?> <shape android:shape="rectangle" android:tint="?attr/colorButtonNormal" xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="2dp" /> <solid android:color="@android:color/white" /> </shape> 

    Selector.xml

     <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?attr/colorControlHighlight"> <item android:id="@android:id/mask" android:drawable="@drawable/my_drawable" /> </ripple> 

    En disposición:

     <Button android:id="@+id/button" style="@style/MyButtonStyle" android:layout_width="match_parent" android:layout_height="100dp" android:text="Test"/> 

    Resultado en API 19:

    Introduzca aquí la descripción de la imagen

    Resultado en API 21:

    Introduzca aquí la descripción de la imagen

    Código fuente

    He pasado por lo que estás pasando. Larga historia corta, usted apenas no puede hacerlo limpio con una etiqueta del <Button> solamente, mientras que asegura la compatibilidad hacia atrás.

    El método más simple y más practicado es usar un <RelativeLayout> , alrededor de un <Button> .

    Código del botón:

      <RelativeLayout android:id="@+id/myButtonUnderlay" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/colorPrimary" android:visibility="visible"> <Button android:id="@+id/myButton" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/selectableItemBackgroundBorderless" android:text="I am as cute as a Button"/> </RelativeLayout> 

    Dondequiera que necesite usar un botón, utilice este código completo.

    Aquí está el desglose:


    1. Los eventos OnClick se engancharán a myButton .
    2. Controle las dimensiones de su botón, cambiando los atributos de myButtonUnderlay .
    3. En myButton , android:background="?attr/selectableItemBackgroundBorderless" . Esto hará que sea un botón transparente con sólo el texto, y ondulaciones hacia atrás compatibles.
    4. En myButtonUnderlay , usted hará todas las otras aplicaciones de fondo, como establecer el color del botón, los márgenes, rellenos, bordes, degradados y sombras, etc.
    5. Si la manipulación de la visibilidad del botón (programática o no) es deseo, lo haces en myButtonUnderlay .

    Nota: Para garantizar la compatibilidad con versiones anteriores, asegúrese de

    android:background="?attr/selectableItemBackgroundBorderless" , y NO

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

    Te sugiero que eche un vistazo a esto por si acaso antes de todo.

    Entonces, si no funciona, te sugeriría que creas tu propio estilo (como azizbekian sugieren) usando drawables de xml de android, y estados dibujables para diferenciar presionado / no comprimido.

    Creo que usar su propio estilo puede ser la mejor respuesta, ya que además le dará más control sobre cómo se muestra su aplicación, pero el uso de temas y estilos predeterminados de Android también permite al usuario tener estilos personalizados que es una buena idea. Sin embargo, no puede probar todos los estilos personalizados para que no pueda comprobar que su aplicación se mostrará correctamente en TODOS los estilos personalizados y, por lo tanto, puede encontrar problemas con algunos.

    Establezca el fondo del Button como android:background="?selectableItemBackground"

     <LinearLayout android:background="?attr/welcomeBottomNavBarBackground" android:orientation="horizontal" android:id="@+id/sign_in_bottom_nav_bar" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true"> <Button style="?android:attr/buttonBarButtonStyle" android:background="?selectableItemBackground" android:id="@+id/sign_in_button" android:layout_width="0dp" android:width="0dp" android:layout_weight="1.0" android:layout_height="48dp" android:gravity="center" android:layout_gravity="center" android:enabled="true" android:textAllCaps="true" android:text="@string/log_in" /> </LinearLayout> 

    Como respuesta a @David Medenjak, puede leer el estilo de botón de diseño de Google en su sitio de desarrollador. Utilice el estilo del botón como @David Medenjak explicó en su respuesta. Usted puede también hacer por la manera siguiente también No es un acolchado o un margen pero es realmente efecto del fondo del botón. Si desea eliminarlo, puede hacer lo siguiente.

    Opción 1:

    Paso 1: Ponga el código a continuación en styles.xml

     <style name="myColoredButton"> <item name="android:textColor">#FF3E96</item> <item name="android:padding">0dp</item> <item name="android:minWidth">88dp</item> <item name="android:minHeight">36dp</item> <item name="android:elevation">1dp</item> <item name="android:translationZ">1dp</item> <item name="android:background">#FF0000</item> </style> 

    Paso 2: Cree un nuevo archivo XML en la carpeta drawables y agregue el siguiente código: Nombré mi archivo XML como button_prime.xml

     <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/colorPrimary"> <item> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="1dp" /> <solid android:color="#8B8386" /> </shape> </item> </ripple> 

    Paso 3: Utilice el estilo y dibujable en su botón como sigue.

     <Button style="@style/myColoredButton" android:layout_width="250dp" android:layout_height="50dp" android:text="Cancel" android:gravity="center" android:background="@drawable/button_prime" android:colorButtonNormal="#3578A9" /> 

    Opcion 2:

    Con la Biblioteca de Soporte v7, todos los estilos están realmente ya definidos y listos para usar, para los botones estándar, todos estos estilos están disponibles.Así que puede configurar su estilo de botón como este

     <Button style="@style/Widget.AppCompat.Button.Borderless" android:layout_width="match_parent" android:layout_height="50dp" android:text="BUTTON" android:gravity="center" android:minHeight="0dp" android:minWidth="0dp" android:background="@color/colorAccent"/> 

    Para más detalles sobre el estilo Button, por favor revise esta respuesta

    Creo que también revisará esta respuesta . Espero que usted consiga su solución.

    El relleno y el margen pueden ser el resultado de los recursos originales utilizados en el botón.

    Para intentar cambiar los recursos utilizados, utilice un selector:

     <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/btn_action_hover" /> <item android:state_selected="true" android:drawable="@drawable/btn_action_hover" /> <item android:state_focused="true" android:drawable="@drawable/btn_action_hover" /> <item android:drawable="@drawable/btn_action_normal" /> </selector> 

    Eso cambiaría las imágenes / formas por defecto para sus botones, así que usted podría intentar usar drawables y fijar cada artículo a un drawable. El dibujable es un bitmap o un archivo .xml (archivo de estilo) que define el aspecto del botón en su estado actual. Asumo que todavía hay algunos estilos nativos incluidos aunque usted ha fijado el botón-estilo usted mismo. Esto puede deberse a que no está utilizando un tema personalizado. Así que el problema también puede resolverse

     theme="@style/myNewTheme" 

    Donde myNewTheme es tu tema, y ​​debería tener cualquier padre ( parent="" no debería ser definido).

    Tome cualquier tema dado (diseñado por Google / Android, para una instancia Theme.AppCompat. [Nombre]), también viene con un buttonStyle. Esta es una parte de Theme.Holo.Light:

      <!-- Button styles --> <item name="buttonStyle">@style/Widget.Holo.Light.Button</item> <item name="buttonStyleSmall">@style/Widget.Holo.Light.Button.Small</item> <item name="buttonStyleInset">@style/Widget.Holo.Light.Button.Inset</item> <item name="buttonStyleToggle">@style/Widget.Holo.Light.Button.Toggle</item> <item name="switchStyle">@style/Widget.Holo.Light.CompoundButton.Switch</item> <item name="mediaRouteButtonStyle">@style/Widget.Holo.Light.MediaRouteButton</item> <item name="selectableItemBackground">@drawable/item_background_holo_light</item> <item name="selectableItemBackgroundBorderless">?attr/selectableItemBackground</item> <item name="borderlessButtonStyle">@style/Widget.Holo.Light.Button.Borderless</item> <item name="homeAsUpIndicator">@drawable/ic_ab_back_holo_light</item> 

    Como ve, este tema define cómo sus botones se verán / funcionarán en características básicas. Puede anular partes de la misma, pero no ha sobrepasado las partes importantes (siendo buttonStyle y similares). Por lo tanto, si crea un tema nuevo y lo diseña a su gusto y establece el tema (con theme = "themename") y ese tema no hereda ningún tema, debería ser capaz de diseñar sus botones a su gusto sin tener que preocuparse Acerca de los estilos predeterminados en el tema

    Básicamente:

    Llamar el relleno / margen = "0dp" no ayudará. El drawable predeterminado definido por el tema tiene esto en el botón drawable, lo que significa que no se puede cambiar. Así que tienes que cambiar el estilo del botón, o cambiar el tema completamente. Asegúrese de que el tema no tiene padres, ya que muchos temas definen el estilo del botón. No desea que el estilo de botón definido por el tema.

    1.add un archivo de recursos dibujable llamado quizá button_background.xml

     <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape> <solid android:color="#ff0000"/> <stroke android:width="5dp" android:color="#00ff00"/> </shape> </item> <item> <shape> <solid android:color="#00ff00"/> </shape> </item> </selector> 

    2.Use el button_background.xml como el fondo del botón, hecho!

    Github

    Blog

    Realmente no sé si debería llamarlo estocado o margen.

    El botón está realizando la elevación de la superficie para proporcionar retroalimentación visual en respuesta al tacto. Es uno de los dos retroalimentadores utilizados para la reacción superficial ; Siendo el primero el efecto de ondulación. Por ejemplo, un botón elevado tiene una elevación del estado de reposo de 2dp y una elevación del estado presionada de 8dp (vea el botón elevado bajo Sombras ). El botón se encuentra con el dedo cuando toca la superficie.

    ¿Puedo saber cuál es la mejor manera de quitar el relleno del botón durante la prensado, pero conservar el material diseñado presionado efecto visual?

    Después de haber respondido a la primera parte, no creo que esté teniendo todo el diseño del material si desea eliminar el efecto de elevación de la superficie.

    De todos modos, aquí está cómo quitar la regeneración visual de la elevación de la superficie:

    Agregue el archivo animador button_raise.xml al directorio animator bajo directorio res que tenga el código siguiente:

     <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true" android:state_pressed="true"> <objectAnimator android:duration="@android:integer/config_shortAnimTime" android:propertyName="translationZ" android:valueTo="0dp" android:valueType="floatType" /> </item> </selector> 

    Refiérase al animador recién creado en el botón usando la propiedad stateListAnimator :

     <Button ... android:stateListAnimator="@animator/button_raise" ... /> 

    Espero que esto ayude.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.