Android : 선택기에서 비활성화 된 버튼의 textColor가 표시되지 않습니까?


98

선택기로 버튼을 만들려고합니다. 내 버튼의 상태는 다음과 같습니다.

  • 활성화 / 비활성화
  • 누름 / 눌리지 않음

위에서 언급 한 상태에 따르면. 버튼을 조작해야합니다.

  • 텍스트 색상
  • 배경 이미지

버튼은 비활성화 된 상태에서 시작되므로 비활성화 된 textColor 및 비활성화 된 버튼 배경이 있어야합니다. 하지만 기본 textColor (스타일로 지정됨)와 배경 이미지 없음을 볼 수 있습니다!

여기 내 선택기 button_selector.xml이 있습니다.

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

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="false"
        android:state_enabled="false"
        android:textColor="#9D9FA2"
        android:drawable="@drawable/button" />    

    <item android:state_pressed="true"
        android:state_enabled="true"
        android:drawable="@drawable/button_pressed"/>

    <item android:state_pressed="true"
        android:state_enabled="false"
        android:textColor="#9D9FA2"
        android:drawable="@drawable/button"/>

    <item android:state_pressed="false"
        android:state_enabled="true"
        android:drawable="@drawable/button"/>    

</selector>

그리고 여기 내 layout.xml의 버튼 선언이 있습니다.

    <Button android:id="@+id/reserve_button"
        android:text="@string/reserve_button"
        android:layout_width="120dp"
        android:layout_height="40dp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="20dp"
        android:paddingRight="15dp"
        android:layout_gravity="left"
        style="@style/buttonStyle"
        android:background="@drawable/button_selector" />

그리고 마지막으로 이것은 내 스타일입니다 (내 기본 textColor가 설정된 곳)

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

 <resources>

     <style name="buttonStyle">
      <item name="android:textStyle">bold</item>
      <item name="android:textColor">#282780</item>
      <item name="android:textSize">18sp</item>
     </style>

</resources>

도와주세요!

답변:


251

ColorStateList다른 상태를 식별하는 텍스트 색상을 위해를 만들어야합니다 .

다음을 수행하십시오.

  1. res\color같은 이름의 다른 XML 파일을 만듭니다 text_color.xml.

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
      <!-- disabled state -->
      <item android:state_enabled="false" android:color="#9D9FA2" /> 
      <item android:color="#000"/>
    </selector>
    
  2. 에서 다음과 같이 style.xml해당 text_color.xml파일 에 대한 참조를 입력하십시오 .

    <style name="buttonStyle" parent="@android:style/Widget.Button">
      <item name="android:textStyle">bold</item>
      <item name="android:textColor">@color/text_color</item>
      <item name="android:textSize">18sp</item>
    </style>
    

이렇게하면 문제가 해결됩니다.


1
@ drawable / text_color로 참조하는 경우 text_color.xml 파일을 / res / drawable (/ res / color가 아닌)에 저장할 필요가 없습니까?
Erwan 2013 년

1
@ Erwan 수정 감사합니다. 실제로 편집 내역을 보면 드로어 블 폴더로 게시했고 어떤 멋진 사람이 색상으로 편집했지만 @colorbuttyStyle에서 업데이트하는 것을 잊었습니다 . 이제 업데이트되었습니다.
Adil Soomro

5
text_color.xml나는에 배치하지 않는 한 (적어도 나를 위해) 컴파일되지 않습니다 drawable로 참조해야합니다 폴더@drawable/text_color
알 Lelopath

@mickey 예, 맞습니다. 편집 내역을 보면 처음에는 드로어 블에서 제안되었지만 누군가가이를 컬러 폴더로 업데이트 했으므로 이제 수정했습니다.
Adil Soomro 2015 년

1
@ D3LIC1OU5 댓글을 보면 두 가지 방법 모두 작동하도록 지시되었습니다. 방금 문서를 참조했으며 Color State List Resource에color 대한 올바른 폴더입니다 . 편집을 환영합니다.
Adil Soomro

7

1. / res / 폴더에 색상 폴더를 만들고 xml에 색상 폴더를 만듭니다.

text_color_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <!-- disabled state --> 
<item android:state_enabled="false" android:color="#776678" /> 
 <item android:color="#ffffff"/>
</selector>

2. 이제 xml 레이아웃을 만듭니다.

 <Button

        android:id="@+id/button_search"

        android:layout_width="652dp"

        android:layout_height="48dp"

        android:layout_alignParentLeft="true"

        android:layout_alignParentTop="true"

        android:layout_marginTop="18dp"

        android:background="@android:color/transparent"

        android:text="Hello Bhaskar"

        android:textColor="@color/text_color_selector"/>  

4

가장 쉬운 해결책은 여기에서 본 것처럼 컬러 필터를의 배경 이미지와 버튼으로 설정하는 것입니다 .

다음과 같이 할 수 있습니다.

if ('need to set button disable')
    button.getBackground().setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY);
else
    button.getBackground().setColorFilter(null);

내가 누군가를 도왔 으면 좋겠다 ...


이것은 버튼 배경 이미지가 미리 준비되어 있지 않을 때이를 동적으로 수행하는 좋은 방법입니다. 그러나 이것은 텍스트 색상을 처리하지 않습니다.
Eran Goldin 2014-08-29

-1
<Button android:id="@+id/reserve_button"
        android:text="@string/reserve_button"
        android:layout_width="120dp"
        android:layout_height="40dp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="20dp"
        android:paddingRight="15dp"
        android:layout_gravity="left"
        style="@style/buttonStyle"
        android:background="@drawable/button_selector" />

레이아웃 xml에서 버튼을 볼 수 없습니다. 이것을 버튼 레이아웃에 추가하십시오.

android:enabled="false"

버튼 레이아웃은

<Button android:id="@+id/reserve_button"
        android:text="@string/reserve_button"
        android:layout_width="120dp"
        android:layout_height="40dp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="20dp"
        android:enabled="false"
        android:paddingRight="15dp"
        android:layout_gravity="left"
        style="@style/buttonStyle"
        android:background="@drawable/button_selector" />

@ Aqif Hamid 난 내 onCreat () 메서드에서 button.setEnabled (false) 프로그래밍 방식으로 수행합니다
Nouran H

-1

색상 목록을 만들 수 있습니다.

파일 위치 :

res/color/filename.xml

파일 이름은 리소스 ID로 사용됩니다.

리소스 참조 :

자바 : R.color.filename

XML에서 : @[package:]color/filename

통사론:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:color="hex_color"
        android:state_pressed=["true" | "false"]
        android:state_focused=["true" | "false"]
        android:state_selected=["true" | "false"]
        android:state_checkable=["true" | "false"]
        android:state_checked=["true" | "false"]
        android:state_enabled=["true" | "false"]
        android:state_window_focused=["true" | "false"] />
</selector>

예:

다음에 저장된 XML 파일 res/color/button_text.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:color="#ffff0000"/> <!-- pressed -->
    <item android:state_focused="true"
          android:color="#ff0000ff"/> <!-- focused -->
    <item android:color="#ff000000"/> <!-- default -->
</selector>

이 레이아웃 XML은 뷰에 색상 목록을 적용합니다.

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/button_text"
    android:textColor="@color/button_text" />

참조 : 색상 목록 참조

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.