2016-08-20 91 views
0

我正面臨着使佈局看起來不錯的麻煩。用一個GridLayout來計算一個計算器

爲了理解基礎知識,我決定創建一個簡單的計算器應用程序。
所以,我使用嵌套在LinearLayout中的GridLayout將按鈕放置在文本字段下。

這是我的佈局的來源。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:weightSum="100"> 

    <TextView 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     android:text="0" 
     android:layout_weight="30"/> 

    <GridLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:columnCount="4" 
     android:rowCount="5" 
     android:orientation="horizontal" 
     android:useDefaultMargins="false" 
     android:layout_weight="70"> 

     <Button 
      android:text="C" /> 

     <Button 
      android:text="BS" /> 

     <Button 
      android:text="/" /> 

     <Button 
      android:text="x" /> 

     <Button 
      android:text="7" /> 

     <Button 
      android:text="8" /> 

     <Button 
      android:text="9" /> 

     <Button 
      android:text="-" /> 

     <Button 
      android:text="4" /> 

     <Button 
      android:text="5" /> 

     <Button 
      android:text="6" /> 

     <Button 
      android:text="+" /> 

     <Button 
      android:text="1" /> 

     <Button 
      android:text="2" /> 

     <Button 
      android:text="3" /> 

     <Button 
      android:layout_gravity="fill" 
      android:layout_rowSpan="2" 
      android:text="=" /> 
     <Button 
      android:layout_gravity="fill" 
      android:layout_columnSpan="2" 
      android:text="0" /> 
     <Button 
      android:text="." /> 
    </GridLayout> 

</LinearLayout> 

如何使此佈局填充屏幕?

current app

,讓我的應用程序看起來像這樣

want to look like

盼望快速解答。

[編輯]:所以,現在情況會好一些,但我有新的問題。 現在我的主要活動是這樣的

this

相當不錯的,在我看來,不過:

  1. 如何在鍵盤的右側刪除空的空間?
  2. 如何使鍵盤和文本視圖分別佔用屏幕的70%和30%?

此外,新的佈局代碼:

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="android.calcandroid.MainActivity"> 

    <TextView 
     android:background="@drawable/shape" 
     android:layout_height="match_parent" 
     android:layout_width="match_parent" 
     android:text="0" 
     android:layout_above="@+id/gridLayout" /> 

    <GridLayout 
     android:id="@+id/gridLayout" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_alignParentBottom="true" 
     android:columnCount="4" 
     android:rowCount="5" 
     android:orientation="horizontal" 
     android:useDefaultMargins="false"> 

     <Button 
      android:background="@drawable/shape" 
      android:text="C" /> 

     <Button 
      android:background="@drawable/shape" 
      android:text="BS" /> 

     <Button 
      android:background="@drawable/shape" 
      android:text="/" /> 

     <Button 
      android:background="@drawable/shape" 
      android:text="x" /> 

     <Button 
      android:background="@drawable/shape" 
      android:text="7" /> 

     <Button 
      android:background="@drawable/shape" 
      android:text="8" /> 

     <Button 
      android:background="@drawable/shape" 
      android:text="9" /> 

     <Button 
      android:background="@drawable/shape" 
      android:text="-" /> 

     <Button 
      android:background="@drawable/shape" 
      android:text="4" /> 

     <Button 
      android:background="@drawable/shape" 
      android:text="5" /> 

     <Button 
      android:background="@drawable/shape" 
      android:text="6" /> 

     <Button 
      android:background="@drawable/shape" 
      android:text="+" /> 

     <Button 
      android:background="@drawable/shape" 
      android:text="1" /> 

     <Button 
      android:background="@drawable/shape" 
      android:text="2" /> 

     <Button 
      android:background="@drawable/shape" 
      android:text="3" /> 

     <Button 
      android:background="@drawable/shape" 
      android:layout_gravity="fill_vertical" 
      android:layout_rowSpan="2" 
      android:text="=" /> 
     <Button 
      android:background="@drawable/shape" 
      android:layout_gravity="fill_horizontal" 
      android:layout_columnSpan="2" 
      android:text="0" /> 
     <Button 
      android:background="@drawable/shape" 
      android:text="." /> 
    </GridLayout> 

</RelativeLayout> 
+0

