如题,点击edittext后,光标只能显示在文本的最后面,如何让光标显示在没有文本的地方,点哪光标显示在哪,没有文本也可以显示
要让光标随着手指移动改变位置,你需要在触摸事件中获取手指的触摸位置,并将光标移动到相应的位置。下面是一个示例代码,可以实现这个功能:
public class MainActivity extends AppCompatActivity {
private EditText mEditText;
private Layout mLayout;
private int mOffset = 0;
private int mLineHeight = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEditText = findViewById(R.id.editText);
mEditText.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
// 获取当前触摸位置的偏移量和行高
mLayout = mEditText.getLayout();
mOffset = mLayout.getOffsetForHorizontal(
mLayout.getLineForVertical(motionEvent.getY()),
motionEvent.getX());
mLineHeight = mEditText.getLineHeight();
break;
case MotionEvent.ACTION_MOVE:
// 计算光标的新位置
mOffset = mLayout.getOffsetForHorizontal(
mLayout.getLineForVertical(motionEvent.getY()),
motionEvent.getX());
// 将光标移动到新位置
Selection.setSelection(mEditText.getText(), mOffset);
// 滚动EditText以便始终显示光标
int scrollY = mEditText.getScrollY();
int scrollX = mLayout.getLineStart(mLayout.getLineForOffset(mOffset));
mEditText.scrollTo(scrollX, scrollY);
break;
}
return true;
}
});
}
}
在代码中,我们在onCreate()
方法中给EditText控件设置了触摸事件,并在触摸事件中计算光标应该处于哪一个位置。当用户在EditText中移动手指时,我们根据移动的位置计算出光标新的位置,并将光标移动到新的位置,同时滚动EditText以确保光标始终可见。
需要注意的是,在计算光标的位置时,我们首先需要获取当前触摸位置所在的行数和该行的水平偏移量,然后使用getOffsetForHorizontal()
方法计算出光标相对于整个文本的位置。
另外,我们还需要使用setSelection()
方法将光标移动到新的位置,使用getScrollY()
方法和scrollTo()
方法滚动EditText控件以便光标始终可见。
以上代码仅为示例代码,你可以根据自己的需要进行适当调整。
在Android中,当点击EditText控件后,光标默认会显示在文本的最后面。如果需要让光标显示在没有文本的地方,可以通过设置EditText的gravity属性为left|center_vertical来实现。
以下是一个示例代码,演示如何将光标显示在EditText的左侧,点哪光标就显示在哪:
<EditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left|center_vertical"
android:hint="请输入文本" />
在这个示例代码中,gravity属性的值设置为left|center_vertical,这意味着文本将左对齐,垂直居中。这样设置后,即使没有文本,光标也会显示在EditText的左侧,当你点击EditText时,光标就会在点击的位置上显示。
如果需要让光标始终显示在EditText的左侧,可以将EditText的textAlignment属性设置为viewStart:
<EditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left|center_vertical"
android:textAlignment="viewStart"
android:hint="请输入文本" />
在这个示例代码中,textAlignment属性的值设置为viewStart,这意味着文本将始终从左侧开始对齐,即使文本为空,光标也会显示在EditText的左侧。
通过以上设置,你可以实现让光标显示在没有文本的地方,点哪光标显示在哪的效果。