Android View의 상단과 하단에 테두리를 추가하는 쉬운 방법이 있습니까?
TextView가 있고 위쪽 및 아래쪽 테두리를 따라 검은 색 테두리를 추가하고 싶습니다. 나는 추가 시도 android:drawableTop
하고 android:drawableBottom
텍스트 뷰에 있지만, 단지 전체보기 검정이 될 일으켰습니다.
<TextView
android:background="@android:color/green"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawableTop="@android:color/black"
android:drawableBottom="@android:color/black"
android:text="la la la" />
Android의 View (특히 TextView)에 위쪽 및 아래쪽 테두리를 쉽게 추가하는 방법이 있습니까?
안드로이드 2.2에서는 다음을 수행 할 수 있습니다.
/res/drawable/textlines.xml과 같은 XML 드로어 블을 만들고이를 TextView의 배경 속성으로 할당합니다.
<TextView
android:text="My text with lines above and below"
android:background="@drawable/textlines"
/>
/res/drawable/textlines.xml
<?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="#FF000000" />
<solid android:color="#FFDDDDDD" />
</shape>
</item>
<item android:top="1dp" android:bottom="1dp">
<shape
android:shape="rectangle">
<stroke android:width="1dp" android:color="#FFDDDDDD" />
<solid android:color="#00000000" />
</shape>
</item>
</layer-list>
단점은 투명 용지가 작동하지 않으므로 불투명 한 배경색을 지정해야한다는 것입니다. (적어도 나는 그들이 생각했지만 실수했습니다). 위의 예에서 첫 번째 도형 #FFdddddd의 단색이 두 번째 도형 획 색상으로 복사되어 있음을 알 수 있습니다.
테두리가 컨테이너 외부에 표시되도록 트릭을 사용했습니다. 이 트릭을 사용하면 선만 그려 지므로 배경이 기본보기로 표시됩니다.
<?xml version="1.0" encoding="utf-8"?>
<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="1dp"
android:color="#FF000000" />
<solid android:color="#00FFFFFF" />
<padding android:left="10dp"
android:right="10dp"
android:top="10dp"
android:bottom="10dp" />
</shape>
</item>
</layer-list>
옵션 1 : 도형 드로어 블
배경을 설정할 수있는 레이아웃 또는보기 주위에 테두리를 원하는 경우 가장 간단한 옵션입니다. drawable
폴더에 다음과 같은 XML 파일을 작성하십시오 .
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#8fff93" />
<stroke
android:width="1px"
android:color="#000" />
</shape>
solid
채우기를 원하지 않으면를 제거 할 수 있습니다 . background="@drawable/your_shape_drawable"
레이아웃 / 뷰 의 세트 .
옵션 2 : 배경보기
여기에 사용한 약간의 트릭이 RelativeLayout
있습니다. 기본적으로 뷰 아래에 테두리를 제공하려는 검은 사각형이 있고 그 뷰에 여백이 아닌 패딩을 제공하여 검은 사각형이 가장자리에 나타납니다.
뷰에 투명한 영역이없는 경우에만 제대로 작동합니다. 그렇다면 BorderView
테두리를 그리는 사용자 정의 를 작성하는 것이 좋습니다 . 수십 줄의 코드 일뿐입니다.
<View
android:id="@+id/border"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/image"
android:layout_alignLeft="@+id/image"
android:layout_alignRight="@+id/image"
android:layout_alignTop="@+id/main_image"
android:background="#000" />
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_...
android:padding="1px"
android:src="@drawable/..." />
당신이 궁금해하는 경우, 그것은 수행 과 일을 adjustViewBounds=true
. 당신은 전체의 배경을하려는 경우에는 작동하지 않습니다 RelativeLayout
당신이 작성 중지 버그가 있기 때문에, RelativeLayout
A의가 View
. 이 경우 Shape
드로어 블을 권장합니다 .
옵션 3 : 9 패치
마지막 옵션은 다음과 같이 9 패치 드로어 블을 사용하는 것입니다.
설정할 수있는 모든보기에서 사용할 수 있습니다 android:background="@drawable/..."
. 그리고 예 6x6이어야합니다-5x5를 시도했지만 작동하지 않았습니다.
이 방법의 단점은 색상을 매우 쉽게 변경할 수 없지만 멋진 테두리 (예 :이 질문에서와 같이 위쪽 및 아래쪽에 테두리 만)를 원하면 Shape
드로어 블을 사용 하여 테두리를 만들 수 없습니다 매우 강력하지 않습니다.
옵션 4 : 추가 조회수
뷰 위와 아래에 테두리 만 원하는 경우이 간단한 옵션을 언급하는 것을 잊었습니다. 뷰를 세로로 LinearLayout
(아직없는 경우) 넣은 다음 View
위와 아래에 빈 s 를 추가 하십시오.
<View android:background="#000" android:layout_width="match_parent" android:layout_height="1px"/>
1dp
하단에만 흰색 테두리 를 추가하고 투명한 배경을 얻으려면 여기에서 대부분의 답변보다 간단한 다음을 사용할 수 있습니다.
위해 TextView
또는 다른 뷰 추가 :
android:background="@drawable/borderbottom"
그리고 drawable
디렉토리에 다음 XML을 추가하십시오.borderbottom.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:top="-2dp" android:left="-2dp" android:right="-2dp">
<shape android:shape="rectangle">
<stroke android:width="1dp" android:color="#ffffffff" />
<solid android:color="#00000000" />
</shape>
</item>
</layer-list>
당신은 상단에 테두리를 원하는 경우, 변경 android:top="-2dp"
에android:bottom="-2dp"
색상이 흰색 일 필요는 없으며 배경도 투명하지 않아도됩니다.
solid
요소는 필요하지 않을 수 있습니다. 이것은 디자인에 달려 있습니다 (V. Kalyuzhnyu 덕분에).
기본적으로이 XML은 사각형 모양을 사용하여 테두리를 만든 다음 모양의 렌더링 영역 위로 위쪽, 오른쪽 및 왼쪽을 밀어냅니다. 아래쪽 테두리 만 보입니다.
현재 승인 된 답변이 작동하지 않습니다. 앤티 앨리어싱의 결과로보기의 왼쪽과 오른쪽에 얇은 세로 테두리가 만들어집니다.
이 버전은 완벽하게 작동합니다. 또한 테두리 너비를 독립적으로 설정할 수 있으며 원하는 경우 왼쪽 / 오른쪽에 테두리를 추가 할 수도 있습니다. 유일한 단점은 투명성을 지원하지 않는다는 것입니다.
/res/drawable/top_bottom_borders.xml
아래 코드로 이름이 지정된 XML 드로어 블을 만들고 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="#DDDD00" /> <!-- border color -->
</shape>
</item>
<item
android:bottom="1dp"
android:top="1dp"> <!-- adjust borders width here -->
<shape android:shape="rectangle">
<solid android:color="#FFFFFF" /> <!-- background color -->
</shape>
</item>
</layer-list>
마시멜로를 통해 안드로이드 킷캣에서 테스트
그래서 ListView 디바이더를 시뮬레이트하기 위해 아래쪽에 테두리 만 약간 다른 것을 원했습니다. Piet Delport의 답변을 수정하고 이것을 얻었습니다.
<?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/background_trans_light" />
</shape>
</item>
<!-- this mess is what we have to do to get a bottom border only. -->
<item android:top="-2dp"
android:left="-2dp"
android:right="-2dp"
android:bottom="1px">
<shape
android:shape="rectangle">
<stroke android:width="1dp" android:color="@color/background_trans_mid" />
<solid android:color="@null" />
</shape>
</item>
</layer-list>
dp 대신 px를 사용하여 정확히 1 픽셀 분할기를 얻으십시오 (일부 전화 DPI에서는 1dp 선이 사라짐).
@Nic Hubbard가 말했듯이 경계선을 추가하는 매우 쉬운 방법이 있습니다.
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="#000000" >
</View>
높이와 배경색을 원하는대로 변경할 수 있습니다.
또한 FrameLayout에서 뷰를 래핑 한 다음 프레임의 배경색과 패딩을 원하는 것으로 설정할 수 있습니다. 그러나 텍스트 뷰에는 기본적으로 '투명한'배경이 있으므로 텍스트 뷰의 배경색도 변경해야합니다.
내 대답은 @Emile 버전을 기반으로하지만 단색 대신 투명 색상을 사용합니다.
이 예제는 2dp 아래쪽 테두리를 그립니다.
<?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="2dp"
android:color="#50C0E9" />
<solid android:color="@android:color/transparent" />
</shape>
</item>
<item android:bottom="2dp" >
<shape android:shape="rectangle" >
<stroke android:width="2dp"
android:color="@color/bgcolor" />
<solid android:color="@android:color/transparent" />
</shape>
</item>
</layer-list>
@ color / bgcolor 는 테두리로 뷰를 그리는 배경의 색상입니다.
테두리의 위치를 변경하려면 다음 중 하나를 사용하여 오프셋을 변경하십시오.
android:bottom="2dp"
android:top="2dp"
android:right="2dp"
android:left="2dp"
또는 두 개 이상의 테두리를 갖도록 결합하십시오.
android:bottom="2dp" android:top="2dp"
배경색으로 1dp 높이의 뷰를 만드는 것이 어떻습니까? 그런 다음 원하는 곳에 쉽게 배치 할 수 있습니다.
내 솔루션을 목록에 추가하기 만하면됩니다 ..
원래 모양 위로 확장되는 반투명 아래쪽 테두리를 원했습니다 (따라서 반투명 테두리는 부모 사각형 외부 에 있었습니다 ).
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle" >
<solid android:color="#33000000" /> <!-- Border colour -->
</shape>
</item>
<item android:bottom="2dp" >
<shape android:shape="rectangle" >
<solid android:color="#164586" />
</shape>
</item>
</layer-list>
어느 것이 나에게 준다;
먼저 아래에 표시된 내용으로 xml 파일을 만들고 border.xml로 이름을 지정하고 res 디렉토리의 레이아웃 폴더 안에 배치하십시오.
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke android:width="1dp" android:color="#0000" />
<padding android:left="0dp" android:top="1dp" android:right="0dp"
android:bottom="1dp" />
</shape>
그 후 코드 사용 내부
TextView tv = (TextView)findElementById(R.id.yourTextView);
tv.setBackgroundResource(R.layout.border);
TextView의 위쪽과 아래쪽에 검은 선이 나타납니다.
이것을 바꾸려면 :
<TextView
android:text="My text"
android:background="@drawable/top_bottom_border"/>
"drawable / top_bottom_border.xml"에서이 방법을 선호합니다.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<gradient
android:angle="270"
android:startColor="#000"
android:centerColor="@android:color/transparent"
android:centerX="0.01" />
</shape>
</item>
<item>
<shape>
<gradient
android:angle="90"
android:startColor="#000"
android:centerColor="@android:color/transparent"
android:centerX="0.01" />
</shape>
</item>
</layer-list>
이렇게하면 배경색이있는 경우 표시되는 사각형이 아닌 테두리 만 만들어집니다.
아래 코드를 작성하십시오
<View
android:layout_width="wrap_content"
android:layout_height="2dip"
android:layout_below="@+id/topics_text"
android:layout_marginTop="7dp"
android:layout_margin="10dp"
android:background="#ffffff" />
를 사용하여 테두리를 삽입하는 테두리를 추가하는 가장 간단한 방법은 InsetDrawable
다음과 같이 상단 테두리 만 표시합니다.
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetBottom="-2dp"
android:insetLeft="-2dp"
android:insetRight="-2dp">
<shape android:shape="rectangle">
<solid android:color="@color/light_gray" />
<stroke
android:width=".5dp"
android:color="@color/dark_gray" />
</shape>
</inset>
이미지를 linearlayout으로 감싸고 배경을 텍스트 주위의 테두리 색상으로 설정하십시오. 그런 다음 textview의 패딩을 원하는 두께로 설정하십시오.
9- 경로를 사용하여 작업을 수행 할 수도 있습니다. 컬러 픽셀이 높이가 아니라 투명 픽셀 만 증가하도록 만듭니다.
그것을 달성하는 방법은 다음과 같습니다.
<?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="@color/grey_coaching_text" />
</shape>
</item>
<item
android:bottom="1dp"
android:top="1dp">
<shape android:shape="rectangle">
<solid android:color="@color/white" />
</shape>
</item>
</layer-list>
첫 번째 항목은 획이고 두 번째는 단색 배경입니다. 왼쪽과 오른쪽 테두리를 숨 깁니다.
상단과 하단에 뷰를 추가하기 만하면됩니다. View
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/your_color"
app:layout_constraintBottom_toTopOf="@+id/textView"
app:layout_constraintEnd_toEndOf="@+id/textView"
app:layout_constraintStart_toStartOf="@+id/textView" />
<TextView
android:id="@+id/textView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:gravity="center"
android:text="Testing"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/your_color"
app:layout_constraintEnd_toEndOf="@+id/textView"
app:layout_constraintStart_toStartOf="@+id/textView"
app:layout_constraintTop_toBottomOf="@+id/textView" />
</android.support.constraint.ConstraintLayout>
// Just simply add border around the image view or view
<ImageView
android:id="@+id/imageView2"
android:layout_width="90dp"
android:layout_height="70dp"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:layout_toLeftOf="@+id/imageView1"
android:background="@android:color/white"
android:padding="5dip" />
// After that dynamically put color into your view or image view object
objView.setBackgroundColor(Color.GREEN);
//VinodJ/Abhishek
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/light_grey1" />
<stroke
android:width="1dip"
android:color="@color/light_grey1" />
<corners
android:bottomLeftRadius="0dp"
android:bottomRightRadius="0dp"
android:topLeftRadius="5dp"
android:topRightRadius="5dp" />
</shape>
<TextView
android:id="@+id/textView3"
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="#72cdf4"
android:text=" aa" />
테두리를 추가하려는 텍스트 아래 에이 TextView를 추가하십시오.
다만 집행 @phreakhead의 및 user1051892의 답변을 <item android:bottom|android:left|android:right|android:top>
부정적해야보다 커지게되면 <stroke android:width>
. 그렇지 않으면 항목의 그림이 획의 그림과 혼합되어이 값이 작동하지 않는다고 생각할 수 있습니다.
'Programing' 카테고리의 다른 글
통합 관리 파이프 라인 모드에 적용되지 않는 ASP.NET 설정이 감지되었습니다. (0) | 2020.02.25 |
---|---|
pip를 사용하여 Python 패키지를 다른 디렉토리에 설치 하시겠습니까? (0) | 2020.02.25 |
jQuery.Ajax로 파일 다운로드 (0) | 2020.02.25 |
리눅스 명령 줄에서 여러 파일의 문자열을 바꾸는 방법 (0) | 2020.02.25 |
가장 가까운 문자열 일치 (0) | 2020.02.25 |