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

时间:2011-01-10 16:48:28

标签: android textview hint

我已经打开了一个错误,但我想知道是否有人遇到过这个问题而且知道一个解决方法。 如果你定义一个带有提示的文本视图,给它正确的重力(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>

我检查了1.6和2.1仿真器并且它再现了100%,我是prettysure它是一个错误,我没有看到单行和提示之间的联系....更多提示得到了它自己的布局TextView(mLayout和mHintLayout都存在,onDraw如果文本长度为0 mHintLayout,如果mHint不为null)。

7 个答案:

答案 0 :(得分:14)

你试过android:ellipsize="start"吗?当我希望我的提示和EditText居中时,这对我来说非常有用。

答案 1 :(得分:5)

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

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

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

另一种可能的“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;
        }
    });

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

答案 2 :(得分:2)

使用提示和单行的这些属性......你可以改变重力!

            android:gravity="right"
            android:ellipsize="start"
            android:imeOptions="actionNext"             
            android:singleLine="true"

答案 3 :(得分:1)

注意到对我来说已经足够好了。当我设置Gravity.right时,光标始终在右侧,不能放在单词的中间。

我尝试了一种不同的方法 - 当没有文字时(或者左边,如果它适合你)将重力设置为右侧,并且让用户在输入内容后决定最佳方向

这对我有用:

  1. 创建TextWatcher

    private static class FilterTextWatcher implements TextWatcher {
    
        private WeakReference<Activity> mActivity;
    
        public FilterTextWatcher(Activity activity) {
            mActivity = new WeakReference<Activity>(activity);
        }
    
        public void afterTextChanged(Editable s) {
        }
    
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }
    
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (mActivity.get() == null)
                return;
    
            EditText searchTxtBx = mActivity.get().mSearchTxtBx;
            if (searchTxtBx.getText().toString().length() == 0)
                searchTxtBx.setGravity(Gravity.RIGHT);
            else
                searchTxtBx.setGravity(0);
        }
    }
    
  2. 将其用作班级成员

    private TextWatcher mFilterTextWatcher = new FilterTextWatcher(this);
    
  3. <{1}}中的
  4. onCreate()
  5. <{1}}中的
  6. mSearchTxtBx.addTextChangedListener(mFilterTextWatcher);
    

答案 4 :(得分:0)

您如何看待我解决此问题的方法?

editText.setOnFocusChangeListener(new OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus == false && StringUtils.isNotBlank(editText.getText().toString())) {
                editText.setGravity(Gravity.RIGHT);
            }
        }
    });

以及相应的XML文件:

<EditText android:id="@+id/the_text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="number" android:hint="@string/edit_text_prompt"/>

对我来说很好:只有一行,没有可用的输入键,向我显示提示,当我在给出一些输入后离开字段时,文本显示为右对齐。

答案 5 :(得分:0)

当我添加时,它与我合作:

android:hint="the hint text ..."
android:singleLine="true"
android:ellipsize="start"

在我的活动中,我补充道:

myedittext.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;
    }
});

答案 6 :(得分:0)

当我的TextView atrs是:

时,我注意到了这个问题
android:singleLine="true"  
android:gravity="right"

当我尝试在textview上链接textview或setMovementMethod(LinkMovementMethod.getInstance())时,文本就消失了。

android:ellipsize="start" 

解决了我的问题,因为我在我的应用中使用了阿拉伯文字。