2016-08-20 10 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はView全体を拡大します。

そして、これを使用するために、あなたはあなたのサポートライブラリのバージョン

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

うわー、それはファンタジーです! – 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" /> 

[EDIT]

こと=ボタンが画面の下部にはみ出していました。これは、計算機に大きな重みを割り当てたために、fill_verticalを使用して計算されるためです。

私がと仮定している(私が間違っていれば私を修正します)希望のグラフィックから電卓を画面の一番下に揃えたいことを示しました。その場合は、ここにあなたのレイアウトに私の提案改正(tldr:RelativeLayoutの代わりのLinearLayoutを使うには):です

<?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

、後にほぼ10時間、私は満足しています。 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> 

多分それは少し厄介だが、それは私が考えて大丈夫です。