8

私はバグをオープンしましたが、誰かがこの問題に遭遇し、回避策を知っているかどうか疑問に思っていました. 内部にヒントを含むテキスト ビューを定義する場合は、正しい重力 (android:gravity="right") を指定してから、android:singleLine=true または android:maxLines="1" または android:scrollHorizo​​natally="true" を定義する場合ヒントは表示されません。右の重力を削除すると、ヒントが左側に戻り、上記のすべてのツリー パラメータを削除すると、ヒントが右側に配置されます。右側にヒントが欲しいのですが、水平線が 1 本必要です...

ヒントを表示しないサンプル レイアウトを次に示します。

<?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% 再現されました。これはバグだと確信しています。1 行とヒントの間の接続がわかりません。 mLayout と mHintLayout の両方が存在し、テキストの長さが 0 の場合は onDraw にあり、mHint が null でない場合は mHintLayout が使用されます)。

4

7 に答える 7

14

試しましたandroid:ellipsize="start"か?これは、ヒントをEditText中央に表示したいときに、過去にうまく機能しました。

于 2011-05-10T23:40:42.093 に答える
5

問題は正確に正しいようです。サンプルレイアウトで遊んでみたところ、同じ問題が発生しました。これがあなたのバグレポートだと思います。

最も簡単な解決策は、レイアウトを変更することですが、それはおそらくあなたがやりたいことではありません。回避策として最初に試みたのは、これら3つの属性をXMLで設定せずに、Javaで設定することです。それがうまくいかない場合...

1つのオプションは、EditTextクラスを拡張してヒントをレイアウトするコードを自分で修正するか、onDrawメソッドをオーバーライドしてヒントを作成するか、通常のTextViewをEditTextの上に重ねることで、ヒントを模倣することです。 、次に手動で表示/非表示にします。ビューが空かどうかをチェックすることもできます。空の場合は、テキストをヒントテキストに設定し、色を変更します。ビューにフォーカスが移ったら、そのテキストがヒントと等しいかどうかを確認し、等しい場合は、テキストを削除して色を元に戻します。

もう少し「ハッキー」な別の考えられる回避策は、問題の原因となる3つの属性を省略して、改行が作成されないようにすることです。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

私が追加したとき、それは私と一緒に働きました:

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

この問題に対する私の解決策についてどう思いますか?

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"/>

私にとっては問題なく動作します。Enterキーを使用できない1行だけでヒントが表示され、入力が与えられた後にフィールドを離れると、テキストが右揃えで表示されます。

于 2011-02-08T15:56:11.160 に答える
0

TextView atrs が次の場合に、この問題に気付きました。

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

そのテキストビューでテキストビューまたは setMovementMethod(LinkMovementMethod.getInstance()) をリンク化しようとすると、テキストが消えてしまいます。

android:ellipsize="start" 

アプリでアラビア語のテキストを使用しているため、問題を解決しました。

于 2014-03-11T13:22:50.937 に答える