Android: Edittext с гравитационным центром, не работающим на устройстве
В Android я использую одну строку edittext с гравитацией, установленной в центр. В эмуляторе это прекрасно работает, как подсказка, так и мигающий курсор. При тестировании на устройстве (Xperia X10) не появляется ни текст подсказки, ни мигающий курсор. Мигающий курсор отображается только в том случае, если я введу какой-то текст в edittext.
Это мой edittext, может ли кто-нибудь увидеть, если что-то не хватает?
<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>
Что я хочу:
![This is what I want]()
Что я получаю с вышеуказанным кодом (пустой edittext без курсора):
![The edittext doesn't show the hint text and have no blinking 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
Я думаю, вы должны установить тяжести parentLayout вашего EditText, чтобы центр
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
Надеюсь, что не поздно. Я столкнулся с этой проблемой, и я не знаю, одинаково ли для каждого устройства, но появляется EditText
по умолчанию имеет нижнее дополнение.
Текстовое значение My EditText всегда оказывалось чуть выше центра, несмотря на то, что значение силы тяжести было CENTER
, поэтому я дополнительно установил:
myEditText.setPadding(0, 0, 0, 0);
Это исправлено для меня, теперь мой EditText идеально по центру: D
Ответ 4
Вместо добавления гравитации в теге стиля добавьте, что внутри вашего файла макета, который будет работать
Ответ 5
Я попробовал сочетание гравитации:
android:gravity="top|center_horizontal"
Моя предыдущая попытка состояла в том, чтобы вставить EditText внутри RelativeLayout и установить его в центр, но он выглядел не так хорошо, этот способ работает лучше всего для меня.
Ответ 6
- В файле 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);
}
}
});