Android:Center Buttons horiz。和垂直在ViewGroup中

时间:2011-04-09 20:46:17

标签: 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

但它不起作用。

我新理论:

  1. 创建ViewGroup
  2. 将我的按钮添加到ViewGroup
  3. 将ViewGroup添加到RelativeLayout
  4. 向ViewGroup添加规则以使其水平居中 和垂直相对于RelativeLayout(变量lp)
  5. 但不知道这种做法。 有人能帮助我吗?

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

如果您希望将按钮作为一个组居中,则需要将它们添加到LinearLayout而不是RelativeLayout。然后你可以为它们每个使用相同的布局参数(WRAP_CONTENT / WRAP_CONTENT),它们不会叠加在一起并相互模糊。

对于LinearLayout,请为其设置宽度和高度为FILL_PARENT的LayoutParams。

每当你使用LayoutParams时,我建议你总是指定哪种LayoutParams,以避免类转换问题,这可能是你发生的事情。例如,每个按钮的布局参数应为LinearLayout.LayoutParams,而LinearLayout的参数应为ViewGroup.LayoutParams。

最后,你已经调用了setContentView()吗?该视图是否已在其中包含id为custom_layout_id的RelativeLayout?

答案 2 :(得分:0)

ViewGroup vg = null是不够的,因为您尝试在下一行中取消引用null:vg.addView(ib[i], lp);。而是使用its constructors之一创建ViewGroup。最简单的方法是ViewGroup vg = new ViewGroup(this);