Как мне предотвратить изменение размера EditText при вводе пользователем текста?
-
05-07-2019 - |
Вопрос
У меня есть EditText
и еще Button
устанавливаются рядом друг с другом на одной горизонтальной линии.Это выглядит великолепно, за исключением случаев, когда пользователь вводит много текста, EditText
изменяется размер, и Button
раздавливается.
У меня есть и то, и другое EditText
и Button
установлено значение layout_width="wrap_content"
. "fill_parent"
портит макет, и я не хочу использовать абсолютные размеры, если в этом нет необходимости - то, что есть сейчас, отлично смотрится как в альбомной, так и в портретной ориентации, я просто не хочу, чтобы EditText
чтобы изменить размер.
Мой макет:
<TableLayout
android:id="@+id/homelayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TableRow>
<TextView
android:id="@+id/labelartist"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Find artists:" />
</TableRow>
<TableRow>
<EditText
android:id="@+id/entryartist"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="6"
android:background="@android:drawable/editbox_background"
android:editable="true"
android:padding="5px"
android:singleLine="true" />
<Button
android:id="@+id/okartist"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginLeft="10dip"
android:layout_weight="1"
android:text="Search" />
</TableRow>
</TableLayout>
Решение
Для редактирования текста используйте
android:layout_width="0dp" - not required but preferred.
android:layout_weight="1"
И для кнопки не указывайте android: layout_weight
Другие советы
То, что я делаю, находится в onCreate для действия, сначала измерьте EditText, затем примените его maxWidth. Р>
Вы можете сделать это, используя код, подобный следующему:
EditText someedittext = (EditText)findViewById(R.id.sometextview);
someedittext.setMaxWidth(someedittext.getWidth());
Дайте EditText
maxWidth
. Это должно остановить его от изменения размера, который вы указали. Кроме того, если вы хотите, чтобы он содержался в одной строке, установите для параметра maxLines
также значение 1.
Просто используйте:
android:layout_width="fill_parent"
для EditText и Button. Он также будет работать для EditText, но лучше иметь его на обоих.
вы можете определить размер вашего редактируемого текста, как показано выше
android:minWidth="80dp"
android:maxWidth="80dp"
или
android:layout_width="60dp"
или
вы можете применить фоновое изображение нужного размера но не забудьте определить его высоту и ширину с помощью wrap_content.
android:layout_width="wrap_content"
android:layout_height="wrap_content"
У меня была похожая проблема, но я не мог заставить работать вышеперечисленное. Что я сделал, так это взял текст из поля EditText и затем отформатировал его до максимального размера, который мог бы обрабатывать мой экран. Когда я сохраню это в БД, я сохраню его в качестве отображаемого текста и исходного текста.
Если вы перейдете на эту страницу , я добавлю более подробное объяснение.
Правильный способ сделать это - установить значения android: minWidth и android: maxWidth равные ширине, которую вы хотите. Таким образом, вам не придется настраивать макет для использования Android: layout_weight.
Например, если вы хотите, чтобы ваш EditText всегда составлял 80 пикселей плотности, независимо от того, сколько символов вы вводите, используйте следующее:
android:minWidth="80dp"
android:maxWidth="80dp"
У меня был точный запрос. Но у меня был EditText и кнопка рядом друг с другом в линейном макете. Я пробовал android: layout_weight = " 1 " для EditText Android: layout_width = & Quot; 0dp & Quot; И это сработало просто отлично! Большое спасибо! Р>
Выбранное решение работает, но позвольте мне добавить небольшое дополнение:
если вы используете
android: layout_weight = " 0,15 "
(значение не важно)
затем
android: layout_width = " 0dp "
, если LinearLayout
установлен по горизонтали
или
android: layout_height = " 0dp "
, если LinearLayout
установлен вертикально.