2017-12-03 43 views
1

EditTextに現在のカーソルYの位置を取得して、フラグメントリストを表示したい(このYに従って位置を設定する)。私は同じ動作をしたいのようなFacebookのアプリにリストに言及:edittextカーソルの絶対画面位置を取得する方法は?

enter image description here

だから私はことをやった:私のEditTextへのスクロールがある場合にはそれが正常に動作しますが、

int pos = editText.getSelectionStart(); 
    Layout layout = editText.getLayout(); 
    int line = layout.getLineForOffset(pos); 
    int baseline = layout.getLineBaseline(line); 
    int ascent = layout.getLineAscent(line); 

    int location[] = new int[2]; 
    editText.getLocationOnScreen(location);  

    Point point = new Point(); 
    point.x = (int) layout.getPrimaryHorizontal(pos); 
    point.y = baseline + ascent + location[1]; 

、位置Y(point.y)が正しくない...すべての場合(スクロールあり/なし)のカーソルの絶対的なY(画面内への)正確な表示方法を理解できません。

はあなたに非常に多くのみんなありがとう!

答えて

1

これはAutoCompleteTextViewにカスタムList Adapterを使用して行うことができます。

はここでの例です:あなたの活動/フラグメントで

AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.tv_users); 
CustomAdapter<User> adapter = new CustomAdapter<User>(this, R.layout.user_row, usersList); 
textView.setAdapter(adapter); 

対象ユーザーを作成します。

public class User { 
    public String name; 
    public Bitmap image; 

    public User(String name, Bitmap image) { 
    this.name = name; 
    this.image= image; 
    } 
} 

は、行レイアウトを作成します。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
    <ImageView 
    android:id="@+id/image" 
    android:layout_height="wrap_content" 
    android:src="@drawable/icon" 
    android:scaleType="center"/> 
    <TextView 
    android:id="@+id/user_name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Name" /> 
</LinearLayout> 

作成新しいクラスのクスト対象ユーザー

public class CustomAdapter extends ArrayAdapter<User> { 
    public CustomAdapter(Context context, int layout, ArrayList<User> users) { 
    super(context, layout, users); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    // Get the user for this position 
    User user = getItem(position); 

    TextView userName = (TextView) convertView.findViewById(R.id.user_name); 
    ImageView image = (ImageView) convertView.findViewById(R.id.image); 

    userName.setText(user.name); 
    image.setImageBitmap(user.image); 

    return convertView; 
} 
} 
0

ためArrayAdapterを拡張mAdapterは、同様の問題を持っていた - あなたは(のEditTextのスクロールで、Yはオフセットをピクセル単位で返す)editText.getScrollY()を使用することによってこの問題を解決することができます。だからあなたの場合

point.y = baseline + ascent + location[1] - editText.getScrollY();

関連する問題