【问题标题】:layout_weight not adjusting size properlylayout_weight 未正确调整大小
【发布时间】:2014-11-06 18:45:56
【问题描述】:

我正在尝试制作一个计算器应用程序。我有一个外部linearlayout,它是垂直方向,然后有嵌套的线性布局,我的按钮将在水平方向。只有最后一个嵌套的线性布局没有正确调整按钮的宽度,因为我希望“0”按钮占据一半宽度和“。”和 '=' 按钮占据四分之一的宽度。我给 '=' 按钮的布局权重为 0.5 和 '.' & '=' 按钮的布局权重为 0.25,但它仍然无法正常工作。

这是图形布局的截图:

XML 代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" 
android:background="#000000"
android:weightSum="1">

<TextView 
    android:text="0"
    android:layout_width="wrap_content"
    android:layout_weight = "0.25"
    android:layout_height="0dp"
    android:textSize="40sp"
    android:layout_gravity="right"
    android:textColor="#FFFFFF"
    android:id="@+id/tvDisplay"/>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp" 
    android:orientation="horizontal"
    android:layout_weight="0.15"
    android:weightSum="1">

   <Button
       android:id="@+id/bClear"
       android:layout_width="wrap_content"
       android:layout_height="fill_parent"
       android:layout_margin="0.2dp"
       android:layout_weight="0.25"
       android:background="#FFFFFF"
       android:text="C"
       android:textSize="30sp" />

    <Button
        android:id="@+id/bChangeSign"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_margin="0.2dp"
        android:layout_weight="0.25"
        android:background="#FFFFFF"
        android:text="+/-"
        android:textSize="30sp" />

     <Button
         android:id="@+id/bPercent"
         android:layout_width="wrap_content"
         android:layout_height="fill_parent"
         android:layout_margin="0.2dp"
         android:layout_weight="0.25"
         android:background="#FFFFFF"
         android:text="%"
         android:textSize="30sp" />

     <Button
         android:id="@+id/bDivide"
         android:layout_width="wrap_content"
         android:layout_height="fill_parent"
         android:layout_margin="0.2dp"
         android:layout_weight="0.25"
         android:background="#FF9900"
         android:text="/"
         android:textSize="30sp" />

</LinearLayout>

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp" 
    android:orientation="horizontal"
    android:layout_weight="0.15">

    <Button 
        android:text="7"
        android:background="#FFFFFF"
        android:textSize="30sp"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_margin="0.2dp"
        android:layout_weight="0.25"
        android:id="@+id/b7"/>

   <Button 
        android:text="8"
        android:background="#FFFFFF"
        android:textSize="30sp"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_margin="0.2dp"
        android:layout_weight="0.25"
        android:id="@+id/b8"/>

    <Button 
        android:text="9"
        android:background="#FFFFFF"
        android:textSize="30sp"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_margin="0.2dp"
        android:layout_weight="0.25"
        android:id="@+id/b9"/>

    <Button
        android:id="@+id/bMultiply"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_margin="0.2dp"
        android:layout_weight="0.25"
        android:background="#FF9900"
        android:text="x"
        android:textSize="30sp" />

</LinearLayout>

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp" 
    android:orientation="horizontal"
    android:layout_weight="0.15">

   <Button 
        android:text="4"
        android:background="#FFFFFF"
        android:textSize="30sp"
        android:layout_width="wrap_content"
         android:layout_height="fill_parent"
         android:layout_margin="0.2dp"
         android:layout_weight="0.25"
        android:id="@+id/b4"/>

    <Button 
        android:text="5"
        android:background="#FFFFFF"
        android:textSize="30sp"
        android:layout_width="wrap_content"
         android:layout_height="fill_parent"
         android:layout_margin="0.2dp"
         android:layout_weight="0.25"
        android:id="@+id/b5" />

     <Button 
        android:text="6"
        android:background="#FFFFFF"
        android:textSize="30sp"
       android:layout_width="wrap_content"
         android:layout_height="fill_parent"
         android:layout_margin="0.2dp"
         android:layout_weight="0.25"
        android:id="@+id/b6" />

     <Button 
        android:text="-"
        android:background="#FF9900"
        android:textSize="30sp"
        android:layout_width="wrap_content"
         android:layout_height="fill_parent"
         android:layout_margin="0.2dp"
         android:layout_weight="0.25"
        android:id="@+id/bSubtract"
        />

