2010-12-12 5 views
5

Android에서는 다른보기가 포함 된 버튼을 만들고 싶습니다. 예를 들어, 다음과 같은 내용이 있습니다.여러 개의 뷰가 포함 된 버튼을 만드는 방법은 무엇입니까?

+---------------------------+ 
| Hello world! +-------+ | 
|     | image | | 
| Some more info +-------+ | 
+---------------------------+ 

그러나이 특정 예보다 유연합니다. 이상적으로 버튼에는 ViewGroup이 포함될 수 있으므로 레이아웃을 별도의 XML 파일로 구현할 수 있습니다. 그러나 Button은 View를 확장하지만 ViewGroup은 확장 할 수 없으므로 불가능합니다.

표준 Android 구성 요소를 사용하여이를 수행 할 수있는 방법이 있습니까? 아니면 사용자 정의 버튼 클래스를 작성해야합니까? 요청으로


, 트릭 않는 몇 가지 예제 XML :

내가 명시 적으로 TextViews의 색상을 설정했다
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:focusable="true" 
    android:clickable="true" 
    android:background="@android:drawable/btn_default"> 
    <TextView 
     android:id="@+id/name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="@android:color/primary_text_light"/> 
    <TextView 
     android:id="@+id/additional_line_1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="@android:color/primary_text_light"/> 
    <TextView 
     android:id="@+id/additional_line_2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="@android:color/primary_text_light"/> 
</LinearLayout> 

, 그렇지 않으면 그들은 거의 읽을 것을 (그들은 기본적으로 흰색입니다) . SDK에서 식별자를 뽑아 냈습니다 : .../platforms/android-7/data/res/values/public.xml. 이상하게도 primary_text_light은 검은 색 텍스트를 표시하는 반면 primary_text_dark은 흰색을 나타냅니다 ...

+0

25.3k 담당자가이 질문을하고 있습니까? 나는 너에게 힌트를 줄 것이다 ... 너 자신의 수업을 써라 .... 아니면 그 요점을 놓쳤는가? – Squonk

+7

정말요? 명성은 동료가 어딘가에 갇혀서 몇 가지 조언을 구할 수 없다는 것을 의미합니까? –

+0

나는 또한 사용자 정의보기 (그룹) 클래스를 만들 것이라고 말하고 싶습니다. –

답변

4

원하는 버튼의 레이아웃을 만들고 android:background@android:drawable/btn_default으로 설정하십시오. 나머지가 포함 된 가장 바깥 쪽보기를 clickablefocusable으로 만들면 끝났습니다.

+0

흥미 롭다 ... @ 토마스 :이 작품은, 짧은 샘플 XML을 공유하시기 바랍니다, 나는 매우 관심이 많습니다 :) – WarrenFaith

+1

@WarrenFaith : 그런 종류의 일들이 잘 작동합니다. 나는'android : background = "@ android : drawable/edit_text"를'EditText'와 같이 보이도록'Button'에 설정했습니다. (날짜 선택기를 사용하여 피하는 날짜 유효성 검사 :) :) – Macarse

+0

@WarrenFaith : 나는 XML을 질문에 넣었습니다. – Thomas

1

잘 모르겠지만 ImageButton 클래스를 사용해 보셨습니까? 나는 당신이 이미지를 오른쪽으로 설정할 수 있어야하고 새로운 라인이있는 레이블을 추가 할 수 있어야한다고 생각한다.

[업데이트] 더 유연한 부분을 놓쳤습니다. 좀 더 유연한 솔루션을 원한다면 모든 가능한 상태를 처리하고 클릭을 감지하기 위해 자체 OnTouchListener을 사용하여 구현을 직접 작성해야합니다.

0

나는 그것에 대한 클래스를 만들지 않을 것이다. 두 개의 TextViewImageView이있는 것은 단지 RelativeLayout입니다.

알고 계신 것처럼 ViewGroupView으로 확장되고 View에는 클릭 수신기가있을 수 있습니다. 따라서 레이아웃을 생성하고 클릭 리스너를 설정해야합니다.

여기서 문제는 상태를 처리하는 방법이며, @android:drawable/btn_default을 @ognian이 말한 배경으로 사용해 볼 수 있습니다.

관련 문제