嘗試使用TableLayout。然後你可以拉伸列以適應屏幕的寬度 –

+0

而網格無法做到這一點? – likeanowl

+0

對於計算器應用程序,GridView或GridLayout將會非常完美。 –

回答

0

得到相當接近。不知道如何處理垂直分隔線。出於某種原因,在每行跨越的每列之間放置一個1dp視圖會導致GridLayout擴展整個視圖。

,並利用這一點,你需要爲您的支持庫版本

compile "com.android.support:gridlayout-v7:<support library number>" 

emulator

顏色這種依賴性。XML

<color name="calcAccent">#ef6c00</color> 

styles.xml

<style name="calcAction"> 
    <item name="android:background">#f7f8fa</item> 
</style> 
<style name="calcNumber"> 
    <item name="android:background">#fafbfd</item> 
</style> 

佈局XML

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:grid="http://schemas.android.com/apk/res-auto" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

    <TextView 
      android:layout_height="match_parent" 
      android:layout_width="match_parent" 
      android:text="0" 
      android:layout_above="@+id/gridLayout" android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" android:gravity="bottom|end" 
      android:singleLine="true" android:textAppearance="@style/TextAppearance.AppCompat.Headline" 
      android:textSize="48sp" android:background="#e3e7ea" android:paddingBottom="32dp" 
      android:padding="16dp"/> 

    <android.support.v7.widget.GridLayout 
      android:id="@+id/gridLayout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" 
      grid:useDefaultMargins="false" grid:alignmentMode="alignBounds" grid:columnCount="7" grid:rowCount="9"> 

     <!-- Row 1 --> 
     <Button 
       android:text="C" 
       grid:layout_row="0" grid:layout_column="0" 
       style="@style/calcAction" android:textStyle="bold" android:textColor="@color/calcAccent" 
       grid:layout_columnWeight="1" grid:layout_rowWeight="1"/> 
     <ImageButton 
       android:src="@android:drawable/ic_input_delete" 
       grid:layout_row="0" grid:layout_column="2" 
       style="@style/calcAction" 
       grid:layout_columnWeight="1" grid:layout_rowWeight="1" /> 
     <Button 
       android:text="&#247;" 
       grid:layout_row="0" 
       style="@style/calcAction" 
       grid:layout_columnWeight="1" grid:layout_rowWeight="1" grid:layout_column="4"/> 
     <Button 
       android:text="x" 
       grid:layout_row="0" grid:layout_column="6" 
       grid:layout_columnWeight="1" grid:layout_rowWeight="1" 
       style="@style/calcAction"/> 

     <!-- Row 2 --> 
     <View 
       grid:layout_gravity="fill_horizontal" 
       android:layout_height="1dp" 
       grid:layout_row="1" grid:layout_column="0" grid:layout_columnSpan="7" 
       android:background="#eee"/> 
     <Button 
       android:text="7" grid:layout_row="2" grid:layout_column="0" 
       grid:layout_columnWeight="1" grid:layout_rowWeight="1" 
       style="@style/calcNumber"/> 
     <Button 
       android:text="8" grid:layout_row="2" grid:layout_column="2" 
       style="@style/calcNumber" 
       grid:layout_columnWeight="1" grid:layout_rowWeight="1"/> 
     <Button 
       android:text="9" grid:layout_row="2" grid:layout_column="4" 
       style="@style/calcNumber" 
       grid:layout_columnWeight="1" grid:layout_rowWeight="1"/> 
     <Button 
       android:text="-" grid:layout_row="2" grid:layout_column="6" 
       style="@style/calcAction" 
       grid:layout_columnWeight="1" grid:layout_rowWeight="1"/> 

     <!-- Row 3 --> 
     <View 
       grid:layout_gravity="fill_horizontal" 
       android:layout_height="1dp" 
       grid:layout_row="3" grid:layout_column="0" grid:layout_columnSpan="7" 
       android:background="#eee"/> 
     <Button 
       android:text="4" grid:layout_row="4" grid:layout_column="0" 
       style="@style/calcNumber" 
       grid:layout_columnWeight="1" grid:layout_rowWeight="1"/> 
     <Button 
       android:text="5" grid:layout_row="4" grid:layout_column="2" 
       style="@style/calcNumber" 
       grid:layout_columnWeight="1" grid:layout_rowWeight="1"/> 
     <Button 
       android:text="6" grid:layout_row="4" grid:layout_column="4" 
       style="@style/calcNumber" 
       grid:layout_columnWeight="1" grid:layout_rowWeight="1"/> 
     <Button 
       android:text="+" grid:layout_row="4" grid:layout_column="6" 
       style="@style/calcAction" 
       grid:layout_columnWeight="1" grid:layout_rowWeight="1"/> 

     <View 
       grid:layout_gravity="fill_horizontal" 
       android:layout_height="1dp" 
       grid:layout_row="7" grid:layout_column="0" grid:layout_columnSpan="7" 
       android:background="#eee"/> 

     <!-- Row 4 --> 
     <Button 
       android:text="1" grid:layout_row="6" grid:layout_column="0" 
       style="@style/calcNumber" 
       grid:layout_columnWeight="1" grid:layout_rowWeight="1"/> 
     <Button 
       android:text="2" grid:layout_row="6" grid:layout_column="2" 
       style="@style/calcNumber" 
       grid:layout_columnWeight="1" grid:layout_rowWeight="1"/> 
     <Button 
       android:text="3" grid:layout_row="6" grid:layout_column="4" 
       style="@style/calcNumber" 
       grid:layout_columnWeight="1" grid:layout_rowWeight="1"/> 
     <Button 
       android:text="=" grid:layout_row="6" grid:layout_column="6" 
       style="@style/calcNumber" android:background="@color/calcAccent" 
       grid:layout_rowSpan="3" 
       grid:layout_columnWeight="1" grid:layout_rowWeight="1" 
       android:textAppearance="@style/TextAppearance.AppCompat.Large" 
       android:textColor="@color/primary_material_light" android:textStyle="bold" android:textSize="22sp" 
       android:gravity="bottom|center_horizontal" android:padding="8dp"/> 
     <!-- Row 5 --> 

     <Button 
       grid:layout_columnWeight="1" grid:layout_rowWeight="1" 
       android:text="0" 
       grid:layout_row="8" grid:layout_column="0" grid:layout_columnSpan="3" 
       style="@style/calcNumber"/> 
     <Button 
       android:text="." 
       grid:layout_row="8" grid:layout_column="4" 
       grid:layout_columnWeight="1" style="@style/calcNumber"/> 

     <!-- Horizontal Grid --> 
     <View 
       grid:layout_gravity="fill_horizontal" 
       android:layout_height="1dp" 
       grid:layout_row="5" grid:layout_column="0" grid:layout_columnSpan="7" 
       android:background="#eee"/> 


    </android.support.v7.widget.GridLayout> 

