Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使android edittext提示居中和左光标_Android_Android Edittext - Fatal编程技术网

如何使android 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"

如何在EditText的中心设置提示文本,并在EditText的左侧设置光标?当我开始输入文本时,它是从中心编辑文本开始的

现在我有


没有直接的方法,但您可以使用以下代码进行尝试

<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上,而不是使用编辑文本的提示:

  • 为EditText的背景色添加透明度
  • 在EditText后面直接添加一个新的TextView-将其文本设置为提示文本
  • 在编辑文本中设置
    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);
            }
        }
    });