Android: Edittext with gravity center not working

2019-01-23 13:50发布

In Android I'm using a single line edittext with gravity set to center. In the Emulator this works great both the hint and a blinking cursor shows up. When testing on device (Xperia X10) neither the hint text nor the blinking cursor shows up. The blinking cursor only shows if I enter some text into the edittext.

This is my edittext, can anyone see if something is missing?

<LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:layout_gravity="center"
>
<EditText 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:inputType="numberDecimal" 
    android:ellipsize="end" 
    android:maxLines="1"
    android:gravity="center" 
    android:layout_gravity="center"
    android:hint="Some hint text"
></EditText>
</LinearLayout>

What I want:

This is what I want

What I get with the above code (empty edittext with no cursor):

The edittext doesn't show the hint text and have no blinking cursor

6条回答
萌系小妹纸
2楼-- · 2019-01-23 14:22

Hope it's not too late. I came across this problem and I don't know whether it is the same for every device but it appears EditText by default has bottom padding.

My EditText text value always appeared to be slightly above center despite setting gravity to be CENTER so I additionally set:

myEditText.setPadding(0, 0, 0, 0);

This fixed it for me, now my EditText is perfectly centered :D

查看更多
该账号已被封号
3楼-- · 2019-01-23 14:23

i think , you should set the gravity of the parentLayout of your EditText , to center

EDIT :

<LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_horizontal" 
    android:id="@+id/linearLayout">

   <EditText 
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:inputType="numberDecimal" 
       android:ellipsize="end" 
       android:maxLines="1"
       android:hint="Some hint text"/>
</LinearLayout>
查看更多
萌系小妹纸
4楼-- · 2019-01-23 14:29

Instead of adding the gravity in style tag add that inside your Layout file that will work

查看更多
乱世女痞
5楼-- · 2019-01-23 14:33

I finally found the solution to get it working. This EditText works for me: (Tested on Sony Ericsson X10 and HTC Wildfire)

<EditText 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:inputType="numberDecimal" 
    android:digits="0123456789.,"
    android:ellipsize="start" 
    android:maxLines="1"
    android:gravity="center"
    android:hint="Some hint text"
></EditText>
查看更多
成全新的幸福
6楼-- · 2019-01-23 14:41
  • In XML file add gravity CENTER_HORIZONTAL for set hint to center.CURSORVISIBLE=false so cursor not visible when click first time
  • In java use addTextChangedListener, when user add text that time change gravity to left and also visible cursor.

XML :

<EditText android:id="@+id/email"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:hint="EMAIL"
  android:textStyle="bold"
  android:gravity="center_horizontal"
  android:inputType="textEmailAddress"
  android:layout_margin="10dp"
  android:cursorVisible="false" />

JAVA:

email.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) {
                    // position the text type in the left top corner
                    email.setGravity(Gravity.LEFT | Gravity.TOP);
                    email.setCursorVisible(true);
                }
                else
                {
                    // no text entered. Center the hint text.
                    email.setGravity(Gravity.CENTER);
                    email.setCursorVisible(false);
                }
            }
        });
查看更多
疯言疯语
7楼-- · 2019-01-23 14:43

I tried a combination of gravities :

android:gravity="top|center_horizontal"

My previous attempt was to nest the EditText inside a RelativeLayout and set it to center but it did not look that good , this way works best for me.

查看更多
登录 后发表回答