</RelativeLayout> 
+0

哇,這就是fantactic! – likeanowl

+0

是的,我考慮在每個按鈕周圍添加完整的邊框,但我不想在邊緣上「加倍」厚度,因此我在按鈕之間放置了薄視圖行。 –

0

更改= 0按鈕:

<Button 
    android:layout_rowSpan="2" 
    android:layout_gravity="fill_vertical" 
    android:text="=" /> 
<Button 
    android:layout_columnSpan="2" 
    android:layout_gravity="fill_horizontal" 
    android:text="0" /> 

[編輯]

我從您的評論意識到=按鈕突出到屏幕的底部。這將是因爲你給計算器分配了很高的權重,所以使用fill_vertical會做到這一點。

我是假設(但糾正我,如果我錯了)從期望的圖形你顯示你想計算器對齊到屏幕的底部。如果是這樣的話,這是我的建議修正您的佈局(tldr:使用替代的LinearLayout的RelativeLayout):

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:layout_height="match_parent" 
     android:layout_width="match_parent" 
     android:text="0" 
     android:layout_above="@+id/gridLayout" /> 

    <GridLayout 
     android:id="@+id/gridLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_alignParentBottom="true" 
     android:columnCount="4" 
     android:rowCount="5" 
     android:orientation="horizontal" 
     android:useDefaultMargins="false"> 

     <Button 
      android:text="C" /> 

     <Button 
      android:text="BS" /> 

     <Button 
      android:text="/" /> 

     <Button 
      android:text="x" /> 

     <Button 
      android:text="7" /> 

     <Button 
      android:text="8" /> 

     <Button 
      android:text="9" /> 

     <Button 
      android:text="-" /> 

     <Button 
      android:text="4" /> 

     <Button 
      android:text="5" /> 

     <Button 
      android:text="6" /> 

     <Button 
      android:text="+" /> 

     <Button 
      android:text="1" /> 

     <Button 
      android:text="2" /> 

     <Button 
      android:text="3" /> 

     <Button 
      android:layout_gravity="fill_vertical" 
      android:layout_rowSpan="2" 
      android:text="=" /> 
     <Button 
      android:layout_gravity="fill_horizontal" 
      android:layout_columnSpan="2" 
      android:text="0" /> 
     <Button 
      android:text="." /> 
    </GridLayout> 

