【问题标题】:Android: Edittext with gravity center not working on deviceAndroid:重心的Edittext在设备上不起作用
【发布时间】:2011-09-02 10:11:23
【问题描述】:

在 Android 中,我使用单行编辑文本,并将重力设置为中心。在模拟器中,提示和闪烁的光标都显示出来了。在设备 (Xperia X10) 上进行测试时,提示文本和闪烁的光标都不会出现。只有当我在编辑文本中输入一些文本时才会显示闪烁的光标。

这是我的编辑文本,谁能看看有没有遗漏?

<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>

我想要什么:

我用上面的代码得到了什么(没有光标的空编辑文本):

【问题讨论】:

标签: android android-edittext gravity text-cursor


【解决方案1】:

我终于找到了让它工作的解决方案。这个 EditText 对我有用:(在 Sony Ericsson X10 和 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】:

希望还为时不晚。我遇到了这个问题,我不知道每个设备是否都相同,但它显示为EditText 默认情况下有底部填充

尽管将重力设置为CENTER,但我的 EditText 文本值似乎总是略高于中心,因此我另外设置了:

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

这为我解决了问题,现在我的 EditText 完全居中:D

【讨论】:

  • 我刚刚花了一个小时来解决这个愚蠢的问题。这工作,谢谢!我推荐 myEditText.setPadding(myEditText.getPaddingLeft(), 0, myEditText.getPaddingRight(), 0);保持左右填充。
【解决方案3】:

我认为,您应该将 EditText 的 parentLayoutgravity 设置为 center

编辑:

<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>

【讨论】:

  • 谢谢,我测试过,但没有区别。请查看更新后的问题。
  • 也看我的编辑,我的意思是不要设置你editText的重力,我说的是他parentLayout的重力,
  • 是的,我明白了,但这并没有什么不同。这在您在设备上测试时有效吗?
  • 去掉 android:layout_gravity="center" 看看是否有效
  • @Martin,我现在将在模拟器和我的设备中对其进行测试,您希望它居中水平和垂直吗?还是只是水平的? ,看我的编辑:(
【解决方案4】:

我尝试了重力组合:

android:gravity="top|center_horizontal"

我之前的尝试是将 EditText 嵌套在 RelativeLayout 中并将其设置为居中,但看起来不太好,这种方式最适合我。

【讨论】:

    【解决方案5】:
    • 在 XML 文件中添加重力 CENTER_HORIZONTAL 以设置提示 center.CURSORVISIBLE=false 所以第一次点击时光标不可见 时间
    • 在 java 中使用 addTextChangedListener,当用户添加文本时 将重力更改为向左和可见的光标。

    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】:

    不要在样式标签中添加重力,而是在您的布局文件中添加它会起作用

    【讨论】:

    • 谢谢,但没有这样做。请查看更新后的问题。
    猜你喜欢
    • 2011-05-23
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多