LinearLayout中的圆形按钮:垂直

时间:2013-07-24 01:11:04

标签: android android-layout android-linearlayout

我创建了自己的可绘制对象,我将其设置为图像按钮的背景。 (描述here

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval">
    <solid android:color="#A7BF1D"/> </shape>

我希望这些在屏幕一侧垂直间隔,所以我想使用android:layout_weight来实现这一点。 (描述here

<LinearLayout 
        android:id="@+id/left_bar"
        android:orientation="vertical"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:layout_weight="8">
        <Button
            android:id="@+id/btnCall"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="1"
            android:background="@drawable/btn_circle"            
            android:text="Call"
            android:textSize="12sp" />
       <Space
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="1"></Space>
        <Button
            android:id="@+id/btnSpeak"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="1"
            android:background="@drawable/btn_circle"
            android:text="Speak"
            android:textSize="12sp" />
       <Space
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="1"></Space>
        <Button
            android:id="@+id/btnRecordedMessage"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="1"
            android:background="@drawable/btn_circle"
            android:text="Recorded Message"
            android:textSize="12sp" />
        <Space
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="1"></Space>
        <Button
            android:id="@+id/btnSelectAll"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="1"
            android:background="@drawable/btn_circle"
            android:text="Select All Units"
            android:textSize="12sp" />
       <Space
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="1"></Space>
        <Button
            android:id="@+id/btnDeselectUnits"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="1"
            android:background="@drawable/btn_circle"
            android:text="Deselect Units"
            android:textSize="12sp" />
        <Space
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="1"></Space>
        <Button
            android:id="@+id/btnAnswer"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="1"
            android:background="@drawable/btn_circle"
            android:text="Answer"
            android:textSize="12sp" />
    </LinearLayout>

我做什么似乎无法让它们在任何屏幕尺寸上均匀分开,更不用说为每个屏幕尺寸进行缩放。我认为我的问题是我必须指定身高和数量。形成圆圈的宽度,但是一旦我这样做就会与layout_weight混淆(因为缺少更好的术语)'硬编码'。

我认为可以有一个6个圆形按钮的垂直布局,在屏幕上均匀间隔,但我无法弄清楚如何?我也试过没有<Space>,而是在<Button>添加了填充。

enter image description here enter image description here

3 个答案:

答案 0 :(得分:0)

好。例如,LinearLayouts子元素中的所有layout_widths都设置为match_parent。在第一个孩子渲染之后,那里将没有其他任何空间,因为它将占用所有空间。

其次,我强烈建议不要使用所有标签。相反,我只会为你的按钮设置填充(或边距)。

答案 1 :(得分:0)

如果我理解正确,您希望View内的LinearLayoutweight间隔开。如果是,则android:layout_weight应位于每个View而不是LinearLayoutLinearLayout会有android:weightSum,而View每个weight都会有weightSum,但如果你想要它们,你甚至不需要<LinearLayout android:id="@+id/left_bar" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="8"> // Try removing this and add weights to your views 间隔均匀。

{{1}}

我不知道这是否能解决您的问题,但我会从那个

开始

答案 2 :(得分:0)

我遇到了同样的问题。我必须在水平LinearLayout中有4个圆形按钮,间距相等。

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginBottom="10dp" >

        <Button
            android:id="@+id/btn1"
            style="@style/BotonCircular"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.2"
            android:background="@drawable/boton_circulo_negro" />
        <View 
            android:layout_weight="0.033"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            />

        <Button
            android:id="@+id/btn2"
            style="@style/BotonCircular"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.2"
            android:background="@drawable/boton_circulo_negro" />
        <View 
            android:layout_weight="0.033"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            />
        <Button
            android:id="@+id/btn3"
            style="@style/BotonCircular"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.2"
            android:background="@drawable/boton_circulo_negro" />
        <View 
            android:layout_weight="0.033"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            />
        <Button
            android:id="@+id/btn4"
            style="@style/BotonCircular"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.2"
            android:background="@drawable/boton_circulo_negro" />

    </LinearLayout>

为了使它们具有相同的高度,我将此代码放在onCreate on my Activity

final Button btn1 = (Button) findViewById(R.id.btn1);
final Button btn2 = (Button) findViewById(R.id.btn2);
final Button btn3 = (Button) findViewById(R.id.btn3);
final Button btn4 = (Button) findViewById(R.id.btn4);
ViewTreeObserver vto = btn1.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

    @Override
    public void onGlobalLayout() {
        btn1.setHeight(btn1.getWidth()); 
        btn2.setHeight(btn1.getWidth());    
        btn3.setHeight(btn1.getWidth());
        btn4.setHeight(btn1.getWidth());
    }
});

希望这可以帮助有同样问题的人。