[android] 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/..."
. 그리고 예 6×6이 필요합니다-5×5를 시도했지만 작동하지 않았습니다.
이 방법의 단점은 색상을 매우 쉽게 변경할 수 없지만 멋진 테두리 (예 :이 질문에서와 같이 위쪽 및 아래쪽 테두리 만)를 원하면 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>
높이와 배경색을 원하는대로 변경할 수 있습니다.