具有正确重力和单线的提示和文本视图

cod*_*ber 8 android hint textview

我已经打开了一个错误,但我想知道是否有人遇到过这个问题,并且知道一个解决方法.如果你定义一个带有提示的文本视图,给它正确的重力(android:gravity ="right")然后如果你定义android:singleLine = true或android:maxLines ="1"或android:scrollHorizo​​natally ="true"你没有看到提示.移除正确的重力将提示返回到左侧,移除上面提到的所有树参数将提示放在右侧.我希望我的提示在右边,但我需要一条水平线......

这是不显示提示的示例布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="5dp">
            <EditText android:layout_width="fill_parent"
                android:layout_gravity="center_vertical|right"
                android:layout_height="wrap_content"
                android:layout_margin="6dp"
                android:textSize="16sp"
                android:paddingRight="5dp"
                android:id="@+id/c"
                android:gravity="right"
                android:hint="hello!!!"
                android:scrollHorizontally="true"
                android:maxLines="1"
                android:singleLine="true"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我检查了1.6和2.1模拟器,它再现100%,我是prettysure它是一个错误,我没有看到单行和提示之间的连接....更多的提示得到它自己的TextView布局(如果文本长度为0,则在onDraw中存在mLayout和mHintLayout,如果mHint不为null则使用mHintLayout).

dyl*_*phy 14

你试过android:ellipsize="start"吗?这对我来说非常有用,因为我想要我的暗示和EditText集中.


Ian*_*ton 5

看起来你对这个问题是完全正确的; 我尝试使用您的示例布局,并看到了同样的问题.我认为是你的bug报告.

最简单的解决方案是改变您的布局,但这可能不是您想要做的.我第一次尝试解决方法是尝试不在XML中设置这三个属性中的任何一个,然后在Java中设置它们.如果这不起作用......

一种选择是通过扩展EditText类并尝试修复自己设置提示的代码,或者通过覆盖onDraw方法来创建提示,或者通过简单地在EditText上重叠常规TextView来模仿提示,然后手动显示/隐藏.您甚至可以让视图检查它是否为空,如果是,则将文本设置为提示文本并更改颜色.当视图获得焦点时,检查其文本是否等于您的提示,如果是,则删除文本并更改颜色.

另一种可能的解决方法是更加"hacky",即省去导致问题的三个属性,但尝试手动阻止创建换行符.您需要为EditText创建一个OnKeyListener,如下所示:

editText.setOnKeyListener(new OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {
                // do nothing
                return true;
            }
            return false;
        }
    });
Run Code Online (Sandbox Code Playgroud)

您还需要调用editText.setImeOptions(EditorInfo.IME_ACTION_NEXT)以避免显示返回键.仍然可以通过粘贴到文本字段中或者使用其他方法在文本字段中创建换行符,因此您还需要在提交表单时解析并删除换行符以确保安全.就水平滚动而言,这也不太可能达到你想要的效果.