안드로이드 버튼 선택기


115

정상적인 경우 빨간색으로 표시되고 누르면 회색으로 표시되는 버튼 선택기입니다.

눌렀을 때 텍스트 크기와 색상도 변경 될 수 있도록 코드를 추가로 직접 수정하려면 어떻게해야합니까? 감사합니다!

<item android:state_pressed="true" >         
    <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
        <stroke android:width="2dp" android:color="@color/black" />
        <solid android:color="@color/grey"/>
        <padding android:left="5dp" android:top="2dp" 
            android:right="5dp" android:bottom="2dp" /> 
        <corners android:radius="5dp" /> 
    </shape>    
</item>

<item>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
        <stroke android:width="2dp" android:color="@color/black" />
        <solid android:color="#FF6699"/>
        <padding android:left="5dp" android:top="2dp" 
            android:right="5dp" android:bottom="2dp" /> 
        <corners android:radius="5dp" /> 
    </shape>
</item>

답변:


217

당신은 설정해야합니다 selectorbutton레이아웃 파일에.

<Button
     android:id="@+id/button1"
     android:background="@drawable/selector_xml_name"
     android:layout_width="200dp"
     android:layout_height="126dp"
     android:text="Hello" />

그리고 끝났습니다.

편집하다

다음은 디렉토리의 button_effect.xml파일입니다.drawable

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

    <item android:drawable="@drawable/numpad_button_bg_selected" android:state_selected="true"></item>
    <item android:drawable="@drawable/numpad_button_bg_pressed" android:state_pressed="true"></item>
    <item android:drawable="@drawable/numpad_button_bg_normal"></item>

</selector>

여기에서 3 개의 드로어 블이 있음을 알 수 있습니다 . 위에서 썼 듯이이 button_effect스타일을 button. 당신 selector_xml_namebutton_effect.


눌러 진 상태와 누르지 않은 상태를 설정하는 방법에 대해 자세히 설명해 주시겠습니까? (둥근 색상, 획 등 위의 모든 구성 요소 포함). 감사합니다!
pearmak

선택기를 구현하는 가장 좋은 방법은 XML이 참조 사용하는 것입니다 blazin.in/2016/03/how-to-use-selectors-for-botton.html 이 당과의 작업으로 구현 난
Bhushan Shirsath

안녕하세요,이 게시물을 작성한 지 오래되었다는 것을 알고 있지만 내가 무엇을 놓치고 있는지 알게 될 것입니다. 나는 당신의 코드를 사용했고 내 버튼은 항상 녹색이고 눌렀을 때 = true이고 = true를 선택하면 드로어 블이 회색으로 변경되지만 다른 활동이 열리기 전의 secod에는 기본 안드로이드 스타일이 있습니다. 내가 놓친 상태가 무엇인지 아십니까?
volfk

27

상태 목록 드로어 블로 는 텍스트 크기를 변경할 수 없습니다 . 텍스트 색상 및 텍스트 크기를 변경하려면 다음과 같이하십시오.

텍스트 색상

텍스트 색상을 변경하려면 색상 상태 목록 리소스를 만들 수 있습니다 . res/color/디렉토리 에있는 별도의 리소스입니다 . 레이아웃 xml에서 android:textColor속성 값으로 설정해야 합니다. 그러면 색상 선택기에 다음과 같은 내용이 포함됩니다.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/text_pressed" />
    <item android:color="@color/text_normal" />
</selector>

텍스트 크기

리소스만으로는 텍스트의 크기를 변경할 수 없습니다. "dimen selector"가 없습니다. 코드에서해야합니다. 그리고 직접적인 해결책은 없습니다.

아마도 가장 쉬운 해결책은 View.onTouchListener()그에 따라 up 및 down 이벤트를 활용 하고 처리하는 것입니다. 다음과 같이 사용하십시오.

view.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                // change text size to the "pressed value"
                return true;
            case MotionEvent.ACTION_UP:
                // change text size to the "normal value"
                return true;
            default:
                return false;
            }
        }
});

다른 해결책은 뷰를 확장하고 setPressed(Boolean)메서드를 재정의하는 것입니다. 이 메서드는 눌림 상태가 변경 될 때 내부적으로 호출됩니다. 그런 다음 메서드 호출에서 그에 따라 텍스트의 크기를 변경합니다 (수퍼를 호출하는 것을 잊지 마십시오).


14

드로어 블 폴더에 custom_selector.xml 생성

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@drawable/unselected" android:state_pressed="true" />
   <item android:drawable="@drawable/selected" />
</selector>

드로어 블 폴더에 selected.xml 모양 만들기

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="90dp">
   <solid android:color="@color/selected"/>
   <padding />
   <stroke android:color="#000" android:width="1dp"/>
   <corners android:bottomRightRadius="15dp" android:bottomLeftRadius="15dp" android:topLeftRadius="15dp" android:topRightRadius="15dp"/>
</shape>

드로어 블 폴더에 unselected.xml 모양 만들기

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="90dp">
   <solid android:color="@color/unselected"/>
   <padding />
   <stroke android:color="#000" android:width="1dp"/>
   <corners android:bottomRightRadius="15dp" android:bottomLeftRadius="15dp" android:topLeftRadius="15dp" android:topRightRadius="15dp"/>
</shape>

값 폴더의 color.xml에 선택 / 선택되지 않은 상태에 대해 다음 색상을 추가합니다.

<color name="selected">#a8cf45</color>
<color name="unselected">#ff8cae3b</color>

여기 에서 완전한 솔루션을 확인할 수 있습니다.


2

선택기를 구현하는 가장 좋은 방법은 프로그래밍 방식을 사용하는 대신 xml을 사용하는 것입니다.

    <?xml version="1.0" encoding="utf-8"?>    
<selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@drawable/button_bg_selected" android:state_selected="true"></item>
        <item android:drawable="@drawable/button_bg_pressed" android:state_pressed="true"></item>
        <item android:drawable="@drawable/button_bg_normal"></item>

    </selector>

자세한 내용은 http://www.blazin.in/2016/03/how-to-use-selectors-for-botton.html 링크를 사용하여 구현했습니다 .


2

레이아웃 .xml 파일

<Button
 android:id="@+id/button1"
 android:background="@drawable/btn_selector"
 android:layout_width="100dp"
 android:layout_height="50dp"
 android:text="press" />

btn_selector.xml

<?xml version="1.0" encoding="utf-8"?>

 <item android:drawable="@drawable/btn_bg_selected" android:state_selected="true"></item>
<item android:drawable="@drawable/btn_bg_pressed" android:state_pressed="true"></item>
<item android:drawable="@drawable/btn_bg_normal"></item>


1

이 코드를 사용할 수 있습니다.

<Button
android:id="@+id/img_sublist_carat"
android:layout_width="70dp"
android:layout_height="68dp"
android:layout_centerVertical="true"
android:layout_marginLeft="625dp"
android:contentDescription=""
android:background="@drawable/img_sublist_carat_selector"
android:visibility="visible" />

(선택기 파일) img_sublist_carat_selector.xml :

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_focused="true" 
       android:state_pressed="true"        
       android:drawable="@drawable/img_sublist_carat_highlight" />
 <item android:state_pressed="true" 
       android:drawable="@drawable/img_sublist_carat_highlight" />
 <item android:drawable="@drawable/img_sublist_carat_normal" />
</selector>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.