</RelativeLayout> 
+0

感謝您的回覆,@ChrisWard。 但在模擬器上它仍然看起來很奇怪: http://imgur.com/a/AY9hO 爲什麼? – likeanowl

+0

嗨@likeanowl,我看到了問題,並對上面的帖子進行了編輯。 –

+0

非常感謝,我現在就試試 – likeanowl

0

最後,經過近十年小時,我很滿意。 Now its looks like this

基於@ cricket_007的建議,我的代碼是

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:grid="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:weightSum="100" 
    tools:context="android.calcandroid.MainActivity"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="20"> 

     <TextView 
      android:layout_height="match_parent" 
      android:layout_width="match_parent" 
      android:text="0" 
      android:gravity="bottom|end" 
      android:singleLine="true" 
      android:textAppearance="@style/TextAppearance.AppCompat.Headline" 
      android:textSize="48sp" 
      android:background="#e3e7ea" 
      android:paddingBottom="32dp" 
      android:padding="16dp"/> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="80"> 

     <android.support.v7.widget.GridLayout 
      android:id="@+id/gridLayout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      grid:useDefaultMargins="false" 
      grid:alignmentMode="alignBounds" 
      grid:columnCount="7" 
      grid:rowCount="9"> 

      <!-- Row 1 --> 
      <Button 
       android:text="C" 
       android:background="@drawable/shape" 
       grid:layout_row="0" 
       grid:layout_column="0" 
       style="@style/calcAction" 
       android:textStyle="bold" 
       android:textColor="@color/calcAccent" 
       grid:layout_columnWeight="1" 
       grid:layout_rowWeight="1"/> 

      <ImageButton 
       android:background="@drawable/shape" 
       android:src="@android:drawable/ic_input_delete" 
       grid:layout_row="0" 
       grid:layout_column="2" 
       style="@style/calcAction" 
       grid:layout_columnWeight="1" 
       grid:layout_rowWeight="1" /> 

      <Button 
       android:background="@drawable/shape" 
       android:text="&#247;" 
       grid:layout_row="0" 
       style="@style/calcAction" 
       grid:layout_columnWeight="1" 
       grid:layout_rowWeight="1" 
       grid:layout_column="4"/> 

      <Button 
       android:background="@drawable/shape" 
       android:text="x" 
       grid:layout_row="0" 
       grid:layout_column="6" 
       grid:layout_columnWeight="1" 
       grid:layout_rowWeight="1" 
       style="@style/calcAction"/> 

      <!-- Row 2 --> 
      <View 
       grid:layout_gravity="fill_horizontal" 
       android:layout_height="1dp" 
       grid:layout_row="1" 
       grid:layout_column="0" 
       grid:layout_columnSpan="7" 
       android:background="#eee"/> 

      <Button 
       android:background="@drawable/shape" 
       android:text="7" 
       grid:layout_row="2" 
       grid:layout_column="0" 
       grid:layout_columnWeight="1" 
       grid:layout_rowWeight="1" 
       style="@style/calcNumber"/> 

      <Button 
       android:background="@drawable/shape" 
       android:text="8" 
       grid:layout_row="2" 
       grid:layout_column="2" 
       style="@style/calcNumber" 
       grid:layout_columnWeight="1" 
       grid:layout_rowWeight="1"/> 

      <Button 
       android:background="@drawable/shape" 
       android:text="9" 
       grid:layout_row="2" 
       grid:layout_column="4" 
       style="@style/calcNumber" 
       grid:layout_columnWeight="1" 
       grid:layout_rowWeight="1"/> 

      <Button 
       android:background="@drawable/shape" 
       android:text="-" 
       grid:layout_row="2" 
       grid:layout_column="6" 
       style="@style/calcAction" 
       grid:layout_columnWeight="1" 
       grid:layout_rowWeight="1"/> 

      <!-- Row 3 --> 

      <View 
       grid:layout_gravity="fill_horizontal" 
       android:layout_height="1dp" 
       grid:layout_row="3" 
       grid:layout_column="0" 
       grid:layout_columnSpan="7" 
       android:background="#eee"/> 

      <Button 
       android:background="@drawable/shape" 
       android:text="4" 
       grid:layout_row="4" 
       grid:layout_column="0" 
       style="@style/calcNumber" 
       grid:layout_columnWeight="1" 
       grid:layout_rowWeight="1"/> 

      <Button 
       android:background="@drawable/shape" 
       android:text="5" 
       grid:layout_row="4" 
       grid:layout_column="2" 
       style="@style/calcNumber" 
       grid:layout_columnWeight="1" 
       grid:layout_rowWeight="1"/> 

      <Button 
       android:background="@drawable/shape" 
       android:text="6" 
       grid:layout_row="4" 
       grid:layout_column="4" 
       style="@style/calcNumber" 
       grid:layout_columnWeight="1" 
       grid:layout_rowWeight="1"/> 

      <Button 
       android:background="@drawable/shape" 
       android:text="+" 
       grid:layout_row="4" 
       grid:layout_column="6" 
       style="@style/calcAction" 
       grid:layout_columnWeight="1" 
       grid:layout_rowWeight="1"/> 

      <View 
       grid:layout_gravity="fill_horizontal" 
       android:layout_height="1dp" 
       grid:layout_row="7" 
       grid:layout_column="0" 
       grid:layout_columnSpan="7" 
       android:background="#eee"/> 

      <!-- Row 4 --> 

      <Button 
       android:background="@drawable/shape" 
       android:text="1" 
       grid:layout_row="6" 
       grid:layout_column="0" 
       style="@style/calcNumber" 
       grid:layout_columnWeight="1" 
       grid:layout_rowWeight="1"/> 

      <Button 
       android:background="@drawable/shape" 
       android:text="2" 
       grid:layout_row="6" 
       grid:layout_column="2" 
       style="@style/calcNumber" 
       grid:layout_columnWeight="1" 
       grid:layout_rowWeight="1"/> 

      <Button 
       android:background="@drawable/shape" 
       grid:layout_row="6" 
       grid:layout_column="4" 
       grid:layout_columnWeight="1" 
       grid:layout_rowWeight="1" 
       android:text="3" 
       style="@style/calcNumber"/> 

      <Button 
       grid:layout_row="6" 
       grid:layout_column="6" 
       grid:layout_rowSpan="3" 
       grid:layout_columnWeight="1" 
       grid:layout_rowWeight="1" 
       android:background="@color/calcAccent" 
       android:textAppearance="@style/TextAppearance.AppCompat.Large" 
       android:textColor="@color/primary_material_light" 
       android:textStyle="bold" 
       android:textSize="22sp" 
       android:gravity="center_vertical|center_horizontal" 
       android:padding="8dp" 
       android:text="=" 
       style="@style/calcNumber"/> 
      <!-- Row 5 --> 

      <Button 
       android:background="@drawable/shape" 
       grid:layout_columnWeight="1" 
       grid:layout_rowWeight="1" 
       grid:layout_row="8" 
       grid:layout_column="0" 
       grid:layout_columnSpan="3" 
       style="@style/calcNumber" 
       android:text="0"/> 

      <Button 
       android:background="@drawable/shape" 
       grid:layout_row="8" 
       grid:layout_column="4" 
       grid:layout_columnWeight="1" 
       grid:layout_rowWeight="1" 
       style="@style/calcNumber" 
       android:text="."/> 

      <!-- Horizontal Grid --> 
      <View 
       grid:layout_gravity="fill_horizontal" 
       android:layout_height="1dp" 
       grid:layout_row="5" grid:layout_column="0" grid:layout_columnSpan="7" 
       android:background="#eee"/> 


     </android.support.v7.widget.GridLayout> 

    </LinearLayout> 

</LinearLayout> 

也許這是一個有點亂,但它是罰款,我認爲。