#android
#Android
Вопрос:
Я хочу центрировать группу кнопок по горизонтали и вертикали на дисплее.
Это то, что у меня есть сейчас:
Пользовательский RelativeLayout:
RelativeLayout xml_layout = (RelativeLayout) findViewById(R.id.custom_layout_id);
Я создаю кнопки программно и добавляю их в xml_layout:
xml_layout.addView(ib[i], lp);
Я думаю, что вместо этого я должен использовать ViewGroup, а затем добавить свои кнопки
для ViewGroup добавьте правила для центрирования ViewGroup
а затем добавьте ViewGroup в мой RelativeLayout.
Я пробовал это
ViewGroup vg;
vg.addView(ib[i], lp); //The local variable vg may not have been initialized
и это
ViewGroup vg = null;
vg.addView(ib[i], lp); //Runtime Error
Но это не работает.
Я новая теория:
- Создайте ViewGroup
- Добавьте мои кнопки в группу просмотра
- Добавьте ViewGroup в RelativeLayout
- Добавьте правила в ViewGroup, чтобы центрировать ее по горизонтали
и вертикали относительно RelativeLayout (переменная lp)
Но не знаю практики. Кто-нибудь может мне помочь?
Ответ №1:
Возможно, это наводит вас на мысль:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"
android:weightSum="5">
<Button
android:layout_width="0dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="ABC" />
<Button
android:layout_width="0dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="DEFG" />
<Button
android:layout_width="0dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="HI" />
<Button
android:layout_width="0dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="J" />
</LinearLayout>
Ответ №2:
Если вы хотите, чтобы кнопки как группа были центрированы, вам нужно добавить их в LinearLayout вместо RelativeLayout. Тогда вы можете использовать одни и те же параметры макета для каждого из них (WRAP_CONTENT / WRAP_CONTENT), и они не будут накладываться друг на друга и заслонять друг друга.
Для вашего LinearLayout задайте ему LayoutParams с помощью FILL_PARENT для ширины и высоты.
Всякий раз, когда вы используете LayoutParams, я рекомендую вам всегда указывать, какой тип LayoutParams, чтобы избежать проблем с приведением класса, которые могут быть тем, что с вами происходит. Например, параметры макета для каждой из ваших кнопок должны быть LinearLayout .LayoutParams, и параметры для вашего LinearLayout должны быть ViewGroup.Параметры компоновки.
Наконец, вы уже вызвали setContentView()? В этом представлении уже есть ваше RelativeLayout с идентификатором custom_layout_id?
Ответ №3:
ViewGroup vg = null
этого недостаточно, поскольку вы пытаетесь разыменовать значение null в следующей строке: vg.addView(ib[i], lp);
. Вместо этого создайте ViewGroup с помощью одного из его конструкторов. Самый простой подход заключается в том, чтобы сделать ViewGroup vg = new ViewGroup(this);
.