簡體   English   中英

運用 <include> 在android.support.v7.widget.GridLayout中無法正確顯示

[英]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" />

不同XML布局的比較

這有解決方法嗎?

由於我的撥號盤中有12個幾乎相同的按鈕,我真的想通過包含一個“模板”來清理XML,並且只修改每個按鈕的必要屬性(即srcid )。

編輯

如一個答案所示,嘗試使用樣式不起作用。 我沒有應用樣式來顯示的視圖。 甚至更奇怪的是,即使我只將樣式應用於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM