我尝试了几个选项,但我找不到最好的方法:我想在使用XML单击按钮时更改线性布局的边距.这是我选择按钮的代码:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:bottom="-1dp">
<shape android:shape="rectangle" >
<corners
android:topLeftRadius="5dp"
android:topRightRadius="5dp" />
<solid android:color="#424346" />
<stroke
android:width="1dp"
android:color="#2d2e2f" />
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
现在我想添加保证金的更改,如果放在一个单独的文件中将如下所示:
<resources>
<style android:id="@+id/tab_label" >
<item android:layout_marginTop="7dp"/>
</style>
</resources>
Run Code Online (Sandbox Code Playgroud)
我尝试将它作为项添加到图层列表但它返回错误.
将它放在另一个文件中是非常有问题的,因为Android不允许在一个元素中使用两种样式.所以我想在一个XML文件中合并这两件事.
或者,这样做的最佳方法是什么?
我尝试使用XML layer-list drawable创建一个简单的插图.
我有两个形状,一个圆形和一个矩形
我想要一个不按比例的圆圈.
以下是布局:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:layout_margin="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/shape5"
android:layout_gravity="center"
android:scaleType="center"
/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
这是shape5.xml drawable
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:top="0dp" android:left="0dp">
<shape android:shape="rectangle" android:scaleType="center">
<stroke android:width="2dp" android:color="@android:color/holo_red_light" />
<size android:width="200dp" android:height="100dp"/>
</shape>
</item>
<item android:top="10dp" android:left="10dp">
<shape android:shape="oval" android:gravity="center" android:scaleType="center" >
<stroke android:width="2dp" android:color="@android:color/holo_blue_light" />
<corners android:radius="10dp" />
<size android:width="20dp" android:height="20dp"/>
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
生成的图形如下所示:

