Есть ли способ в Android XML сделать ряд кнопок с шириной, установленной на самую широкую кнопку? - PullRequest
0 голосов
/ 13 января 2011

Есть ли способ объявить ряд кнопок в XML, чтобы все кнопки имели одинаковую ширину, равную ширине wrap_content самой широкой кнопки?Я знаком с хитростью установки всех значений ширины в 0 и присвоения им веса 1, но это не сработает, если для ширины родительского макета установлено значение wrap_content.Я не хочу устанавливать родительскую ширину в fill_parent, потому что я не хочу, чтобы кнопки растягивались больше, чем необходимо.

Единственный способ, которым я могу думать об этом, - это код (либо с логикой onMeasure в каждомкнопка, которая связывается с другими кнопками или с классом пользовательского макета).

Ответы [ 3 ]

0 голосов
/ 13 января 2011

Чтобы получить кнопки в строке в XML, вам нужно добавить кнопки с помощью LinearLayout и изменить ориентацию на горизонтальную, т.е.

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
</LinearLayout>

Что касается получения самой широкой кнопки и изменения всех других кнопок в соответствие, я не уверен, что вам понадобится какой-то метод в вашей активности, чтобы получить самую широкую кнопку, а затем программно установить все остальные кнопки быть таким же.

0 голосов
/ 13 января 2011

Просто выясните, какая у вас самая широкая кнопка, но для которой она соответствует горизонтальной ширине, и затем используйте layout_width = "match_parent" или "fill_parent" в <2.3. </p>

Это заставит их всех использовать назначенную ширину.

Если вы хотите сделать это программно, вам нужно выполнить итерацию по всем разделам, найти максимум, а затем выполнить итерацию снова и установить его.

0 голосов
/ 13 января 2011

Я думаю, вам нужно сделать это в коде.

Создание пользовательского класса макета было бы способом. Переопределите onMeasure () и сделайте так, чтобы он выглядел примерно так:

  1. Вызвать setLayoutParams для всех дочерних элементов, чтобы установить для layout_widths значение WRAP_CONTENT.
  2. Вызовите super.onMeasure ()
  3. Итерируйте дочерние представления, чтобы найти объект с наибольшим getMeasuredWidth ().
  4. Выполните итерации всех других дочерних представлений, вызывая setLayoutParams () с самой широкой шириной пикселя.
  5. Вызовите super.onMeasure () еще раз. :)

То, что должно работать, но я не буду ставить на это свою репутацию ... рад помочь вам, если это не сработает.

...