在第一行中错误地绘制了EditText自定义光标

时间:2014-06-10 16:31:03

标签: android android-edittext

我的主布局中有一个EditText。我还有一个应用主题,其中默认的edittext使用自定义curdordrawable进行样式设置。

<EditText
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:id="@+id/introEditText"
     android:gravity="top"
     android:singleLine="false"
     android:text=""
     android:inputType="textMultiLine"
     android:textSize="24sp" >
       <requestFocus/>
</EditText>

<style name="AppTheme" parent="android:Theme.Holo.NoActionBar">
    <item name="android:textColor">#ffffff</item>
    ...
    <item name="android:editTextStyle">@style/EditTextStyle</item>
</style>


<style name="EditTextStyle" parent="@android:style/Widget.EditText">
    <item name="android:background">@android:color/transparent</item>
    <item name="android:textCursorDrawable">@drawable/cursor</item>
</style>

我的自定义光标是:

<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <size android:width="2dp" />
    <solid android:color="#363636"  />
</shape>

光标颜色正确,但宽度不是。在第一行,它是1 px宽而不是2dp。文本分成两行后,光标变为2dp宽。此外,当edittext没有文本时,它不会显示。我在4.4(HTC One和Nexus 7)上测试了这个 这是Android的错误吗?

2 个答案:

答案 0 :(得分:4)

实际上随着EditText的宽度增加,光标的大小被设置为被某个空格掩盖(无法弄清楚它是什么)。因此解决方案是修复EditText宽度。

<EditText
 android:layout_width="wrap_content"
 android:layout_height="match_parent"
 android:id="@+id/introEditText"
 android:gravity="top"
 android:singleLine="false"
 android:text=""
 android:inputType="textMultiLine"
 android:textSize="24" />

如果您想要精确的宽度,请使用如下的ems:

<EditText android:ems="10" ...
/>
  

android:ems设置TextView的宽度以适合n&#39; M&#39;的文本。字母大小为12sp时的字母

我认为没有办法解决这个问题。

答案 1 :(得分:1)

这在模拟器中对我有用。像你一样在drawable中创建一个xml文件:

edit_text_cursor.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <size android:width="2dip"/>
    <solid android:color="#00AAEE"/>
</shape> 

然后在你的布局中创建它:

<EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:singleLine="false"
        android:textCursorDrawable="@drawable/edit_text_cursor"
        android:ems="10"
        android:inputType="textMultiLine" />

这会修复第一个像素光标。(我测试过它):

android:ems="10"

这应该足够了,但是如果在空白时显示光标有问题。您可以将其添加到EditText以强制它:

 android:cursorVisible="true"