如何使android edittext提示居中和左光标
如何在EditText的中心设置提示文本,并在EditText的左侧设置光标?当我开始输入文本时,它是从中心编辑文本开始的 现在我有如何使android edittext提示居中和左光标,android,android-edittext,Android,Android Edittext,如何在EditText的中心设置提示文本,并在EditText的左侧设置光标?当我开始输入文本时,它是从中心编辑文本开始的 现在我有 没有直接的方法,但您可以使用以下代码进行尝试 <FrameLayout android:layout_width="match_parent" android:layout_height="48dp"> <EditText android:layout_width="wrap_content"
没有直接的方法,但您可以使用以下代码进行尝试
<FrameLayout
android:layout_width="match_parent"
android:layout_height="48dp">
<EditText
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layout_gravity="center"
android:hint="You text here"/>
</FrameLayout>
为父framelayout提供下划线背景,并在其单击时将焦点放在EditText上,而不是使用编辑文本的提示:
gravity=“left”
-这样光标将位于视图的左侧将两个视图(EditText和TextView)都放在RelativeLayout中-这样,您可以将提示视图放在TextView后面。在对视图进行膨胀后,在代码中放置以下内容:
EditText editText = (EditText)findViewById(R.id.loginEmailField);
editText.setSelection(0);
它会将插入符号放在提示文本的开头。一旦你开始打字,文本将一直居中,插入符号将在你打字的末尾移动。我知道这是一个有点愚蠢的问题。。 解决此问题的最简单方法是(并保持文本居中)使用以下简单技巧:
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void afterTextChanged(Editable s) {
if (s != null && s.toString().length() > 0){
editText.setGravity(Gravity.CENTER);
}else{
editText.setGravity(Gravity.START);
}
}
});
我也面临同样的问题,并考虑了两种可能的变体: 1。非常简单
提示中间的光标看起来很不愉快。 因此,我只是在editText获得焦点时删除提示,否则将其设置回原位:
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
editText.setHint(hasFocus ? "" : "My hint");
}
});
2。一些硬代码在这种情况下:
如果editText为空:
-将文本设置为提示
-将textColor设置为hintColor
-禁用文本选择
-在文本之前设置选择(
setSelection(0)
)
如果用户输入任何符号-将提示替换为“”
-将textColor设置回textColor
-启用文本选择 步骤:
2.1添加TextWatcher
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { // empty }
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) { // empty }
@Override
public void afterTextChanged(Editable s) {
processChangedText(s);
}
});
2.2设置焦点更改侦听器:
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
processChangedText(editText.getText());
}
}
});
2.3和一点神奇的内部方法processChangedText(可编辑的s)
2.4启用/禁用光标移动方法(可能不是一个好选择,最好创建自己的EditText覆盖onSelectionChanged方法)
另外,我真的建议您使用第一种变体,它非常简单,看起来也不错。当
EditText
聚焦时,您可以隐藏提示。使用我的自定义编辑文本:
请尝试以下我的代码:
android:textCursorDrawable="@null"
您可以在下面添加额外的
视图
编辑文本以模拟编辑文本行,将编辑文本背景设置为null
,将宽度设置为wrap\u content
,并将layout\u gravity
设置为中心
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@null"
android:cursorVisible="true"
android:ellipsize="start" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#ffffff" />
</LinearLayout>
在xml中,
EditText
必须具有android:layout\u width=“wrap\u content”
然后,按如下方式设置代码:
final EditText msgTxt = (EditText) view.findViewById(R.id.edtTxt);
msgTxt.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if(s.length() != 0){
msgTxt.setGravity(Gravity.CENTER);
}
else{
msgTxt.setGravity(Gravity.CENTER_VERTICAL);
}
}
});
我说尝试一下,但这并不意味着你应该否决某个应该是经过验证的答案的人。虽然这个链接可以回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-@0x0nosugar,已修复
public class HintHideEditText extends EditText {
private CharSequence savedHint;
public HintHideEditText(Context context) {
super(context);
}
public HintHideEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public HintHideEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
validateHint(focused);
super.onFocusChanged(focused, direction, previouslyFocusedRect);
}
public CharSequence getSavedHint() {
return savedHint;
}
public void setSavedHint(CharSequence savedHint) {
this.savedHint = savedHint;
validateHint(hasFocus());
}
public void setSavedHint(@StringRes int resid) {
setSavedHint(getContext().getResources().getText(resid));
}
private void validateHint(boolean focused) {
if (focused) {
savedHint = getHint();
}
setHint(focused ? "" : savedHint);
}
}
android:textCursorDrawable="@null"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@null"
android:cursorVisible="true"
android:ellipsize="start" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#ffffff" />
</LinearLayout>
final EditText msgTxt = (EditText) view.findViewById(R.id.edtTxt);
msgTxt.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if(s.length() != 0){
msgTxt.setGravity(Gravity.CENTER);
}
else{
msgTxt.setGravity(Gravity.CENTER_VERTICAL);
}
}
});