Как предотвратить изменение размера EditText, когда пользователь печатает? - PullRequest
48 голосов
/ 11 сентября 2009

У меня есть 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>

Ответы [ 10 ]

88 голосов
/ 11 сентября 2009

Для редактирования текста используйте

android:layout_width="0dp" - not required but preferred.
android:layout_weight="1"

И для кнопки не указывайте android:layout_weight

14 голосов
/ 11 октября 2011

То, что я делаю, находится в onCreate для действия, сначала измерьте EditText, затем примените его maxWidth.

Вы можете сделать это, используя код, подобный следующему:

EditText someedittext = (EditText)findViewById(R.id.sometextview);
someedittext.setMaxWidth(someedittext.getWidth());
5 голосов
/ 11 сентября 2009

Даешь EditText а maxWidth. Это должно остановить его от изменения размера, который вы указали. Кроме того, если вы хотите, чтобы он содержался в пределах 1 строки, установите для параметра maxLines также значение 1.

2 голосов
/ 18 февраля 2016

enter image description here

Вам нужно добавить Android: imeOptions, чтобы предотвратить это поведение.

Нажмите здесь

2 голосов
/ 12 октября 2010

Просто используйте:

android:layout_width="fill_parent"

для EditText и Button. Он также будет работать для EditText, но лучше иметь его на обоих.

1 голос
/ 15 января 2013

вы можете определить размер вашего текста редактирования, как показано выше

android:minWidth="80dp"
android:maxWidth="80dp"

или

android:layout_width="60dp"

или

Вы можете применить фоновое изображение нужного вам размера. но не забудьте определить его высоту и ширину с wrap_content.

  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
0 голосов
/ 26 декабря 2018

Выбранное решение работает, но позвольте мне добавить небольшое дополнение:
если вы используете android:layout_weight="0.15" (значение не важно)
затем
android:layout_width="0dp", если LinearLayout Горизонтально
или
android:layout_height="0dp", если LinearLayout Вертикально.

0 голосов
/ 04 октября 2014

У меня был точный запрос. Но у меня был EditText и кнопка рядом друг с другом в линейном макете. Я пытался android: layout_weight = "1" для EditText андроид: layout_width = "0dp" И это сработало просто отлично! Большое спасибо!

0 голосов
/ 07 сентября 2011

Правильный способ сделать это состоит в том, чтобы установить android: minWidth и android: maxWidth равным желаемой ширине. Таким образом, вам не придется настраивать макет для использования Android: layout_weight.

Например, если вы хотите, чтобы ваш EditText всегда составлял 80 пикселей плотности, независимо от того, сколько символов вы вводите, используйте следующее:

android:minWidth="80dp"
android:maxWidth="80dp"
0 голосов
/ 24 сентября 2009

У меня была похожая проблема, но я не мог заставить работать вышеперечисленное. Что я сделал, так это взял текст из поля EditText и затем отформатировал его до максимального размера, который мог бы обрабатывать мой экран. Когда я сохраню это в БД, я сохраню его как отображаемый текст и исходный текст.

Если вы перейдете на эту страницу Я добавлю более подробное объяснение.

...