繁体   English   中英

EditText选择锚点丢失

[英]EditText Selection Anchors Missing

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

没有选择锚点的图像

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

带选择锚点的图像

我的应用中受影响的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" />

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

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

UPDATE

所以,我花 了几个 小时调试EditTextTextViewEditor框架类无济于事。 一切似乎都按预期运作。

我在同一个应用程序中使用以下布局创建了一个新的空白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我将主题和活动作为具有内置材质主题的股票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应该覆盖我的app styles.xml任何可能的自定义。 不过,我看到了这个:

标记未在模拟器上显示

这里有点不知所措......

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

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

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

负责绘制句柄的类是SelectionModifierCursorController,它位于Editor类中。 为了不显示游标(左右选择光标),必须在实例上调用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,它可以调用它吗?

要确保textCanBeSelected正确,您可以在一个EditText上调用该方法,而不调用它。

如果两者都很好,我们将不得不继续挖掘;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM