背景
我有一个标准的Material Design按钮,如下所示
<?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" />
应用于它的样式如下
<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>
问题
长按按钮时,会出现系统粘贴按钮,允许用户将内容粘贴到按钮的标签中。
然后粘贴后:
我无法从XML的角度看待这种方法,但感觉这根本不可能。
有趣的是,只有当长篇文章不在文本上而在背景本身时才会发生。
答案 0 :(得分:2)
似乎这种行为并非AppCompatButton
所独有。它源于Button
是TextView
的子类的事实,并且在您的情况下实际触发该行为的是您的自定义样式中的capitalize
属性。如果将设置为以外的任何内容,则会导致none
TextView
的内部Editor
变为活动状态并响应长按。
事实上,似乎任何导致Button
具有非默认输入类型的属性设置都会导致此问题。这些属性包括 - 但不限于 - capitalize
,digits
,autoText
,以及显而易见的除inputType
以外的任何none
。 textIsSelectable
属性也会造成一点点破坏,因为Button
会像不可编辑的EditText
那样行事。将显示光标和选择句柄,以及适当的编辑CAB,但没有输入方法,Button
变为不可点击。
这些显然不是你通常在Button
上设置的属性,但这对我来说肯定是个错误,因为Button
可能不应该以任何方式允许自己变得可编辑。实际上,在某些州,粘贴文本,然后转移焦点或点击会导致Editor
崩溃。如果这是非预期的行为(粘贴,而不是崩溃),据我所知,它已被错误地实施了一段时间。
要解决此问题,您应该从您的样式中删除capitalize
属性,并在Button
上设置文本时自行处理。或者,如果您不需要回复Button
的长按,则可以将样式中的longClickable
属性设置为false
。
不幸的是,如果将(已弃用的)editable
属性设置为false
,如果与任何其他上述有问题的属性结合使用,似乎不是一个修复程序。