Android Layout_weight

时间:2011-02-13 21:03:17

标签: android layout

我是Android开发的新手,我有一个关于在线性布局中设置权重的问题。

我正在尝试使用两个自定义按钮和自定义编辑文本创建一行。编辑文本应占用与其内容相同的空间,并且两个按钮应水平扩展以填充行中的其余可用空间。像这样......

| [#Button++#] [#Button--#] [et] |

经过几次尝试,这是我能得到的最接近的东西,尽管看起来过于复杂。

| [Button] [Button] [###ET###] |

<LinearLayout 
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal|center_vertical"
    android:layout_weight="1"
    >

    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_horizontal|center_vertical"
        >
        <RelativeLayout 
            android:id="@+id/btn_plus_container" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"
            >
            <ImageButton 
                android:layout_height="wrap_content"
                android:layout_width="fill_parent" 
                android:id="@+id/btn_plus" 
                android:background="@drawable/btn"
                android:layout_centerInParent="true"
                ></ImageButton>
            <TextView 
                android:textColor="#FAFAF4"
                android:id="@+id/tv_dice_plus" 
                android:text="@string/tv_plus" 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                ></TextView>
        </RelativeLayout>
    </LinearLayout>
    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_horizontal|center_vertical"
        >
        <RelativeLayout 
            android:id="@+id/btn_minus_container" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"
            >
            <ImageButton 
                android:layout_height="wrap_content"
                android:layout_width="fill_parent" 
                android:id="@+id/btn_minus" 
                android:background="@drawable/btn"
                android:layout_centerInParent="true"
                ></ImageButton>
            <TextView 
                android:textColor="#FAFAF4"
                android:id="@+id/btn_minus" 
                android:text="@string/tv_minus" 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                ></TextView>
        </RelativeLayout>
    </LinearLayout>
    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_horizontal|center_vertical"
        >
        <EditText 
            android:textColor="#FAFAF4"
            android:text="@string/et_output" 
            android:id="@+id/et_output" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:inputType="number"
            android:selectAllOnFocus="true" 
            android:minWidth="50sp"         
            android:maxWidth="50sp"
            android:background="@drawable/tv_black_background3"
            android:textColorHighlight="#c30505"
            ></EditText>
    </LinearLayout>
</LinearLayout>

据我所知设置[android:layout_weight =&#34; 2&#34;]为线性布局按住按钮应该让它们比编辑文本占用更多空间,但它对我来说恰恰相反,制作它们两者都是一半。

| [Btn] [Btn] [#####et#####] |

我尝试了很多不同的组合,我甚至不记得它们,但没有一种能够奏效。

8 个答案:

答案 0 :(得分:213)

它不起作用,因为您使用fill_parent作为宽度。当总和大于LinearLayout时,权重用于分配剩余的空白空间带走空间。将您的宽度设置为 0dip ,它将起作用。

答案 1 :(得分:14)

如果您没有将固定值附加到宽度上,可以使用

android:Layout_weight,如fill_parent等。

做这样的事情:

<Button>

Android:layout_width="0dp"
Android:layout_weight=1

-----other parameters
</Button>

答案 2 :(得分:7)

这样想,会更简单

如果您有3个按钮,它们的权重相应为1,3,1,它将像HTML中的表一样工作

为该行提供5个部分:按钮1为1个部分,按钮2为3个部分,按钮1为1个部分

答案 3 :(得分:3)

在linearLayout中设置WeightSum = 2;

并将重量分配给它的孩子,因为你希望它们显示..我已经给予了体重=&#34; 1&#34;对孩子来说。两者都会分配一半。

 <LinearLayout
    android:id="@+id/linear1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="2"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/ring_oss"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/ring_oss" />

    <ImageView
        android:id="@+id/maila_oss"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/maila_oss" />
</LinearLayout>

答案 4 :(得分:2)

权重值0-1与权重值成比例地共享可用空间的分布(在设置layout_width =“0px”之后)。查看未指定重量的元素(无重量输入)得到重量0,这意味着它们不会膨胀。

不需要重量条目的简单替代方法是将选取框附加到带有文本的视图 它告诉它从文本(wrap_content)所需的最小值扩展到可用的空间 EditText上:         机器人:layout_width = “WRAP_CONTENT”         机器人:ellipsize = “字幕”

答案 5 :(得分:0)

我想将EditText的宽度设置为wrap_content并将两个按钮放入宽度为LinearLayout且权重设置为1的fill_parent

答案 6 :(得分:0)

我发现的另一个原因(听起来很模糊)。以下不起作用。

  

LinearLayout vertical

     
    

LinearLayout height fillparent + weight

         

LinearLayout height fillparent + weight

         

LinearLayout height fillparent + weight

  
     

EndLinearLayout

工作是什么

  

RelativeLayout的

     
    

LinearLayout vertical

         
      

LinearLayout height fillparent + weight

             

LinearLayout height fillparent + weight

             

LinearLayout height fillparent + weight

    
         

EndLinearLayout

  
     

EndRelativeLayout

使用Linear的根布局听起来很模糊,而且它下面的权重不起作用。当我说&#34;没有工作&#34;时,我的意思是,在我查看各种分辨率之间的图形布局后,屏幕的一致性打破了很长时间。

答案 7 :(得分:0)

    Worksheet sheet = (Worksheet)workBookIn.Sheets[1];
    Range excelRange = sheet.UsedRange;
    object[,] valueArray = (object[,])excelRange.get_Value(
        XlRangeValueDataType.xlRangeValueDefault);

    XmlSerializer xs = new XmlSerializer(valueArray.GetType());

    using(StringWriter sw = new StringWriter())
    using(XmlWriter writer = XmlWriter.Create(sw))
    {
         xs.Serialize(writer, valueArray);
         var xml = sw.ToString(); // Your XML
    }