GridLayout
を紹介するAndroid Developersブログの投稿 は、スパンが自動インデックス割り当てにどのように影響するかを示す次の図を示しています。
GridLayout
を使用して実際に実装しようとしています。ここに私がこれまでに持っているものがあります:
<Android.support.v7.widget.GridLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res/com.commonsware.Android.gridlayout"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
app:orientation="horizontal"
app:columnCount="8">
<Button
app:layout_columnSpan="2"
app:layout_rowSpan="2"
Android:layout_gravity="fill_horizontal"
Android:text="@string/string_1"/>
<Button
app:layout_columnSpan="2"
Android:layout_gravity="fill_horizontal"
Android:text="@string/string_2"/>
<Button
app:layout_rowSpan="4"
Android:text="@string/string_3"/>
<Button
app:layout_columnSpan="3"
app:layout_rowSpan="2"
Android:layout_gravity="fill_horizontal"
Android:text="@string/string_4"/>
<Button
app:layout_columnSpan="3"
Android:layout_gravity="fill_horizontal"
Android:text="@string/string_5"/>
<Button
app:layout_columnSpan="2"
Android:layout_gravity="fill_horizontal"
Android:text="@string/string_6"/>
<Android.support.v7.widget.Space
app:layout_column="0"
Android:layout_width="36dp"
/>
<Android.support.v7.widget.Space
Android:layout_width="36dp"
/>
<Android.support.v7.widget.Space
Android:layout_width="36dp"
/>
<Android.support.v7.widget.Space
Android:layout_width="36dp"
/>
<Android.support.v7.widget.Space
Android:layout_width="36dp"
/>
<Android.support.v7.widget.Space
Android:layout_width="36dp"
/>
<Android.support.v7.widget.Space
Android:layout_width="36dp"
/>
<Android.support.v7.widget.Space
Android:layout_width="36dp"
/>
</Android.support.v7.widget.GridLayout>
<Space>
要素を導入して、各列に最小幅を持たせる必要がありました。そうしないと、幅がゼロの列の束ができてしまいます。
しかし、それらでも、私はこれを得る:
特に:
Android:layout_gravity="fill_horizontal"
にもかかわらず、列のスパンを持つウィジェットがスパンされた列を埋めません
Android:layout_rowSpan
値にもかかわらず、行にまたがるものはありません
GridLayout
を使用して、ブログ投稿から図を複製できますか?
ありがとう!
かなりハッキーな感じがしますが、必要なものを超えて列と行を追加することで、正しい外観を得ることができました。次に、高さを定義する各行にスペースを追加列に入力し、幅を定義する各列にスペースを追加行に入力しました。柔軟性を高めるために、これらのスペースサイズをコードで設定して、重みに似たものを提供できると思います。スクリーンショットを追加しようとしましたが、必要な評判がありません。
<GridLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:columnCount="9"
Android:orientation="horizontal"
Android:rowCount="8" >
<Button
Android:layout_columnSpan="2"
Android:layout_gravity="fill"
Android:layout_rowSpan="2"
Android:text="1" />
<Button
Android:layout_columnSpan="2"
Android:layout_gravity="fill_horizontal"
Android:text="2" />
<Button
Android:layout_gravity="fill_vertical"
Android:layout_rowSpan="4"
Android:text="3" />
<Button
Android:layout_columnSpan="3"
Android:layout_gravity="fill"
Android:layout_rowSpan="2"
Android:text="4" />
<Button
Android:layout_columnSpan="3"
Android:layout_gravity="fill_horizontal"
Android:text="5" />
<Button
Android:layout_columnSpan="2"
Android:layout_gravity="fill_horizontal"
Android:text="6" />
<Space
Android:layout_width="36dp"
Android:layout_column="0"
Android:layout_row="7" />
<Space
Android:layout_width="36dp"
Android:layout_column="1"
Android:layout_row="7" />
<Space
Android:layout_width="36dp"
Android:layout_column="2"
Android:layout_row="7" />
<Space
Android:layout_width="36dp"
Android:layout_column="3"
Android:layout_row="7" />
<Space
Android:layout_width="36dp"
Android:layout_column="4"
Android:layout_row="7" />
<Space
Android:layout_width="36dp"
Android:layout_column="5"
Android:layout_row="7" />
<Space
Android:layout_width="36dp"
Android:layout_column="6"
Android:layout_row="7" />
<Space
Android:layout_width="36dp"
Android:layout_column="7"
Android:layout_row="7" />
<Space
Android:layout_height="36dp"
Android:layout_column="8"
Android:layout_row="0" />
<Space
Android:layout_height="36dp"
Android:layout_column="8"
Android:layout_row="1" />
<Space
Android:layout_height="36dp"
Android:layout_column="8"
Android:layout_row="2" />
<Space
Android:layout_height="36dp"
Android:layout_column="8"
Android:layout_row="3" />
<Space
Android:layout_height="36dp"
Android:layout_column="8"
Android:layout_row="4" />
<Space
Android:layout_height="36dp"
Android:layout_column="8"
Android:layout_row="5" />
<Space
Android:layout_height="36dp"
Android:layout_column="8"
Android:layout_row="6" />
</GridLayout>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" >
<GridLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerInParent="true"
Android:columnCount="8"
Android:rowCount="7" >
<TextView
Android:layout_width="50dip"
Android:layout_height="50dip"
Android:layout_columnSpan="2"
Android:layout_rowSpan="2"
Android:background="#a30000"
Android:gravity="center"
Android:text="1"
Android:textColor="@Android:color/white"
Android:textSize="20dip" />
<TextView
Android:layout_width="50dip"
Android:layout_height="25dip"
Android:layout_columnSpan="2"
Android:layout_rowSpan="1"
Android:background="#0c00a3"
Android:gravity="center"
Android:text="2"
Android:textColor="@Android:color/white"
Android:textSize="20dip" />
<TextView
Android:layout_width="25dip"
Android:layout_height="100dip"
Android:layout_columnSpan="1"
Android:layout_rowSpan="4"
Android:background="#00a313"
Android:gravity="center"
Android:text="3"
Android:textColor="@Android:color/white"
Android:textSize="20dip" />
<TextView
Android:layout_width="75dip"
Android:layout_height="50dip"
Android:layout_columnSpan="3"
Android:layout_rowSpan="2"
Android:background="#a29100"
Android:gravity="center"
Android:text="4"
Android:textColor="@Android:color/white"
Android:textSize="20dip" />
<TextView
Android:layout_width="75dip"
Android:layout_height="25dip"
Android:layout_columnSpan="3"
Android:layout_rowSpan="1"
Android:background="#a500ab"
Android:gravity="center"
Android:text="5"
Android:textColor="@Android:color/white"
Android:textSize="20dip" />
<TextView
Android:layout_width="50dip"
Android:layout_height="25dip"
Android:layout_columnSpan="2"
Android:layout_rowSpan="1"
Android:background="#00a9ab"
Android:gravity="center"
Android:text="6"
Android:textColor="@Android:color/white"
Android:textSize="20dip" />
</GridLayout>
</RelativeLayout>
列にlayout_gravityとlayout_columntWeightの両方を設定する必要があります
<Android.support.v7.widget.GridLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<TextView Android:text="سوم شخص"
app:layout_gravity="fill_horizontal"
app:layout_columnWeight="1"
/>
<TextView Android:text="دوم شخص"
app:layout_gravity="fill_horizontal"
app:layout_columnWeight="1"
/>
<TextView Android:text="اول شخص"
app:layout_gravity="fill_horizontal"
app:layout_columnWeight="1"
/>
</Android.support.v7.widget.GridLayout>
AndroidサポートV7 GridLayoutライブラリは、重量の原則に対応することにより、余分なスペースを簡単に分配します。列を引き伸ばすには、その中のコンポーネントが重量または重力を定義していることを確認してください。列が伸びないようにするには、列のコンポーネントの1つが重量または重力を定義しないようにします。このライブラリの依存関係を忘れずに追加してください。 build.gradleにcom.Android.support:gridlayout-v7:25.0.1を追加します。
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.GridLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:columnCount="2"
app:rowCount="2">
<TextView
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:gravity="center"
Android:text="First"
app:layout_columnWeight="1"
app:layout_rowWeight="1" />
<TextView
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:gravity="center"
Android:text="Second"
app:layout_columnWeight="1"
app:layout_rowWeight="1" />
<TextView
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:gravity="center"
Android:text="Third"
app:layout_columnWeight="1"
app:layout_rowWeight="1" />
<TextView
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:gravity="center"
app:layout_columnWeight="1"
app:layout_rowWeight="1"
Android:text="fourth"/>
</Android.support.v7.widget.GridLayout>
API 21以降、GridLayoutはLinearLayoutのようなウェイトをサポートするようになりました。詳細については、以下のリンクをご覧ください。