内に s<include>
を含めるために使用しようとしています。問題は、要素にすべての属性を明示的に指定しないと、正しく表示されないことです。つまり、すべての要素のすべての属性を再宣言する必要があるため、インクルードは無意味です。ImageButton
android.support.v7.widget.GridLayout
<include>
<include>
dialpad_button.xml
<?xml version="1.0" encoding="utf-8"?>
<ImageButton
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:grid="http://schemas.android.com/apk/res-auto"
android:layout_width="0dp"
android:layout_height="0dp"
grid:layout_columnWeight="1"
grid:layout_rowWeight="1"
grid:layout_gravity="fill"
android:layout_margin="5dp"
android:scaleType="centerInside"/>
dialpad_view.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.GridLayout
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:id="@+id/dialpad_grid_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
grid:alignmentMode="alignBounds"
grid:columnCount="2"
grid:rowCount="1">
<include
android:id="@+id/dialpad_view_btn1"
android:src="@drawable/dialpad_1"
layout="@layout/dialpad_button" />
<include
android:id="@+id/dialpad_view_btn2"
android:src="@drawable/dialpad_2"
layout="@layout/dialpad_button" />
</android.support.v7.widget.GridLayout>
すべての属性を s で直接宣言すると<include>
、XML では次のようになります。
<include
layout="@layout/dialpad_button"
android:id="@+id/dialpad_view_btn1"
android:src="@drawable/dialpad_1"
android:layout_width="0dp"
android:layout_height="0dp"
grid:layout_columnWeight="1"
grid:layout_rowWeight="1"
grid:layout_gravity="fill"
android:layout_margin="5dp"
android:scaleType="centerInside" />
下の比較画像でわかるように、ボタンは適切にスケーリングされますが、画像はどこにも表示されません。
<include>
s をに変更するとImageButton
、期待どおりに動作します。
<ImageButton
android:id="@+id/dialpad_view_btn1"
android:src="@drawable/dialpad_1"
android:layout_width="0dp"
android:layout_height="0dp"
grid:layout_columnWeight="1"
grid:layout_rowWeight="1"
grid:layout_gravity="fill"
android:layout_margin="5dp"
android:scaleType="centerInside" />
これに対する回避策はありますか?
src
ダイヤルパッドに 12 個のほぼ同一のボタンを配置する予定なので、「テンプレート」を含め、各ボタンに必要な属性 (つまりと)のみを変更して、XML をクリーンアップしたいと考えていますid
。
編集
ある回答で提案されているように、スタイルを使用しようとしてもうまくいきませんでした。スタイルを適用して表示されるビューはありません。さらに奇妙なことに、 のビューの 1 つにスタイルを適用したGridLayout
だけでも、最後のビューしか表示されません (ここでは、読みやすくするためにサンプル コードを 2 つのビューに短縮しましたが、実際には 12 あります)。
これが私が使用してみたスタイルです:
<?xml version="1.0" encoding="utf-8"?>
<resources
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:grid="http://schemas.android.com/apk/res-auto" >
<style name="dialPadButtonStyle">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">0dp</item>
<item name="grid:layout_columnWeight">1</item>
<item name="grid:layout_rowWeight">1</item>
<item name="grid:layout_gravity">fill</item>
<item name="android:layout_margin">5dp</item>
<item name="android:scaleType">centerInside</item>
<item name="android:background">@android:color/transparent</item>
</style>
</resources>