EditText
重力が中心に設定されている場所に問題があります。android:ellipsize="start"
そのため、ヒントが表示される属性を中央に配置する必要がありました。
ただし、ヒントはカーソルの前に表示されるため、アプリケーションの外観がかなり悪くなります。
私がやりたいことは、テキストの前にカーソルを表示することです。これに関する提案はありますか?
テキストが空の場合、ヒントを表示する必要がある3つの解決策があります。ヒントを表示するか、ヒントを非表示にします。もう1つの側面は、カーソル(widgit)の位置を調整することです。前提条件は、EditTextをレイアウトに配置し、edittextを調整しますレイアウトの重力は自己重力ではありません。しかし、私の要求はヒントの前です。あなたは重力を右に向けるだけです。この写真のように: ここに画像の説明を入力してください
@Override
public void onFocusChange(View v, boolean hasFocus) {
adjustCursorPosition(etInput.getText());
}
@Override
public void afterTextChanged(Editable s) {
adjustCursorPosition(etInput.getText());
}
private void adjustCursorPosition(CharSequence text){
if (!TextUtils.isEmpty(etInput.getHint())){
adjustGravityForCursor(text);
//adjustCursorVisible(text);
//adjustHintContent(hasFocus(),text);
}
}
private void adjustHintContent(boolean hasFocus, CharSequence text){
if (TextUtils.isEmpty(text)) {
etInput.setHint(hasFocus ? "" : mHint);
}
}
private void adjustCursorVisible(CharSequence text){
etInput.setCursorVisible(!TextUtils.isEmpty(text));
}
private void adjustGravityForCursor(CharSequence text) {
LayoutParams lp = (LayoutParams) etInput.getLayoutParams();
if (mSpaceWidth <= 0) mSpaceWidth = lp.width;
if (!TextUtils.isEmpty(text)) {
etInput.setGravity(Gravity.CENTER);
lp.leftMargin = 0;
} else {
etInput.setGravity(Gravity.LEFT);
lp.leftMargin = (mSpaceWidth - measureText(etInput,mHint)) / 2;
}
etInput.setLayoutParams(lp);
}
このスレッドに従って、EditTextのsetSelectionメソッドを使用できると思います。