Android: Edittext with gravity center not working

2019-01-23 14:18发布

问题:

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:

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

回答1:

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>


回答2:

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>


回答3:

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



回答4:

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.



回答5:

  • 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);
                }
            }
        });


回答6:

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