</LinearLayout>

      <LinearLayout
   android:layout_width="match_parent"
    android:layout_height="0dp" 
    android:orientation="horizontal"
    android:layout_weight="0.15">

    <Button 
        android:text="1"
        android:background="#FFFFFF"
        android:textSize="30sp"
        android:layout_width="wrap_content"
         android:layout_height="fill_parent"
         android:layout_margin="0.2dp"
         android:layout_weight="0.25"
        android:id="@+id/b1" />

   <Button 
        android:text="2"
        android:background="#FFFFFF"
        android:textSize="30sp"
       android:layout_width="wrap_content"
         android:layout_height="fill_parent"
         android:layout_margin="0.2dp"
         android:layout_weight="0.25"
        android:id="@+id/b2" />

    <Button 
        android:text="3"
        android:background="#FFFFFF"
        android:textSize="30sp"
        android:layout_width="wrap_content"
         android:layout_height="fill_parent"
         android:layout_margin="0.2dp"
         android:layout_weight="0.25"
        android:id="@+id/b3" />

     <Button 
        android:text="+"
        android:background="#FF9900"
        android:textSize="30sp"
       android:layout_width="wrap_content"
         android:layout_height="fill_parent"
         android:layout_margin="0.2dp"
         android:layout_weight="0.25"
        android:id="@+id/bPlus" />

</LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="0.15"
            android:orientation="horizontal" 

            <Button
                android:id="@+id/b0"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:layout_margin="0.2dp"
                android:layout_weight="0.5"
                android:background="#FFFFFF"
                android:text="0"
                android:textSize="30sp" />

            <Button
                android:id="@+id/bDecimal"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:layout_margin="0.2dp"
                android:layout_weight="0.25"
                android:background="#FFFFFF"
                android:text="."
                android:textSize="30sp" />

            <Button
                android:id="@+id/bEquals"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:layout_margin="0.2dp"
                android:layout_weight="0.25"
                android:background="#FF9900"
                android:text="="
                android:textSize="30sp" />
        </LinearLayout>

【问题讨论】:

  • 尝试在这 3 个按钮上将 android:layout_width 更改为 0dp。有时,Android 布局的东西可能会像这样愚蠢。让我知道它是否解决了问题 - 如果解决了,我会将其作为答案发布。
  • 我也尝试将线性布局的权重总和设为 1,但它仍然不起作用。
  • @Alex K 谢谢它的工作原理!你能解释一下为什么吗?
  • 当然。我将把它作为答案并在那里解释:)

标签: java android android-layout-weight


【解决方案1】:

这个问题的解决方案非常简单。

Android 很棒,开发它的工具也很棒,但是当你遇到这样的行为时,你会意识到它肯定还不完美。

继续将底部 3 个按钮中的 android:layout_width 更改为

android:layout_width="0dp"

现在,这就是向我解释的方式。 layout_weight 属性试图平衡宽度以达到正确的比例,但它考虑了它试图平衡的按钮的宽度。通过将宽度设置为绝对没有 (0dp),您可以消除任何可能干扰layout_weigth 尝试平衡比率的宽度。基本上,这样就没有其他值可以摆脱宽度的变化。

我希望这会有所帮助。祝你好运:)

【讨论】:

  • android:width="0dp" 帮助
【解决方案2】:

好好测试

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#000000"
android:orientation="vertical"
android:weightSum="1" >

