无法在XML android中设置按钮的宽度

时间:2014-03-07 20:11:12

标签: android xml android-layout

我正在尝试在平板电脑应用上设置一些按钮。为了配置,我们有6个按钮,由数据库设置为可见或GONE。在我们当前的应用程序中,我们只有一个按钮设置为GONE。问题是我想将剩余按钮的宽度设置为小于屏幕的宽度,但我无法找到一种方法来做到这一点。

这是原始XML布局(设置2行3个宽度相等的按钮):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layoutSubjectMenuMain"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/backgroundcolor"
android:orientation="horizontal" >
   <LinearLayout
    android:id="@+id/layoutButtons"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_marginTop="5px"
    android:orientation="vertical"
    android:paddingTop="5dp" >

    <LinearLayout
        android:id="@+id/layoutButtons_Row1"
        android:layout_width="fill_parent"
        android:layout_height="75dp"
        android:layout_margin="5px"
        android:layout_marginLeft="50px"
        android:layout_marginRight="50px"
        android:gravity="center" >

        <Button
            android:id="@+id/btn1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_marginLeft="5px"
            android:layout_marginRight="5px"
            android:layout_weight="1"
            android:text="Infusionxxxxxx"
            android:textSize="20sp" 
            android:gravity="center"/>

        <Button
            android:id="@+id/btn2"
            android:layout_width="0px"
            android:layout_height="fill_parent"
            android:layout_marginLeft="5px"
            android:layout_marginRight="5px"
            android:layout_weight="1"
            android:text="Bleed Episodexxx"
            android:textSize="20sp" />

        <Button
            android:id="@+id/btn3"
            android:layout_width="10px"
            android:layout_height="fill_parent"
            android:layout_marginLeft="5px"
            android:layout_marginRight="5px"
            android:layout_weight="1"
            android:text="Untoward Eventxxxx"
            android:textSize="20sp" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/layoutButtons_Row2"
        android:layout_width="fill_parent"
        android:layout_height="75dp"
        android:layout_margin="5px"
        android:layout_weight="1"
        android:gravity="center"
        android:visibility="visible" >

        <Button
            android:id="@+id/btn4"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_marginLeft="5px"
            android:layout_marginRight="5px"
            android:layout_weight="1"
            android:text="Medication / Therapyxxxx"
            android:textSize="20sp" />

        <Button
            android:id="@+id/btn5"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_marginLeft="5px"
            android:layout_marginRight="5px"
            android:layout_weight="1"
            android:text="Non-Study Visitxxxx"
            android:textSize="20sp" />

        <Button
            android:id="@+id/btn6"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_marginLeft="5px"
            android:layout_marginRight="5px"
            android:layout_weight="1"
            android:text="Questionnairexxxx"
            android:textSize="20sp" />

    </LinearLayout>
</LinearLayout>


</RelativeLayout>

如果我尝试将按钮的宽度属性设置为100dp,则没有任何反应。删除权重属性不会减小宽度。如果我尝试设置线性布局的宽度属性,则无法减小宽度。

我们可以做些什么来改变剩余按钮的宽度(@id \ btn1)它当前占用了整个宽度,我们希望减少它。

3 个答案:

答案 0 :(得分:0)

设置layout_width = "0dp"
然后使用layout_weight下的Button字段。您可以按以下方式给出每个Button的比例:

android:layout_weight = "1"

获取屏幕尺寸并相应地设置按钮宽度:

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

请注意,getSize()是在API级别13中引入的。

答案 1 :(得分:0)

你可以在你的oncreate方法中使用它:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
this.ancho = metrics.heightPixels;
this.largo = metrics.widthPixels;

这将给出屏幕的宽度,并且你可以将你的按钮的特性放在java代码下。

:d

答案 2 :(得分:0)

如果将可见性设置为View.INVISIBLE而不是GONE,则此布局将起作用。您可以通过为每个按钮设置LinearLayout的边距或填充来控制按钮之间的距离。您可以通过更改每行的LinerarLayout的填充或边距来控制两行之间的距离。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layoutSubjectMenuMain"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:orientation="vertical"
android:padding="5dp" >

<LinearLayout
    android:id="@+id/layoutButtons"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="5px"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="5dp"
    android:paddingTop="5dp" >

    <LinearLayout
        android:id="@+id/layoutButtons_Row1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal" >

        <LinearLayout
            android:id="@+id/jj"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1" >

            <Button
                android:id="@+id/btn1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="Infusionxxxxxx"
                android:textSize="20sp" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/kk"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:visibility="invisible" >

            <Button
                android:id="@+id/btn2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Bleed Episodexxx"
                android:textSize="20sp" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/ll"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:visibility="invisible" >

            <Button
                android:id="@+id/btn3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Untoward Eventxxxx"
                android:textSize="20sp" />
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/layoutButtons_Row2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="5dp"
        android:visibility="visible" >

        <LinearLayout
            android:id="@+id/aa"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1" >

            <Button
                android:id="@+id/btn4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Medication / Therapyxxxx"
                android:textSize="20sp" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/bb"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1" >

            <Button
                android:id="@+id/btn5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Non-Study Visitxxxx"
                android:textSize="20sp" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/cc"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1" >

            <Button
                android:id="@+id/btn6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Questionnairexxxx"
                android:textSize="20sp" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>