具有底部笔划的android形状

Cot*_*nyo 111 android layer-list android-drawable android-styles

我需要创建一个android形状,以便只有底部有笔画(虚线).当我尝试以下操作时,笔划将形状从中心平分.有谁知道怎么做对吗?中风需要是底线/边界.我使用形状作为TextView的背景.请不要在意我为什么需要它.

<?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="#1bd4f6" />
        </shape>
    </item>

    <item>
        <shape android:shape="line" >
            <padding android:bottom="1dp" />

            <stroke
                android:dashGap="10px"
                android:dashWidth="10px"
                android:width="1dp"
                android:color="#ababb2" />
        </shape>
    </item>

</layer-list>
Run Code Online (Sandbox Code Playgroud)

Kry*_*lez 302

这是一种黑客攻击,但我认为这可能是最好的方法.无论高度如何,虚线始终位于底部.

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item>
        <shape android:shape="rectangle" >
            <solid android:color="#1bd4f6" />
        </shape>
    </item>

    <item android:top="-2dp" android:right="-2dp" android:left="-2dp">
        <shape>
            <solid android:color="@android:color/transparent" />
            <stroke
                android:dashGap="10px"
                android:dashWidth="10px"
                android:width="1dp"
                android:color="#ababb2" />
        </shape>
    </item>

</layer-list>
Run Code Online (Sandbox Code Playgroud)

说明:

第二个形状是透明矩形,带有虚线轮廓.使边框仅沿底部出现的关键在于负边距设置在另一边.这些负边距将"虚线"推到那边的绘制区域之外,只留下沿着底部的线.一个潜在的副作用(我没有尝试过)是,对于在自己的边界之外绘制的视图,负边距边界可能变得可见.

  • 确实很聪明.我花了一些时间才弄清楚是什么让这项工作是顶部,右边和左边之间的1 dp(绝对值)和笔划宽度的区别:) (5认同)
  • 这很有效,但是有人可以用这里的数学解释来补充答案(对于像我这样的可怜的灵魂以及在未来的日子里来到这里的其他人):) (5认同)

Jon*_*put 43

这样做的诀窍......

<item >
    <shape android:shape="rectangle">
        <solid android:color="#YOUR_BOTTOM_LINE_COLOR"/>
    </shape>
</item>

<item android:bottom="1.5dp">
    <shape android:shape="rectangle">
        <solid android:color="#YOUR_BG_COLOR"/>
    </shape>
</item>
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,但多余的透支 (3认同)

小智 41

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:top="-6dp"
        android:left="-6dp"
        android:right="-6dp"
        android:bottom="0dp">

        <shape android:shape="rectangle">
            <solid android:color="#88FFFF00"/>
            <stroke
                android:width="5dp"
                android:color="#FF000000"/>
        </shape>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)


Shr*_*hna 15

这个答案是针对那些希望在EditText这里显示虚线底部边框的谷歌搜索者

样品

创建dotted.xml内部drawable文件夹并粘贴这些

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:bottom="1dp"
        android:left="-2dp"
        android:right="-2dp"
        android:top="-2dp">
        <shape android:shape="rectangle">
            <stroke
                android:width="0.5dp"
                android:color="@android:color/black" />    
            <solid android:color="#ffffff" />
            <stroke
                android:width="1dp"
                android:color="#030310"
                android:dashGap="5dp"
                android:dashWidth="5dp" />
            <padding
                android:bottom="5dp"
                android:left="5dp"
                android:right="5dp"
                android:top="5dp" />
        </shape>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

然后只需将android:background属性设置为dotted.xml刚刚创建的属性.你EditText看起来像这样.

<EditText
    android:id="@+id/editText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Some Text"
    android:background="@drawable/dotted" />
Run Code Online (Sandbox Code Playgroud)


Sim*_*ges 11

我觉得它很简单,没有所有这些负面填充物或鹳.

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/main_bg_color"/>
    <item android:gravity="bottom">
        <shape android:shape="rectangle">
            <size android:height="5dp"/>
            <solid android:color="@color/bottom_bar_color"/>
        </shape>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

  • 如果不需要特殊背景,可以去掉`&lt;item android:drawable="@color/main_bg_color"/&gt;` (2认同)
  • 适用于 Android 27,不适用于 Android 19 ...未测试其他版本。 (2认同)

Svi*_*sev 9

尝试下一个xml可绘制代码:

    <layer-list>
        <item android:top="-2dp" android:right="-2dp" android:left="-2dp">
            <shape>
                <solid android:color="@android:color/transparent" />
                <stroke
                    android:width="1dp"
                    android:color="#fff" />
            </shape>
        </item>
    </layer-list>
Run Code Online (Sandbox Code Playgroud)


Ket*_*hir 7

如果我了解你,我认为你不需要使用形状.

如果您看起来如下图所示,请使用以下布局.

在此输入图像描述

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:background="#1bd4f6"
    android:paddingBottom="4dp" >

    <TextView
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:background="#ababb2"
        android:padding="5dp"
        android:text="Hello Android" />
 </RelativeLayout>

 </RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

编辑

玩这些属性你会得到结果

    android:top="dimension"
    android:right="dimension"
    android:bottom="dimension"
    android:left="dimension"
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="#1bd4f6" />
    </shape>
</item>

<item android:top="20px"
    android:left="0px">
    <shape android:shape="line"  >
        <padding android:bottom="1dp" />

        <stroke
            android:dashGap="10px"
            android:dashWidth="10px"
            android:width="1dp"
            android:color="#ababb2" />
    </shape>
</item>

</layer-list>
Run Code Online (Sandbox Code Playgroud)


adh*_*dhi 5

简单的解决方案:

在drawable文件夹中创建一个drawable文件作为edittext_stroke.xml.添加以下代码:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line"
   >
    <stroke
        android:width="1dp"
        android:color="@android:color/white" >
    </stroke>
</shape>
Run Code Online (Sandbox Code Playgroud)

在布局文件中,将drawable添加到edittext中

机器人:drawableBottom = "@绘制/ edittext_stroke"

<EditText
      android:textColor="@android:color/white"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:drawableBottom="@drawable/edittext_stroke"
      />
Run Code Online (Sandbox Code Playgroud)


Lan*_*tka 5

通常用于类似的任务 - 我创建了这样的图层列表可绘制:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
        <solid android:color="@color/underlineColor"/>
        </shape>
    </item>
<item android:bottom="3dp">
    <shape android:shape="rectangle">
        <solid android:color="@color/buttonColor"/>
    </shape>
</item>
Run Code Online (Sandbox Code Playgroud)

这个想法是首先你用underlineColor绘制矩形,然后在这个矩形的顶部你用实际的buttonColor绘制另一个矩形但应用bottomPadding。它总是有效。

但是当我需要让 buttonColor 透明时,我无法使用上面的 drawable。我找到了另一种解决方案

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape android:shape="rectangle">
        <solid android:color="@android:color/transparent"/>
    </shape>
</item>

<item android:drawable="@drawable/white_box" android:gravity="bottom"     android:height="2dp"/>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

(正如您在此处看到的,mainButtonColor 是透明的,而 white_box 只是一个可使用白色实体绘制的简单矩形)