ImageView 上的透明背景 EditText 不会显示光标

Posted

技术标签:

【中文标题】ImageView 上的透明背景 EditText 不会显示光标【英文标题】:Transparent background EditText over ImageView won't display cursor 【发布时间】:2012-10-26 00:21:07 【问题描述】:

所以,我希望用户能够在我设置为图像视图的图像上键入内容。图像已设置并且可以正常工作。当用户单击图像时,编辑文本框会显示在他们单击的位置。但是编辑文本的白色背景会阻止背景中的图像。所以,我将编辑文本背景设置为透明:

    editTextOne.setBackgroundColor(Color.TRANSPARENT);

这适用于使编辑文本背景透明。但是,现在光标也不会显示,除非开始键入。

那么,我要问的是,是否有任何方法可以使 EditText 背景透明但仍显示光标并闪烁?任何帮助将不胜感激,谢谢!

代码:

    public boolean onTouch(View view, MotionEvent event)
            if (type == true)
                touchX = (int) event.getX();
                touchY = (int) event.getY();
                RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) editTextOne.getLayoutParams();
                params.leftMargin = touchX;
                params.topMargin = touchY;
                params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
                params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
                editTextOne.setLayoutParams(params);
                editTextOne.setVisibility(View.VISIBLE);
                editTextOne.bringToFront();
                editTextOne.setBackgroundColor(Color.TRANSPARENT);
                editTextOne.requestFocus();
                editTextOne.setCursorVisible(true);
            //end of if statement
            return true;
        //end of onTouch

XML:

  <?xml version="1.0" encoding="utf-8"?>
  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="vertical"
    android:id="@+id/relative" >

<Button
    android:layout_
    android:layout_
    android:layout_toLeftOf="@+id/load"
    android:layout_alignParentBottom="true"
    android:layout_margin="10dp"
    android:text="C"
    android:textStyle="bold"
    android:textSize="20dp"
    android:id="@+id/camera"
    android:onClick="camera"/>

<Button
    android:layout_
    android:layout_
    android:layout_toLeftOf="@+id/view"
    android:layout_alignParentBottom="true"
    android:layout_margin="10dp"
    android:id="@+id/load"
    android:text="L"
    android:textStyle="bold"
    android:textSize="20dp"
    android:onClick="load"/>

<Button
    android:layout_
    android:layout_
    android:layout_alignParentRight="true"
    android:layout_alignParentBottom="true"
    android:layout_margin="10dp"
    android:text="v"
    android:id="@+id/view"
    android:textStyle="bold"
    android:textSize="20dp"
    android:onClick="view"/>

<Button 
    android:layout_
    android:layout_
    android:layout_toLeftOf="@+id/camera"
    android:layout_alignParentBottom="true"
    android:layout_margin="10dp"
    android:text="T"
    android:textStyle="bold"
    android:textSize="20dp"
    android:id="@+id/text"
    android:onClick="text"/>

<TextView 
    android:layout_
    android:layout_
    android:background="@null"
    android:visibility="invisible"
    android:id="@+id/textone"/>

<EditText
    android:layout_
    android:layout_
    android:visibility="invisible"
    android:inputType="textAutoCorrect"
    android:singleLine="true"
    android:id="@+id/edittextone"/>

<ImageView
    android:layout_
    android:layout_
    android:layout_centerInParent="true"
    android:id="@+id/picture"/>

</RelativeLayout>  

编辑:我不确定为什么光标不会立即显示,但我发现一旦按下空格键就可以看到光标。所以,为了解决我的问题,我使用了:

     editTextOne.setText(" ");

这会放置一个空格作为初始文本,因此会显示光标。我希望这可以帮助其他遇到类似问题的人。

【问题讨论】:

除了 settext(" ") 你有没有找到其他解决方案。我遇到了同样的问题,它可能对我有帮助 【参考方案1】:

您可以在 xml 文件中更改 editext 属性 android:background="@null",而不是在代码文件中设置,它对我有用。我希望它对你有用。

【讨论】:

【参考方案2】:

首先我想确定你想改变你的光标颜色。是吗 ?

为此:

更改您的最低 api(如果 api

设置为 android api 3.2 或更高版本。

您将在 EditText 中获得属性,设置为 android:textCursorDrawable="@null"

更改您的 text:color 也会将光标的颜色设置为 文字颜色。

这将仅在您的最低 api 级别为 3.2 时才对您有所帮助。

【讨论】:

不,不幸的是,我的问题与光标颜色无关。无论背景是什么颜色,光标都不会显示。【参考方案3】:

您是否尝试过手动将焦点设置到文本视图?显示视图后,您可以尝试调用requestFocus()?

另外,您可以尝试通过setCursorVisible 方法将光标显式设置为可见。

【讨论】:

我尝试像这样使用 requestFocus():editTextOne.requestFocus(),但是,仍然没有运气。另外,我意识到我的描述有误,即使我输入了光标仍然不会显示的字母。 另外,我尝试过使用 editTextOne.setCursorVisible(true);就像你说的。由于某种原因仍然没有运气。还有其他建议吗? 抱歉,我没说清楚 - 即使光标本身被隐藏,您的文字是否会在您键入时显示? 嗯,我知道膨胀布局可以清除其属性,但据我所知,参数不能。您能否再次尝试在运行时设置 singleLine 和 touchInput 以防万一?您是否也可以尝试为布局提供固定宽度而不是换行,当您在其中键入时,视图是否会立即调整大小? 我设法解决了我的问题。由于某种原因,光标仅在按下空格键后才显示。因此,我使用 setText(" ") 最初将文本设置为空格。这会立即显示光标。不过,感谢您的所有帮助,我很感激!

以上是关于ImageView 上的透明背景 EditText 不会显示光标的主要内容,如果未能解决你的问题,请参考以下文章

editText 背景设置但在应用程序启动时不显示

以编程方式将 EditText 的背景资源设置为透明字段

UITableViewCell 透明背景(包括imageView/accessoryView)

Android用代码动态创建TextView,EditText,ImageView工具类

透明的 EditText Android Studio

android 在 Imageview 加入 Textview 、Edittext 能实现吗?