如何在android中垂直平移按钮/布局?

问题描述:

我有一个像计算器一样的布局,每行有4个按钮,有5行。我使用LinearLayout创建了这些行。我在LinearLayout的每个按钮中使用android:layout_weight="1"来完全填充每行的宽度。但我不知道如何以这种方式填充垂直空间。后五排有残留在底部普通XDPI屏幕(的Nexus 4)如何在android中垂直平移按钮/布局?

<LinearLayout 
     android:id="@+id/first_row" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/entry"> 

    <Button 
      android:id="@+id/seven" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="7" 
      android:textColor="@color/Blue_ICS" 
      android:textSize="@dimen/button_text_size" 
      /> 

    <Button 
      android:id="@+id/eight" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="8" 
      android:textColor="@color/Blue_ICS" 

      android:textSize="@dimen/button_text_size"/> 

    <Button 
      android:id="@+id/nine" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="9" 

      android:textColor="@color/Blue_ICS" 
      android:textSize="@dimen/button_text_size"/> 

    <Button 
      android:id="@+id/plus" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="+" 
      android:textColor="@color/Blue_ICS" 
      android:textSize="@dimen/button_text_size"/> 
</LinearLayout> 

空间布局太长,所以我在这里分享仅第一行代码,其余行是相同的了。

+0

你想填充你的行高度相等吗? –

+0

您是否尝试更改'LinearLayout'高度属性?:'android:layout_height =“match_parent”' –

+0

查看此链接(http://*.com/a/8105131/2345913) – CRUSADER

您应该使用TableLayout,更换所有的LinearLayout为的TableRow。属性stretchColumns使您可以制作具有相同宽度的所有列,而无需使用重量。这样你可以使用重量来处理TableRow的高度。

在下面的例子中,我甚至添加了一些空格(空的LinearLayout)来显示结果,如计算器屏幕。我希望这是你正在寻找的! (你必须改变IDS)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/outerLayout" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 

<LinearLayout 
    android:id="@+id/screenLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="150dp" 
    android:orientation="vertical"></LinearLayout> 

<TableLayout 
    android:id="@+id/myLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_below="@+id/screenLayout" 
    android:stretchColumns="*" > 

    <TableRow 
     android:id="@+id/first_row" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" > 

     <Button 
      android:id="@+id/seven" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="7" /> 

     <Button 
      android:id="@+id/eight" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="8" /> 

     <Button 
      android:id="@+id/nine" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="9" /> 

     <Button 
      android:id="@+id/plus" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="+" /> 
    </TableRow> 

    <TableRow 
     android:id="@+id/first_row" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" > 

     <Button 
      android:id="@+id/seven" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="4" /> 

     <Button 
      android:id="@+id/eight" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="5" /> 

     <Button 
      android:id="@+id/nine" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="6" /> 

     <Button 
      android:id="@+id/plus" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="-" /> 
    </TableRow> 

    <TableRow 
     android:id="@+id/first_row" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" > 

     <Button 
      android:id="@+id/seven" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="1" /> 

     <Button 
      android:id="@+id/eight" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="2" /> 

     <Button 
      android:id="@+id/nine" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="3" /> 

     <Button 
      android:id="@+id/plus" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="*" /> 
    </TableRow> 

    <TableRow 
     android:id="@+id/first_row" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" > 

     <Button 
      android:id="@+id/seven" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="0" /> 

     <Button 
      android:id="@+id/eight" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="," /> 

     <Button 
      android:id="@+id/nine" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="/" /> 

     <Button 
      android:id="@+id/plus" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:text="=" /> 
    </TableRow> 
</TableLayout> 

</RelativeLayout> 

结果:

enter image description here

+0

是的,这将有助于平等地跨越整个布局。谢谢 – Vins

+0

很高兴帮助! :) –

如果您的父母也是LinearLayout,您也可以在您的行上使用android:layout_weight="1"

<!--parent--> 
<LinearLayout 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:orientation="vertical"> 

    <include 
     android:layout="@layout/myrow" 
     android:layout_height="0dp" 
     android:layout_width="match_parent" 
     android:layout_weight="1"/> 

    <include 
     android:layout="@layout/myrow" 
     android:layout_height="0dp" 
     android:layout_width="match_parent" 
     android:layout_weight="1"/> 

    <include 
     android:layout="@layout/myrow" 
     android:layout_height="0dp" 
     android:layout_width="match_parent" 
     android:layout_weight="1"/> 

    <include 
     android:layout="@layout/myrow" 
     android:layout_height="0dp" 
     android:layout_width="match_parent" 
     android:layout_weight="1"/> 

    <include 
     android:layout="@layout/myrow" 
     android:layout_height="0dp" 
     android:layout_width="match_parent" 
     android:layout_weight="1"/> 


</LinearLayout> 

没有测试它,但它应该工作。

希望这有助于

试试这个:

<LinearLayout 
     android:id="@+id/first_row" 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"> 
     ... 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/first_row" 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"> 
     ... 
    </LinearLayout> 
    ... 

等。 将所有这些转换为垂直方向的线性布局

您可以尝试以下...(PseudoCode):(希望你理解逻辑...这工作..它在任何屏幕密度上延伸按钮)

 <linearlayout=Outer 
      horizontal 
      weightSum=5> 
       <sub linearLayout=innerRow1 
        vertical 
        weightSum=1> 
        <enter all the buttons with weight as ".25"> 
       </sub innerRow1> 
       <sub linearLayout=innerRow2 
        vertical 
        weightSum=1> 
        <enter all the buttons with weight as ".25"> 
       </sub innerRow2> 
       <sub linearLayout=innerRow3 
        vertical 
        weightSum=1> 
        <enter all the buttons with weight as ".25"> 
       </sub innerRow3> 
      <sub linearLayout=innerRow4 
        vertical 
        weightSum=1> 
        <enter all the buttons with weight as ".25"> 
       </sub innerRow4> 
      <sub linearLayout=innerRow5 
        vertical 
        weightSum=1> 
        <enter all the buttons with weight as ".25"> 
       </sub innerRow5> 
+0

我的根布局是RelativeLayout,所以我不能使用重量总和我认为 – Vins

+0

你可以用layout_weight尝试它,或者你可以把这个线性布局放在你的RelativeLayout @vins中。 – amalBit