如何获取edittext游标的绝对屏幕位置?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取edittext游标的绝对屏幕位置?相关的知识,希望对你有一定的参考价值。
我想在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(进入屏幕)(有/无滚动)。
非常感谢你们!
答案
你可以使用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扩展ArrayAdapter
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;
}
}
另一答案
有一个类似的问题 - 你可以通过使用editText.getScrollY()
(它返回edittext的滚动的Y偏移,以像素为单位)来解决这个问题。
所以在你的情况下:
point.y = baseline + ascent + location[1] - editText.getScrollY();
以上是关于如何获取edittext游标的绝对屏幕位置?的主要内容,如果未能解决你的问题,请参考以下文章
OSX / Cocoa:获取屏幕中docktile图标的绝对位置[重复]
如何在android中使用游标(sqlite查询)搜索数据库
Android EditText,让它填满整个屏幕并在其中任意位置书写
如何获取 UITableView 单元格中的 UIButton 的绝对 x,y