Android RelativeLayout, равный интервал?

Я использую Relative Layout для создания экрана калькулятора, и у меня есть ряд кнопок, помеченных 1, 2 и 3. Я хочу, чтобы они были равномерно распределены, но я не уверен, как это сделать с помощью Relative Layout.

Я привык использовать функцию android:layout_weight в LinearLayout и задавать каждой из них значение android:layout_width="fill_parent", а также layout_weight="1"

любой способ заставить это произойти на экране калькулятора (без указания DP или PX)

это то, что я настроил на данный момент, и они выровнены слева направо под TextView (экран вывода калькулятора). какие-либо предложения/решения для равномерного распределения пространства по ширине экрана?

    <TextView
android:id="@+id/textView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/edit_text"
android:layout_margin="6px"
/>

<Button
android:id="@+id/button1"
android:text="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView"
/>

<Button
android:id="@+id/button2"
android:text="2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView"
android:layout_toRightOf="@+id/button1"/>

<Button
android:id="@+id/button3"
android:text="3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView"
android:layout_toRightOf="@+id/button2"
/>

person kleaver    schedule 23.04.2011    source источник


Ответы (2)


Если вам нужен одинаковый интервал, вам не нужен RelativeLayout. Используйте LinearLayout, как вы предлагаете в своем вопросе. При необходимости поместите Buttons в LinearLayout и поместите LinearLayout в RelativeLayout.

person CommonsWare    schedule 23.04.2011

Проще всего было бы манипулировать представлением во время OnCreate().

Что-то типа:

OnCreate(Context ctx){
  int w = getWidth();
  int h = getHeight();
  Button B1 = findViewById(R.id.button1);
  B1.setWidth(w/3);
  --repeat for button2,3 textview--
}

Другой вариант — использовать TableLayout, где вы растягиваете столбцы и заставить кнопки заполнить parent. Это потребует от вас использования

<TableLayout    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:stretchColumns="0,1,2"
    android:layout_below="@+id/textView"> 
<TableRow><Button
android:id="@+id/button1"
android:text="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/><Button
android:id="@+id/button2"
android:text="2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</TableRow>
</TableLayout>
person Dr.J    schedule 23.04.2011
comment
J: Ваш второй подход не сработает — вы не можете переопределить ширину дочерних элементов TableRow. Первый может сработать, хотя я настроен скептически. - person CommonsWare; 25.04.2011
comment
На самом деле я использую это для игры с сеткой на основе tablelayout. Я создаю таблицу NxN, в которой каждая N строк состоит из N кнопок, где ширина каждой кнопки задается динамически. - person Dr.J; 25.04.2011