android中的图层列表没有正确显示图像

时间:2017-10-11 05:58:48

标签: android xml android-layout drawable xml-drawable

我必须做这样的形状 - image

为此,我编写了这样的代码 -

triangle.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item>
        <rotate
            android:fromDegrees="45"
            android:pivotX="-45%"
            android:pivotY="97%"
            android:toDegrees="45" >
            <shape android:shape="rectangle" >
                <solid android:color="@color/nypd_blue" />
            </shape>
        </rotate>
    </item>

</layer-list>
像这样的

和矩形 -

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/listview_background_shape">
            <stroke android:width="2dp" android:color="@color/nypd_blue" />
            <padding android:left="2dp"
                android:top="2dp"
                android:right="2dp"
                android:bottom="2dp" />

            <solid android:color="@color/nypd_blue" />
        </shape>
    </item>
</layer-list>

我将它们放在像这样的xml文件中 -

background.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@drawable/blue_triangle" android:id="@+id/triangle" android:gravity="top"
        android:top="0dp" android:bottom="0dp" android:left="0dp" android:right="0dp"
        />
    <item android:drawable="@drawable/blue_rectangle" android:gravity="bottom"
        android:height="10dp"
        />
</layer-list>

当我在我的代码中使用背景.xml来设置背景时,整个图像没有正确显示,只有矩形部分即将到来。这有什么问题?

<LinearLayout android:layout_width="match_parent"
        android:layout_height="wrap_content"
/>
<RelativeLayout android:id="@+id/hours_spent_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/width_1dp"
        android:background="@drawable/background">

1 个答案:

答案 0 :(得分:0)

您似乎在API低于26的设备上测试您的代码。事实上,我不知道如何解释为什么LayerDrawable在API 26下的行为有所不同。但我有一个解决方案。

 RelativeLayout relativeLayout;// your layout
 LayerDrawable drawable = (LayerDrawable) relativeLayout.getBackground();
 drawable.setLayerInset(1, padding, padding, padding, padding);

“1”表示索引1,代码“1”表示@drawable/blue_rectangle,您可以手动设置填充。

请注意,您应将dp转换为像素。