2011-12-16 2 views
7

내 응용 프로그램에서는 GMail 앱 UI의 레이블과 모양이 비슷합니다. 알지 못하는 사람들은 다음과 같이 보입니다 (레이블은 이러한 화려한 막대입니다) : Gmail screenshot추가, 수직 안쪽 여백이있는 BackgroundColorSpan

비슷한 효과를 얻으려면 각 패치마다 드로어 블을 사용합니다. 각 라벨에 대해 TextView를 만들고 드로어 블을 할당합니다 . 이것은 간단한 해결책이지만, 나는 그것을 좋아하지 않는다. 그것은 우아하지 않다, 그것은 프로파일 러에 의해 보여지는 것처럼 아주 느리다. 그리고 나는 그것이 그것을하는 올바른 방법이라고 생각하지 않는다.

UI의 디자인을 "ICS-y"로 변경하여 레이블에서 둥근 모서리를 제거했습니다. 그리고 어떻게 9 패치 솔루션을 대체 할 수 있을지 생각하기 시작했습니다. 가장 확실한 것은 BackgroundColorSpan을 사용하는 것입니다. 하지만 하나의 작은 단점이 있습니다. 내 레이블에 약간의 패딩이 있어야합니다. 드로어 블을 사용하면 쉽게 달성 할 수있었습니다. 스팬을 사용하면 힘들어집니다. 가로 채우기를 만들기 위해 문자열의 처음과 끝에 공백을 추가 할 수 있습니다. 하지만 수직 패딩을 더 크게 만드는 방법은 무엇입니까? 물건을 지우려면이 BackgroundColorSpan와 라벨의 스크린 샷입니다 :

enter image description here

내가 색 부분 위에 큰 텍스트 아래 만들고 싶어. 어떤 종류의 MetricAffectingSpan을 사용해야한다고 생각하지만 어느 것이지 파악할 수 없었습니다. 아니면 내 자신을 써야 하나? 아니면, 마지막으로, 아마 나의 필요를 충족시킬 수없는 스팬일지도 모르겠다. 나는 이미지를 유지하거나 캔버스를 만들고 GMail 앱 에서처럼 "수동으로"모든 것을 그려야한다.

답변

2

GMAIL 앱이 사용하고있는 가장 쉬운 방법은 모양입니다.

사용자 정의 shape을 작성하고 둥근 모서리와 단색을 가진 사각형 모양을 작성한 다음이 드로어 블을 텍스트 뷰의 background 특성에 지정하십시오.

모양이 xml로 정의됩니다. 다음과 같이 지정합니다 :

<TextView 
    ... 
    android:background="@drawable/my_awesome_shape" /> 
+0

+1 도형의 경우 도형을 결합하여 그림자를 추가하는 등의 고급 작업을 수행 할 수도 있습니다. – Guillaume

+0

감사! 이미지보다 확실히 개선 된 기능입니다. 그러나 Spans를 사용하면 하나의 TextView에 두 개 이상의 레이블을 표시 할 수 있습니다. 모양이 틀리면 틀린 부분을 수정하십시오. 쉽게 수행 할 수 없습니까? – user1234567

+0

도형을 도형과 똑같이 사용할 수 있기 때문에 이것은 정확합니다. – poitroae