EditTextselect锚缺less

我刚刚注意到,我的应用程序中的所有EditText字段都没有正确显示select锚点。 例如:

没有选择锚点的图像

但是,我期望的是正确的锚点出现,如:

图像与选择锚点

在我的应用程序中受影响的EditText典型示例:

 <EditText android:id="@+id/text_message" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toLeftOf="@id/button_send" android:layout_marginLeft="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:inputType="text|textShortMessage" android:layout_marginRight="4dp" android:hint="@string/hint_chat_send" /> 

另外请注意,“粘贴”hover视图在我的应用程序中有一个奇怪的白色边框,但在其他应用程序是完全透明的。

我怀疑某种主题问题,因为它会影响我的应用程序中的多个屏幕,但我无法find哪些属性可能会导致此问题的信息。

UPDATE

所以,我花了几个小时来debuggingEditTextTextViewEditor框架类没有用。 一切似乎都按预期运作。

我使用以下布局在同一个应用程序中创build了一个新的空白Activity

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin"> <EditText android:layout_width="300dp" android:layout_height="wrap_content" android:hint="test" /> </RelativeLayout> 

在我的其他屏幕上,我正在使用AppCompat库和它的相关主题,但是在这个Activity我将主题和Activityreplace为内置Material主题的股票Android Activity

 public class TestActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { setTheme(android.R.style.Theme_Material_Light_NoActionBar); super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); } ... 

这是我的理解调用setTheme以这种方式应该重写从我的应用styles.xml任何可能的定制。 不过,我看到这个:

标记不在模拟器上显示

在这里还是有点茫然…

Solutions Collecting From Web of "EditTextselect锚缺less"

解决的办法是删除我在我的主题中设置的android:popupBackground

 <!-- This will break the text selection popup --> <item name="android:popupBackground">@color/not_quite_white</item> 

我有这套设置尝试和主题的所有Spinner下拉背景到相同的颜色。 无论出于何种原因,它会干扰文本selectpopup窗口。 此外,调用Activity.setTheme显然没有覆盖这个属性,导致一些混淆。

负责绘制句柄的类是位于Editor类中的SelectionModifierCursorController。 为了不显示游标(左右select游标),必须在实例上调用hide。 这例如在视图的触摸模式改变时完成。

http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/widget/Editor.java#3976

或者如果TextViews(EditTexts基本上是文本视图)textCanBeSelected返回false: http : //androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/widget/Editor.java#479

还有其他一些情况,但是我们从这里开始调查。

为了确保触摸模式没有任何问题,您可以在一个EditText上调用isInTouchMode,而在一个EditText上调用它。

为了确保textCanBeSelected是正确的,你可以在一个EditText上调用它的方法,在那里它不工作。

如果一切顺利,我们将不得不继续挖掘;)