我正在尝试使用<include>
将ImageButton
s 包含在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>
如果我直接在<include>
s 上声明所有属性,那么它在 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" />
有解决方法吗?
因为我的拨号盘中将有 12 个几乎相同的按钮,所以我真的很想通过包含一个“模板”来清理 XML,并且只修改每个按钮的必要属性(即src
和id
)。
编辑
正如一个答案中所建议的那样,尝试使用样式不起作用。我应用样式的视图都没有显示。更奇怪的是,即使我只是将样式应用于 中的一个视图GridLayout
,也只会显示最后一个视图(为了便于阅读,我将此处的示例代码缩短为只有两个视图,实际上我有十二个)。
这是我尝试使用的样式:
<?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>