[英]Using <include> in android.support.v7.widget.GridLayout not displaying correctly
我正在嘗試使用<include>
在android.support.v7.widget.GridLayout
包含ImageButton
。 問題是,如果我沒有在<include>
元素上明確指定所有屬性,則它們無法正確顯示。 換句話說,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>
上聲明所有屬性,這就是它在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>
更改為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>
也許您可以使用樣式聲明公共屬性,然后為每個按鈕設置它。
<style name="dialPadButtonStyle">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">0dp</item>
<item name="android:layout_columnWeight">1</item>
<item name="android:layout_rowWeight">1</item>
<item name="android:layout_margin">5dp</item>
<item name="android:src">@android:drawable/ic_menu_camera</item>
</style>
我還為GridLayout添加了:columnCount為3,rowCount為4,並添加了12個帶有該樣式的ImageButtons。 最終結果如下:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.