8

我已经打开了一个错误,但我想知道是否有人遇到过这个问题并且知道解决方法。如果你定义一个带有提示的文本视图,给它正确的重力 (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%,我很确定这是一个错误,我没有看到单行和提示之间的联系....更重要的是,提示在 TextView 中有自己的布局( mLayout 和 mHintLayout 都存在,在 onDraw 如果文本长度为 0 mHintLayout 如果 mHint 不为 null 则使用)。

4

7 回答 7

14

你试过了android:ellipsize="start"吗?过去,当我想要我的提示并EditText集中注意力时,这对我很有用。

于 2011-05-10T23:40:42.093 回答
5

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

最简单的解决方案是更改布局,但这可能不是您想要做的。我的第一次尝试是尝试不在 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;
        }
    });

您还需要调用editText.setImeOptions(EditorInfo.IME_ACTION_NEXT)以避免显示返回键。仍然可以通过粘贴或其他方法在文本字段中创建换行符,因此为了安全起见,您还希望在提交表单时解析和删除换行符。就水平滚动而言,这也不太可能满足您的要求。

于 2011-01-11T02:20:38.750 回答
2

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

            android:gravity="right"
            android:ellipsize="start"
            android:imeOptions="actionNext"             
            android:singleLine="true"
于 2011-09-26T06:09:43.987 回答
1

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

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

这对我有用:

  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. onCreate()

    mSearchTxtBx.addTextChangedListener(mFilterTextWatcher);
    
  4. onDestroy()

    mSearchTxtBx.removeTextChangedListener(mFilterTextWatcher);
    mFilterTextWatcher = null;
    
于 2013-02-04T15:33:04.663 回答
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"/>

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

于 2011-02-08T15:56:11.160 回答
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;
    }
});
于 2012-09-13T12:43:11.180 回答
0

当我的 TextView atrs 是:

android:singleLine="true"  
android:gravity="right"

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

android:ellipsize="start" 

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

于 2014-03-11T13:22:50.937 回答