<TextView
    android:id="@+id/tvDisplay"
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_gravity="right"
    android:layout_weight="0.25"
    android:text="0"
    android:textColor="#FFFFFF"
    android:textSize="40sp" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.15"
    android:orientation="horizontal"
    android:weightSum="1" >

    <Button
        android:id="@+id/bClear"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="0.1dp"
        android:layout_weight="0.25"
        android:background="#FFFFFF"
        android:text="C"
        android:textSize="30sp" />

    <Button
        android:id="@+id/bChangeSign"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="0.1dp"
        android:layout_weight="0.25"
        android:background="#FFFFFF"
        android:text="+/-"
        android:textSize="30sp" />

    <Button
        android:id="@+id/bPercent"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="0.1dp"
        android:layout_weight="0.25"
        android:background="#FFFFFF"
        android:text="%"
        android:textSize="30sp" />

    <Button
        android:id="@+id/bDivide"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="0.1dp"
        android:layout_weight="0.25"
        android:background="#FF9900"
        android:text="/"
        android:textSize="30sp" />
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.15"
    android:orientation="horizontal"
    android:weightSum="1" >

    <Button
        android:id="@+id/b7"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="0.1dp"
        android:layout_weight="0.25"
        android:background="#FFFFFF"
        android:text="7"
        android:textSize="30sp" />

    <Button
        android:id="@+id/b8"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="0.1dp"
        android:layout_weight="0.25"
        android:background="#FFFFFF"
        android:text="8"
        android:textSize="30sp" />

    <Button
        android:id="@+id/b9"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="0.1dp"
        android:layout_weight="0.25"
        android:background="#FFFFFF"
        android:text="9"
        android:textSize="30sp" />

    <Button
        android:id="@+id/bMultiply"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="0.1dp"
        android:layout_weight="0.25"
        android:background="#FF9900"
        android:text="x"
        android:textSize="30sp" />
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.15"
    android:orientation="horizontal"
    android:weightSum="1" >

    <Button
        android:id="@+id/b4"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="0.1dp"
        android:layout_weight="0.25"
        android:background="#FFFFFF"
        android:text="4"
        android:textSize="30sp" />

    <Button
        android:id="@+id/b5"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="0.1dp"
        android:layout_weight="0.25"
        android:background="#FFFFFF"
        android:text="5"
        android:textSize="30sp" />

    <Button
        android:id="@+id/b6"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="0.1dp"
        android:layout_weight="0.25"
        android:background="#FFFFFF"
        android:text="6"
        android:textSize="30sp" />

    <Button
        android:id="@+id/bSubtract"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="0.1dp"
        android:layout_weight="0.25"
        android:background="#FF9900"
        android:text="-"
        android:textSize="30sp" />
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.15"
    android:orientation="horizontal"
    android:weightSum="1" >

    <Button
        android:id="@+id/b1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="0.1dp"
        android:layout_weight="0.25"
        android:background="#FFFFFF"
        android:text="1"
        android:textSize="30sp" />

    <Button
        android:id="@+id/b2"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="0.1dp"
        android:layout_weight="0.25"
        android:background="#FFFFFF"
        android:text="2"
        android:textSize="30sp" />

    <Button
        android:id="@+id/b3"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="0.1dp"
        android:layout_weight="0.25"
        android:background="#FFFFFF"
        android:text="3"
        android:textSize="30sp" />

    <Button
        android:id="@+id/bPlus"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="0.1dp"
        android:layout_weight="0.25"
        android:background="#FF9900"
        android:text="+"
        android:textSize="30sp" />
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="0.15"
    android:orientation="horizontal"
    android:weightSum="1" >

    <Button
        android:id="@+id/b0"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="0.1dp"
        android:layout_weight="0.5"
        android:background="#FFFFFF"
        android:text="0"
        android:textSize="30sp" />

    <Button
        android:id="@+id/bDecimal"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="0.1dp"
        android:layout_weight="0.25"
        android:background="#FFFFFF"
        android:text="."
        android:textSize="30sp" />

    <Button
        android:id="@+id/bEquals"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="0.1dp"
        android:layout_weight="0.25"
        android:background="#FF9900"
        android:text="="
        android:textSize="30sp" />
</LinearLayout>

【讨论】:

    猜你喜欢
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 2021-01-11
    相关资源
    最近更新 更多