#android #button #layout
#Android #кнопка #макет
Вопрос:
Я использую простой горизонтальный LinearLayout, чтобы разместить 3 кнопки рядом друг с другом одинаковой ширины. Я добиваюсь этого с помощью следующего XML-текста:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/activity_vertical_margin"
android:baselineAligned="false" >
<Button
android:id="@ id/help"
style="android:buttonBarButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/help" />
<Button
android:id="@ id/close"
style="android:buttonBarButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/closemultigame" />
<Button
android:id="@ id/ok"
style="android:buttonBarButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/restartmultigame" />
</LinearLayout>
Теперь макет выглядит так:
Кнопка layout_height определяется как wrap_content, но крайняя правая кнопка не переносит свое содержимое. На разных устройствах это выглядит по-разному, на некоторых это выглядит хорошо. Чего я действительно хотел бы добиться, так это трех кнопок одинаковой ширины и одинаковой высоты, каждая из которых имеет текст, центрированный как по горизонтали, так и по вертикали. Какой подход вы бы предложили?
ДОБАВЛЕНО: весь макет в соответствии с запросом:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/activity_horizontal_margin" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@ id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:drawableLeft="@drawable/matchandfit"
android:drawablePadding="@dimen/activity_horizontal_margin"
android:gravity="center_vertical"
android:padding="@dimen/activity_horizontal_margin"
android:text="@string/multigameover"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@ id/status"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/multigameresult"
android:textAppearance="?android:attr/textAppearanceMedium" />
<LinearLayout
android:id="@ id/masterresult"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@ id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/masterresultinfo"
android:textAppearance="?android:attr/textAppearanceMedium" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/activity_vertical_margin"
android:baselineAligned="false" >
<Button
android:id="@ id/help1"
style="android:buttonBarButtonStyle"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/help" />
<Button
android:id="@ id/close1"
style="android:buttonBarButtonStyle"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/closemultigame" />
<Button
android:id="@ id/ok1"
style="android:buttonBarButtonStyle"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/restartmultigame" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</ScrollView>
Как указал Васим Ахмед, это связано с ScrollView. Теперь я использую ScrollView, чтобы убедиться, что кнопки остаются доступными даже в альбомной ориентации на небольших устройствах. (Макет предназначен для диалогового окна). Есть ли другой способ всегда сохранять кнопки доступными / видимыми?
ОБХОДНОЙ ПУТЬ: решением или лучшим обходным путем, который я нашел, было добавление TextView в конец заключающего LinearLayout. Это текстовое представление обрезано по вертикали примерно на половину его высоты, но оно не содержит текста, поэтому никто не заметит. Добавление некоторого отступа в нижнюю часть заключающего LinearLayout не помогло
Комментарии:
1. Я только что попробовал ваш код, и он здесь работает нормально .. с вашим кодом проблем нет .. я думаю, что ваш LinearLayout находится в другом Layout..so это связано с его высотой..
2. да, вы правы, но внешний линейный макет также имеет wrap_content для его высоты.
3. можете ли вы опубликовать весь XML-макет целиком ?? 🙂
4. да, добавил весь макет в мой пост
5. дорогой, я проверил это … это только из-за scrollview.
Ответ №1:
Снова и снова я замечал, что Button
класс не приспосабливается к размеру текста, даже если вы укажете android:layout_height="wrap_content"
.
Вы можете сделать одну из двух вещей:
1. Вы можете вручную установить либо размер текста, либо ширину вашего Button
, пока текст не будет правильно вписываться (имитируя внешний вид wrap_content
).
2. TextView
Вместо этого используйте a (который правильно переносит текст при указании android:layout_height="wrap_content"
), и вы устанавливаете onClickListener
значение on TextView
для имитации поведения кнопки.
Комментарии:
1. Та же проблема с TextView. Как указал Васим Ахмед, это связано с окружающим ScrollView…
Ответ №2:
Обходным путем для этого является набор minHeight
Button
таких
android:minHeight="1dp"
Это должно работать
Ответ №3:
Не переносите высоту кнопки, вместо этого используйте fill_parent
, чтобы сделать высоту кнопок одинаковой друг с другом.
пример:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/activity_vertical_margin"
android:orientation="horizontal"
android:baselineAligned="false" >
<Button
android:id="@ id/help"
style="android:buttonBarButtonStyle"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="hilfe" />
<Button
android:id="@ id/close"
style="android:buttonBarButtonStyle"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="beenden" />
<Button
android:id="@ id/ok"
style="android:buttonBarButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="neue Pundo" />
</LinearLayout>
Результат:
Комментарии:
1. Скопировал ваш XML-текст, но все тот же эффект для моей системы (Android 4.2. средство визуализации макета в eclipse, но тот же результат на моем Google Nexus 7)
2. @Gerhard но это большинство устройств??
3. Это 50% моих устройств 🙂
4. @Gerhard измените заливку, чтобы она соответствовала родительской, и сообщите мне результат
5. заполнить родительский элемент и сопоставить родительский элемент — это одно и то же, не так ли? Оба оцениваются как «-1»
Ответ №4:
Я просто попробовал, и это сработало:
1) Определите в .. /res/values/strings.xml:
Line1Line1 nLine2Line2
2) Обратитесь к нему в файле макета:
<Button
android:id="@ id/btn_multilines"
android:text="@string/multilines"
android:layout_height="wrap_content"
android:layout_width="fill_parent">
</Button>
Ответ №5:
Не повезло с переносом текста внутри кнопки переключения с помощью android:layout_width=»wrap_content» и т. Д., Поэтому я добавил обратную косую черту n ( n) в строку метки, где я хотел переносить. Например, «Нажмите, чтобы НАЧАТЬ» стало, «Нажмите nto nSTART» Это сработало для меня.
Ответ №6:
Попробуйте использовать android:layout_width=»wrap_content» вместо android:layout_width=»0dp» и посмотреть идентификатор
Комментарии:
1. layout_width=»wrap_content» делает кнопки разной ширины
2. Затем попробуйте настроить настройку android:layout_height вручную, чтобы все кнопки имели одинаковую высоту и текст не обрезался!!
3. Если я установлю layout_height вручную, это сработает, но как насчет разных устройств?
4. ширина должна быть match_Parent..in этот случай
5. Попробуйте настроить размер шрифта, используя sp вместо dp. Это должно меняться в зависимости от устройства.