El botón del diseño del material de la prensa larga permite pegar en la etiqueta del botón

Fondo

Tengo un botón de diseño de material estándar, como se muestra a continuación

<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.AppCompatButton xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/medium_margin" android:layout_marginRight="@dimen/medium_margin" android:textStyle="bold" tools:text="I am a Button" style="@style/PrimaryColoredButton" /> 

El estilo aplicado a ella es como sigue

 <style name="PrimaryColoredButton" parent="Widget.AppCompat.Button.Colored"> <item name="android:textColor">@color/white</item> <item name="android:capitalize">sentences</item> <item name="android:background">@drawable/primary_button_background</item> </style> 

El problema

Cuando se presiona el botón, el botón de pegar del sistema aparece y permite al usuario pegar contenido en la etiqueta del botón.

Botón Material que muestra la opción Pegar

Luego, después de pegar:

Introduzca aquí la descripción de la imagen

No puedo ver una manera de detener esto desde una perspectiva XML, pero parece que esto no debería ser posible en absoluto.

Curiosamente sólo ocurre cuando la prensa larga no está en el texto, sino en el propio fondo.

Que el comportamiento no es exclusivo de AppCompatButton s, parece. Se deriva del hecho de que Button es una subclase de TextView , y lo que realmente desencadena ese comportamiento en su caso es el atributo capitalize en su estilo personalizado. Cuando se establece en nada distinto de none , hace que el Editor interno de TextView se active y responda a los clics largos.

De hecho, parece que cualquier configuración de atributo que haga que el Button tenga un tipo de entrada distinto del predeterminado causará esto. Estos atributos incluyen – pero no se limitan a – capitalize , digits , autoText y, obviamente, cualquier tipo de inputType que none sea none . El atributo textIsSelectable causará un pequeño estrago, también, en que el Button actuará como un EditText editable. Aparecerán los cursores y el selector, junto con el CAB de edición cuando corresponda, pero sin método de entrada, y el Button no podrá hacer clic.

Éstos no son claramente atributos que usted estaría fijando normalmente en un Button , pero éste definitivamente parece como un insecto a mí, puesto que el Button probablemente no debe, de ninguna manera, dejarse hacer editable. De hecho, en algunos estados, pegar texto, el cambio de enfoque o el clic hace que el Editor bloquee. Si se trata de un comportamiento no intencionado (el pegado, no el bloqueo), se ha implementado incorrectamente durante algún tiempo, por lo que puedo decir.

Para remediar esto, debe quitar el atributo capitalize de su estilo, y sólo manejar que usted mismo cuando se establece el texto en el Button . Por otra parte, si no necesita responder a los clics largos en sus Button s, puede configurar el atributo longClickable en su estilo como false .

Desafortunadamente, simplemente establecer el atributo editable (desaprobado) a false no parece ser una corrección, si se combina con cualquiera de los otros atributos problemáticos antes mencionados.

  • Barra de acción plana con Theme.Material
  • ¿Cómo imitar el estilo de diseño de material levantado estilo de botón, incluso para pre-Lollipop (menos los efectos especiales)?
  • Uso correcto de un Spinner, siguiendo las directrices de diseño del material
  • ¿Existen APIs / Samples / Tutorials oficiales para implementar las nuevas directrices de Material-Diseño?
  • Android: establecer la elevación para el elemento anterior (sombra con dirección hacia arriba)
  • Split Action Bar con AppCompat v7 usando Material Design?
  • Barra de herramientas y NavigationDrawer
  • ¿Cómo agregar valor de notificación para el elemento en NavigationView para el cajón de diseño de material?
  • Android scrolllist alfabético rápido en RecyclerView con la barra de herramientas Collapsing
  • Cómo deslizar las pestañas de la barra de herramientas mediante el diseño del material
  • Botón de diseño del material
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.