2011-01-10 8 views
8

私はバグをオープンしましたが、誰かがこの問題に遭遇し、回避策を知っているのだろうかと思っていました。 ヒントを含むテキストビューを定義する場合、アンドロイド:singleLine = trueまたはandroid:maxLines = "1"またはandroid:scrollHorizo​​natally = "trueを定義すると、右重力(android:gravity =" right ")を与えます。 "あなたはヒントを見ない。右の重力を取り除くとヒントが左側に戻ります。上記のすべてのツリー・パラメーターを削除すると、ヒントが右側に置かれます。私は右の私のヒントをしたいが、私は単一の水平線を必要とする...右の重力とシングルラインのヒントとテキストビュー

ここにヒントが表示されないサンプルレイアウトです:

<?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テキストの長さは、mHintがnullでない場合は0 mHintLayoutです)。

答えて

5

あなたは問題が正しいと思われます。あなたのサンプルレイアウトで試してみましたが、同じ問題がありました。あなたのバグレポートはthisだと思います。

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

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

もう一つの可能​​性のある回避策は、問題を引き起こす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)を呼び出したいでしょう。テキストフィールドに改行をつけたり、他の方法で貼り付けたりすることが可能な場合もありますので、改行を解析して削除することもできます。これは、水平方向のスクロールまでは望んでいないようです。

+0

私はTextViewとEditTextの内部のほとんどがプライベートなので、私は実際にそれらに触れることはできませんので、私は自分自身のヒントメンバをsetHintとsetTextをオーバーライドする必要がありますので、私の変数をヒントしてonDrawに表示し、クリックが行われると何とかそれを削除する必要があります。ここでの簡単な解決策ではありません.... – codeScriber

+0

これは実際の解決策ではありません。何かがうまくいくまで、私はそれを受け入れます。アンドロイドが受け入れられ、NEWとして定義されたバグです。 – codeScriber

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

作品罰金:ちょうど1行、何も入力キーを可能にし、私にヒントを示していないし、いくつかの入力が与えられた後、私はフィールドを離れるときテキストは右揃えで表示されます。

+0

私は自分のコードでチェックする必要がありますが、焦点は通常ノンタッチモードで得られたものなのでフォーカスリスナーで遊んでいるのが好きではありません。非タッチモードでもフューチャーできるEditText ... 10xとにかく;-) – codeScriber

14

android:ellipsize="start"を試しましたか?これは、私がヒントを求めて、EditTextを中央に置くことを望んでいたとき、過去に私にとって素晴らしい仕事をしてくれました。

+0

ありがとう、実際にはrtl言語で動作します... – Devenv

+0

奇妙な解決策ですが、私のために働いています(TextViewには右重力とtextCapWordsがあり、ヒントの配置を破っていました)。ありがとう! – zeh

+0

問題はありませんが、確かに奇妙な回避策です。私は、 'ellipsize'、' hint'、 'gravity'で多数の矛盾が発生しています。これは将来的にクリーンアップされるかもしれません。 –

2

これらのプロパティをヒントと1行で使用すると...重力をかけることができます!

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

と私の活動では、私が追加:私が追加したとき、それは私と一緒に働いていた

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

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; 
    } 
}); 
1

は留意が私には十分働きました。 Gravity.rightを設定すると、カーソルは常に右側にあり、単語の中央に置くことはできませんでした。

私は別のアプローチを試してみました - (それはあなたのために働く場合は左、)テキストが存在しない場合に、重力に権利をセットに入れて、ユーザーが何か

これを入力したら、Androidが最善の方向を決めてみましょう私の仕事:

  1. 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. は、クラスのメンバー

    として使用TextWatcherクラスを作成します onCreate()
    private TextWatcher mFilterTextWatcher = new FilterTextWatcher(this); 
    
  3. onDestroy()
    mSearchTxtBx.addTextChangedListener(mFilterTextWatcher); 
    
  4. mSearchTxtBx.removeTextChangedListener(mFilterTextWatcher); 
    mFilterTextWatcher = null; 
    
0

私のTextViewのATRSがあるとき、私はこの問題に気づいた:

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

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

android:ellipsize="start" 

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

関連する問題