Android에서 스타일 하단 라인


120

하단에만 획 (점선)이 있도록 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>

2
왜 그렇게 간단한 일을 위해 git 프로젝트를 보러 갈까요? 이 프로젝트의 히트작을 찾고 있습니까?
Cote Mounyo 2013 년

호기심 때문에 px를 사용하여 대시 크기를 지정하는 이유는 무엇입니까?
Jose_GD

답변:


313

일종의 해킹이지만 아마도 이것이 최선의 방법이라고 생각합니다. 점선은 높이에 관계없이 항상 맨 아래에 있습니다.

<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>

설명:

두 번째 모양은 점선 윤곽선이있는 투명한 직사각형입니다. 테두리를 아래쪽에만 표시하는 핵심은 다른 쪽을 설정하는 음수 여백에 있습니다. 이러한 음수 여백은 해당면의 그려진 영역 바깥쪽으로 점선을 "밀어"아래쪽에 선만 남깁니다. 한 가지 잠재적 인 부작용 (내가 시도하지 않은)은 자신의 경계를 벗어나는 뷰의 경우 음의 여백 테두리가 표시 될 수 있다는 것입니다.


5
참으로 영리합니다. 이 작업을 수행하는 이유는 위, 오른쪽 및 왼쪽과 획 너비 사이의
1dp

5
이것은 완벽하게 작동하지만 누군가가이 수학에 대한 설명으로 답을 보충 해 주시겠습니까? (나와 같은 불쌍한 영혼과 앞으로 여기에 도착하는 다른 사람을 위해) :)
source.rar

잘 작동합니다. 상태에 따라 레이어 목록 xml을 가리키는 선택기를 사용할 수도 있습니다. 나는 그것을 알아 내야했고 그것도 작동합니다.
Dacker 2016-04-03

불필요한 오버 드로를 도입하지 마십시오. @Anonan 솔루션이 더 낫다고 생각합니다. 필요에 맞게 수정 해보십시오.
Vlad

44

이것은 트릭입니다 ...

<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>

두 개의 직사각형이 서로 겹치고 하단 공간을 추가하여 다른 색상을 선으로 표시합니다. 그래서, 당신은 다른 방법을 수행하기 위해 적용 할 수 있습니다
Jongz Puangput에게

3
좋은 대답이지만 중복 오버 드로
Lester

또한 당신은 알파와 색상이있을 때 작동하지 않습니다
더크

43
<?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>

나를 위해 완벽하게 작동했습니다! 감사.
hetsgandhi

19

이 답변은 EditText여기와 같은 점선 하단 테두리를 표시하려는 Google 검색자를위한 것입니다.

견본

폴더 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>

그런 다음 방금 만든 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" />

13

이 모든 부정적인 패딩이나 황새없이 간단하다고 느낍니다.

<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>

2
특별한 배경이 필요하지 않은 경우<item android:drawable="@color/main_bg_color"/>
Overclover

1
Android 27에서는 작동하고 Android 19에서는 작동하지 않습니다. 다른 버전은 테스트하지 않았습니다.
Ridcully

10

다음 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>

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>

편집하다

이러한 속성으로 플레이하면 결과를 얻을 수 있습니다.

    android:top="dimension"
    android:right="dimension"
    android:bottom="dimension"
    android:left="dimension"

이렇게 해봐

<?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>

내 뇌졸중은 점선 라인입니다
코트 Mounyo

이 모양이 보이지 않는 얻을,보기가 너무 작은 크기가 조정됩니다 경우에만주의해야 할 점은, 작동
Jose_GD

불필요한 오버 드로가 발생하지 않도록 항상주의해야합니다.
Vlad

5

간단한 솔루션 :

드로어 블 폴더에 드로어 블 파일을 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>

레이아웃 파일에서 드로어 블을 편집 텍스트에 추가하십시오.

android : drawableBottom = "@ drawable / edittext_stroke"

<EditText
      android:textColor="@android:color/white"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:drawableBottom="@drawable/edittext_stroke"
      />

이 경우 귀하의 라인은 중앙에 바닥없는 것
Sviatoslav Zaitsev

4

일반적으로 비슷한 작업을 위해 다음과 같이 레이어 목록 드로어 블을 만들었습니다.

<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>

아이디어는 먼저 underlineColor로 사각형을 그린 다음이 사각형 위에 실제 buttonColor로 다른 사각형을 그리지 만 bottomPadding을 적용하는 것입니다. 항상 작동합니다.

하지만 buttonColor를 투명하게해야했을 때 위의 드로어 블을 사용할 수 없었습니다. 해결책을 하나 더 찾았습니다

<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>

(여기에서 볼 수 있듯이 mainButtonColor는 투명하고 white_box는 흰색 단색으로 그릴 수있는 단순한 직사각형입니다)


2

이 xml을 사용하여 선택한 색상을 변경하십시오.

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

            </shape>
        </item>
        <!-- CONTENT LAYER -->
        <item android:bottom="2dp" >
            <shape>
                <solid android:color="#ffffff" />
            </shape>
        </item>
    </layer-list>
</item>

프로그래밍 방식으로 원하는 경우

public static Drawable getStorkLineDrawable(@ColorInt int colorStrok, int    iSize, int left, int top, int right, int bottom)

{
    GradientDrawable gradientDrawable = new GradientDrawable();
    gradientDrawable.setShape(GradientDrawable.RECTANGLE);
    gradientDrawable.setStroke(iSize, colorStrok);
    LayerDrawable layerDrawable = new LayerDrawable(new Drawable[]{gradientDrawable});
    layerDrawable.setLayerInset(0, left, top, right, bottom);
    return layerDrawable;
}

이 방법을 다음과 같이 호출하십시오.

  Drawable yourLineDrawable=  getStorkLineDrawable(yourColor, iSize, -iSize, -iSize, -iSize, 0);

2

이것은 나를 위해 가장 잘 작동했습니다.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:top="-5dp" android:left="-5dp" android:right="-5dp" android:bottom="0dp">
        <shape android:shape="rectangle">
            <stroke android:width="4dp" android:color="#ff0000"/>
        </shape>
    </item>
</layer-list>

하단에만 선을 표시합니다. 획 너비로 원하는 크기로 쉽게 변경할 수 있으며 그에 따라 상단, 왼쪽, 오른쪽을 업데이트 할 수도 있습니다.


2

이 작업을 수행하는 가장 쉬운 방법은 아래쪽 테두리를 원하는 위치에 배치하는 것입니다.

    <?xml version="1.0" encoding="utf-8"?>
    <View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="@color/colorPrimary" />

0

그것은 투명한 배경을 가진 완전히 투명한 Edittext입니다.

<item>
    <shape android:shape="rectangle" >
        <solid android:color="@color/transparent" />
    </shape>
</item>

<item android:top="-3dp" android:right="-3dp" android:left="-3dp">
    <shape>
        <solid android:color="@android:color/transparent" />
        <stroke

            android:width="2dp"
            android:color="@color/bottomline" />
    </shape>
</item>


0

간단한 솔루션 :

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

        <shape android:shape="rectangle">

            <solid android:color="#AARRGGBB" />

            <stroke
                android:width="5dp"
                android:color="@android:color/red"
                android:dashWidth="10dp"
                android:dashGap="12dp" />

        </shape>
    </item>
</layer-list>

그리고 마지막으로 다음과 같은 것이 있습니다. :)

여기에 이미지 설명 입력

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.