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
- Cómo utilizar android: Theme.Material (tema material) en styles.xml android?
- Efecto de ondulación en la barra de herramientas cortada
- La propiedad de elevación no funciona android
- Cómo implementar la transición de navegación de "padre a hijo" según lo prescrito por Material Design
- Efecto de ondulación en los elementos desplegables de Spinner de fondo de color (appcompat-v7 V21)
<?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.
Luego, después de pegar:
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.
- ¿Cómo usar el diseño de material ProgressBar en los dispositivos pre Lollipop?
- Diseño de material que no diseña diálogos de alerta
- ¿Cómo puedo cambiar el tamaño de texto del elemento NavigationView?
- ¿Hay una biblioteca de diseño / overlay / showcase de Android Material Design onboarding / tutorial?
- Compatibilidad con el diseño del material
- Uso de Theme.Material.Light.DarkActionBar con Theme.AppCompat.Light.DarkActionBar bloquea la aplicación en android L (api v21)
- ¿Cómo iniciar la transición de elementos compartidos usando Fragmentos?
- Establecer el logotipo de la barra de herramientas en XML
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 , hace que el none
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.