我想在EditText中检索当前的光标Y位置以显示片段列表(根据此Y设置位置);我想做同样的行为,比如在Facebook App中提到列表:
所以我做到了:
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];
它正常工作但是当滚动到我的EditText时,位置Y(point.y)变得不正确......我无法理解如何准确地确定光标的绝对Y(进入屏幕)所有情况(有/无滚动)。
非常感谢你们!
答案 0 :(得分: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>
创建一个新类CustomAdapter,它为对象User
扩展ArrayAdapterpublic 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;
}
}
答案 1 :(得分:0)
有一个类似的问题 - 您可以使用editText.getScrollY()
(它返回edittext滚动的Y偏移量,以像素为单位)来解决这个问题。
所以在你的情况下:
point.y = baseline + ascent + location[1] - editText.getScrollY();