很明显,项目android:top可以完成工作,但没有什么能阻止形状缩放.大小宽度不起作用,android:scaleType ="center"也不起作用.
我快速查看了LayerDrawable.java实现.看起来像在幕后,从项目属性创建插入.所以我想通过计算那些我可以达到结果,我想要的.这是唯一的方法吗?
更新:
根据这个答案,我知道操纵项目的android:top,android:left等,我可以创建一个虚拟插图,可以根据我的需要扩展我的"形状".我查了一遍,这是对的.所以这是一个解决方法.然而,我对它的反直觉感到非常失望.我仍然希望有人能指出我一种简单的方法来禁用缩放.
更新:根据此Google Android文档页面,设置ImageView scaleType应该已禁止缩放.显然在我的情况下,它没有用.缺了点什么.
我试图在视图下面制作一个(假)阴影,这样层就会以这种方式垂直:
出于某种原因,我无法正确绘制线条.
无论我做什么,由于某种原因,线条占据整个空间,而渐变似乎很好.
我尝试使用"line"作为形状和"矩形".我也尝试使用"笔画"而不是"实心",尝试添加填充和边距......
这是可绘制文件的XML:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle" >
<size android:height="1dp" />
<solid android:color="#43000000" />
</shape>
</item>
<item android:top="1dp">
<shape android:shape="rectangle" >
<gradient
android:angle="270"
android:endColor="#00000000"
android:startColor="#1A000000" />
<size android:height="8dp" />
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
同样,这不是我尝试过的唯一一件事.这只是我的第一次尝试.
我该如何修复这个XML?是什么导致它发生?
我正在创建一个LayerDrawable创建底部笔划,但我不知道如何给出图层的下边距(Drawablw).
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:bottom="2dp">
..
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
我想以编程方式设置上面的底部边距.
到目前为止,我已经这样做了:
Drawable[] list = new Drawable[2];
GradientDrawable strokeDrawable = new GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM, new int[] {
strokeColor[0], strokeColor[0] });
GradientDrawable backgroundDrawable = new GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM, bgColor);
// Now how to set bottom margin to make border.
list[0] = strokeDrawable;
list[1] = backgroundDrawable;
LayerDrawable layerDrawable = new LayerDrawable(list);
Run Code Online (Sandbox Code Playgroud)
有人知道吗?
我<layer-list>经常在android中使用标记来做各种事情,例如向视图中添加阴影和背景,创建自定义形状等。无论我需要什么,总是在互联网上的某个地方。因此,我将其复制并按原样使用。
但是我想知道它<layer-list>是如何工作的?如何<items>命令以获得正确的形状或效果?我想知道,这样每当需要某种自定义形状或效果时,我都可以自己做。
我认为<layer-list>android中一个非常强大的工具可以创建您想要的任何东西。自从我在android上进行开发以来,我已经进行了大量的搜索,但是我找不到任何合适的文档或教程,其中可能包含逐步指南或说明来创建形状或您选择的效果。
如果有人可以向我解释,那就太好了。提前致谢!!
android android-layout android-xml layer-list android-drawable
这是我的第一个在中加载Vector-Drawable的代码layer-list。后来我不得不改变我的矢量可绘制的颜色。我发现我应该添加位图以使用tint属性。这是我的第一个代码和vector drawable在中显示良好layer-list。
<item>
<shape
android:padding="1dp"
android:shape="oval">
<corners
android:bottomLeftRadius="5dp"
android:bottomRightRadius="5dp"
android:topLeftRadius="5dp"
android:topRightRadius="5dp"/>
<solid android:color="@color/accent"/>
</shape>
</item>
<item android:drawable="@drawable/ic_check_black_24px"/> // this is vector drawable
Run Code Online (Sandbox Code Playgroud)
所以我将代码更改为此。我无法在XML的位图中加载vector-Drawable。
<item>
<shape
android:padding="1dp"
android:shape="oval">
<corners
android:bottomLeftRadius="5dp"
android:bottomRightRadius="5dp"
android:topLeftRadius="5dp"
android:topRightRadius="5dp"/>
<solid android:color="@color/accent"/>
</shape>
</item>
<item>
<bitmap
android:src="@drawable/ic_check_black_24px"
android:tint="@color/white"/>
</item>
Run Code Online (Sandbox Code Playgroud)
问题在这里。我无法在位图中加载vector-drawable,这会导致我的应用崩溃。
我希望完成一些看起来像这里底部的操作(对于所有四个角,但是我只显示图像的底部):
到目前为止,我有:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:src="@drawable/orange_tile"
android:tileMode="repeat"
android:dither="true"
android:gravity="center" />
</item>
<item>
<shape android:shape="rectangle">
<corners android:radius="2dp"/>
<stroke android:color="@color/white" android:width="0.5dp" />
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
然而,这给了我一个tiiiny在每个角落像素,按预览:
那么,我该如何抓住那些角落?可见的笔触不是它,不是实际需要的...
尝试过的事情:
将固体添加到项目中可以得到与我想要的完全相反的效果。可能有掩盖技巧...
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:src="@drawable/orange_tile"
android:tileMode="repeat"
android:dither="true"
android:gravity="center" />
</item>
<item>
<shape android:shape="rectangle">
<color android:color="@color/white" />
<corners android:radius="2dp"/>
<stroke android:color="@color/white" android:width="0.5dp" />
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
磁贴:
我正在为编辑文本定义选择器背景,并且我希望在编辑文本聚焦时有底线。
这就是我想要实现的目标:
到目前为止我有这个:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<stroke
android:width="1dp"
android:color="@android:color/black" />
<corners android:radius="3dp" />
</shape>
</item>
<item>
<shape android:shape="line">
<stroke android:color="@android:color/black" android:width="1dp"/>
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
它显示了这条线正好在中间,我想把它放在底部,还有左右填充。
有没有办法使用图层列表来实现这一点,或者也许有更好的方法?
我有一个图层列表
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle" >
<solid android:color="@color/custom_color" />
</shape>
</item>
<item android:top="-2dp" android:right="-2dp" android:left="-2dp">
<shape>
<solid android:color="@android:color/transparent" />
<stroke
android:width="1dp"
android:color="@android:color/white"/>
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
并希望在我的项目中的多个位置重用此可绘制对象,以便@color/custom_color(在上面的示例中)在每种情况下都被替换为不同的颜色。应该有一种方法来实现它,而不是创建一个单独的可绘制对象。有任何想法吗?
android ×10
layer-list ×10
xml ×2
android-xml ×1
bitmap ×1
drawable ×1
geometry ×1
gradient ×1
layout ×1
margin ×1
shape ×1
shapes ×1
vector ×1
xml-drawable ×1