programing

선형 레이아웃의 한 면에만 테두리를 그리는 방법은 무엇입니까?

mailnote 2023. 11. 2. 22:01
반응형

선형 레이아웃의 한 면에만 테두리를 그리는 방법은 무엇입니까?

선형 레이아웃의 테두리를 그릴 수는 있지만, 모든 면에 그려지고 있습니다.CSS에서처럼 오른쪽으로만 제한하고 싶습니다(경계 오른쪽:1px solid red;).

이것을 시도해 보았지만, 여전히 모든 면에서 그림이 그려집니다.

<?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:height="2dp"
            android:width="2dp"
            android:color="#FF0000" />

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

        <padding
            android:bottom="0dp"
            android:left="0dp"
            android:right="1dp"
            android:top="0dp" />

        <corners
            android:bottomLeftRadius="0dp"
            android:bottomRightRadius="5dp"
            android:radius="1dp"
            android:topLeftRadius="5dp"
            android:topRightRadius="0dp" />
    </shape>
</item>

이 작업을 수행하는 방법에 대한 제안이 있습니까?

그건 그렇고, 저는 필요한 쪽에 너비 1dp의 뷰를 넣는 해킹을 사용하고 싶지 않습니다.

이를 이용해 한쪽에 테두리를 둘 수 있습니다.

<?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="#FF0000" />
    </shape>
</item>
<item android:left="5dp">
    <shape android:shape="rectangle">
        <solid android:color="#000000" />
    </shape>
</item>
</layer-list>

편집됨

저를 포함한 많은 사람들이 투명한 배경의 한쪽 경계를 갖기를 원했기 때문에, 저는 그것을 실행했습니다.BorderDrawableCSS를 사용하는 것과 같은 방법으로 크기와 색상이 다른 테두리를 나에게 줄 수 있습니다.그러나 이것은 xml을 통해서는 사용할 수 없습니다.XML을 지원하기 위해 추가했습니다.BorderFrameLayout당신의 레이아웃을 감쌀 수 있는.

완전한 출처는 제 github을 보세요.

파이처럼 쉽고 투명한 bg 허용:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:angle="0"
        android:startColor="#f00"
        android:centerColor="@android:color/transparent"
        android:centerX="0.01" />
</shape>

테두리 위치를 변경하려면 각도를 변경합니다.

  • 0 = 왼쪽
  • 90 = 하의
  • 180 = 오른쪽
  • 270 = 상의

또한 단일 레이어를 사용하여 원하는 것을 구현할 수 있습니다.

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

    <item
        android:bottom="-5dp"
        android:right="-5dp"
        android:top="-5dp">
        <shape android:shape="rectangle" >
            <solid android:color="@color/color_of_the_background" />

            <stroke
                android:width="5dp"
                android:color="@color/color_of_the_border" />
        </shape>
    </item>

</layer-list>

이 방법은 왼쪽 테두리만 보이지만 당신은 당신이 원하는 어떤 조합을 가지고 놀면 얻을 수 있습니다.bottom,left,right그리고.top의 속성item요소

그리기 가능한 한 쪽에만 테두리를 만들려면 음을 적용합니다.inset(화면 밖으로 해당 테두리가 그려짐).

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetTop="-2dp" 
    android:insetBottom="-2dp"
    android:insetLeft="-2dp">

    <shape android:shape="rectangle">
        <stroke android:width="2dp" android:color="#FF0000" />
        <solid android:color="#000000" />
    </shape>

</inset>

enter image description here

이 접근법은 naykah의 대답과 비슷하지만 a를 사용하지 않습니다.layer-list.

또 하나의 훌륭한 예.

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<inset xmlns:android="http://schemas.android.com/apk/res/android"
     android:insetRight="-2dp">
     
     <shape android:shape="rectangle">
         <corners
             android:bottomLeftRadius="4dp"
             android:bottomRightRadius="0dp"
             android:topLeftRadius="4dp"
             android:topRightRadius="0dp" />
         <stroke
             android:width="1dp"
             android:color="#70b23f" />
         <solid android:color="@android:color/transparent" />
     </shape>
     
</inset>

(배경을 사용하지 않을 경우) 대안으로 다음과 같이 보기를 만들어 쉽게 할 수 있습니다.

<View
    android:layout_width="2dp"
    android:layout_height="match_parent"
    android:background="#000000" />

오른쪽 테두리만 있는 경우에는 레이아웃(테두리를 가질 위치) 뒤에 배치합니다.

<View
    android:layout_width="2dp"
    android:layout_height="match_parent"
    android:background="#000000" />

왼쪽 테두리만 있는 경우, 테두리를 가질 레이아웃 앞에 배치합니다(테두리를 가질 위치).

저를 위해 일했죠도움이 되기를..

다음 코드로 효과를 얻을 수 있었습니다.

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

변위 방향을 변경하여 테두리 위치에 대한 요구를 조정할 수 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" >
        <shape>
            <solid
                android:color="#f28b24" />
            <stroke
                android:width="1dp"
                android:color="#f28b24" />
            <corners
                android:radius="0dp"/>
            <padding
                android:left="0dp"
                android:top="0dp"
                android:right="0dp"
                android:bottom="0dp" />
        </shape>
    </item>
    <item>
        <shape>
            <gradient
                android:startColor="#f28b24"
                android:endColor="#f28b24"
                android:angle="270" />
            <stroke
                android:width="0dp"
                android:color="#f28b24" />
            <corners
                android:bottomLeftRadius="8dp"
                android:bottomRightRadius="0dp"
                android:topLeftRadius="0dp"
                android:topRightRadius="0dp"/>
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector>

여기에는 9패치 파일에 대한 언급이 없습니다.예, 파일을 생성해야 하지만 작업이 매우 쉽고 "교차 버전 및 투명성 지원" 솔루션입니다.파일이 에 배치된 경우drawable-nodpi디렉토리, 작동합니다.px기반을 둔, 그리고.drawable-mdpi(리샘플 덕분에) 대략 dp 베이스로 작동합니다.

원래 질문(경계 오른쪽:1px 빨간색 실선;)의 예제 파일은 다음과 같습니다.

http://ge.tt/517ZIFC2/v/3?c

그냥 갖다 줘요.drawable-nodpi디렉토리 입니다.

다양한 색상의 테두리.저는 3가지 아이템을 사용했습니다.

<?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/colorAccent" />
        </shape>
    </item>
    <item android:top="3dp">
        <shape android:shape="rectangle">
            <solid android:color="@color/light_grey" />
        </shape>
    </item>
    <item
        android:bottom="1dp"
        android:left="1dp"
        android:right="1dp"
        android:top="3dp">
        <shape android:shape="rectangle">
            <solid android:color="@color/colorPrimary" />
        </shape>
    </item>
</layer-list>

용기에 래핑하고 시작 왼쪽 하단 상단의 여백을 정의할 수 있습니다.왼쪽에 여유를 제공하고 싶다고 가정하면 이렇게 할 수 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@color/light_blue"
    >
    <TextView
        android:marginStart="2dp" // This is Your border
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:padding="16dp"
        android:text="a"
        android:textColor="@color/light_blue"
        android:textSize="25dp" />
</RelativeLayout>

언급URL : https://stackoverflow.com/questions/9211208/how-to-draw-border-on-just-one-side-of-a-linear-layout

반응형