Android EditText内容右对齐,光标位于hint之后

打算写篇文章记录之前遇到的一个需求,如题。还特意写个demo运行一下,尴尬的是:只是在布局设置了android:gravity="center_vertical|end",就达到之前的需求,难道是我之前写错了??

经过测试:android 7.0 及以后,无需进行额外的设置,即可达到正常效果,7.0 以下需要代码动态设置一下。
否则将是如下效果:

Android EditText内容右对齐,光标位于hint之后_第1张图片
7.0 以下默认效果

我们来看一下如何在Activity中的代码:

public class MainActivity extends AppCompatActivity {

    private EditText mEditText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mEditText = findViewById(R.id.et);

        // 如下是内容为空的配置,需要两个属性结合使用;如果有默认值,进行相反的配置
        // 设置文字的对齐方式
        mEditText.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
        // 设置文本的显示方向
        mEditText.setTextDirection(View.TEXT_DIRECTION_RTL);

        mEditText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                if (TextUtils.isEmpty(editable.toString())) {
                    mEditText.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
                    mEditText.setTextDirection(View.TEXT_DIRECTION_RTL);
                } else {
                    mEditText.setGravity(Gravity.END | Gravity.CENTER_VERTICAL);
                    mEditText.setTextDirection(View.TEXT_DIRECTION_LTR);
                }
            }
        });
    }
}

这样应该就解决了兼容性的问题了,效果如下:


Android EditText内容右对齐,光标位于hint之后_第2张图片
最终效果

你可能感兴趣的:(Android EditText内容右对齐,光标位于hint之后)