Android编辑文本和提示布局
我有一个关于Android中EditText的问题。如何设置提示对齐居中但文本对齐左?非常感谢Android编辑文本和提示布局,android,text,android-edittext,hint,Android,Text,Android Edittext,Hint,我有一个关于Android中EditText的问题。如何设置提示对齐居中但文本对齐左?非常感谢 我只想让光标位于EditText的左侧和提示中心,您可以用Java代码通过编程实现。例如: final EditText editTxt = (EditText) findViewById(R.id.my_edit_text); editTxt.setGravity(Gravity.CENTER_HORIZONTAL); editTxt.setOnKeyListener(new OnKeyList
我只想让光标位于EditText的左侧和提示中心,您可以用Java代码通过编程实现。例如:
final EditText editTxt = (EditText) findViewById(R.id.my_edit_text);
editTxt.setGravity(Gravity.CENTER_HORIZONTAL);
editTxt.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() != KeyEvent.ACTION_UP) return false;
if (editTxt.getText().length() > 1) return false;
if (editTxt.getText().length() == 1) {
editTxt.setGravity(Gravity.LEFT);
}
else {
editTxt.setGravity(Gravity.CENTER_HORIZONTAL);
}
return false;
}
});
不要漏掉一个“最终”字。它使您的文本视图在侦听器代码中可见
您可以在“onKey”方法中将“View v”强制转换为“TextView”,而不是“final”关键字
2012年3月9日更新:
在这种情况下,您可以删除`onKeyListener`并编写`onFocusChangeListener'`
下面是一些代码:
editTxt.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
editTxt.setGravity(Gravity.LEFT);
}
else {
if (editTxt.getText().length() == 0) {
editTxt.setGravity(Gravity.CENTER_HORIZONTAL);
}
}
}
});
您可以使用这种方式(在提示前加上所需的空格)。
将其添加到自定义的EditText类:
@Override
protected void onSizeChanged (int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
String hint = getContext().getString(R.string.my_hint);
float spaceSize = getPaint().measureText(" ");
float textSize = getPaint().measureText(hint);
int freeSpace = w - this.getPaddingLeft() - this.getPaddingRight();
int spaces = 0;
if (freeSpace > textSize) {
spaces = (int) Math.ceil((freeSpace - textSize) / 2 / spaceSize);
}
if (spaces > 0) {
Log.i(TAG, "Adding "+spaces+" spaces to hint");
hint = prependStringWithRepeatedChars(hint, ' ', spaces);
}
setHint(hint);
}
private String prependStringWithRepeatedChars(/* some args */) {
/// add chars to the beginning of string
}
你是说两个都在一个EditText中?这看起来像是一个类似的问题:非常感谢,但我希望光标位于左侧,即使我不输入任何内容(长度=0)。