안드로이드 사용자 정의 버튼; 텍스트 색상 변경


251

다음과 같이 다른 상태에서 배경 드로어 블을 변경하는 버튼을 만들었습니다.

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_pressed="true" android:drawable="@drawable/btn_location_pressed" /> <!-- pressed -->
 <item android:state_focused="true" android:drawable="@drawable/btn_location_pressed"/> <!-- focused -->
 <item android:drawable="@drawable/btn_location"/> <!-- default -->

여기서 문제는 드로어 블과 마찬가지로 textColor를 변경하려고하지만 할 수 없다는 것입니다. 이미 android : textColor 및 android : color를 시도했지만 초가 내 배경을 변경하는 동안 첫 번째 기능이 작동하지 않습니다.

다음 코드는 내 레이아웃의 일부입니다. 텍스트 색상과 관련하여 일반 상태 텍스트 색상에서만 작동하므로 눌렀을 때 흰색으로 변경되지 않습니다.

<Button android:id="@+id/location_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingTop="5dp"
        android:background="@drawable/location"          
        android:textSize="15sp"
        android:textColor="@color/location_color"
        android:textColorHighlight="#FFFFFF"
   />

아무도 단서가 있습니까?

답변:


579

예를 들어 배경과 같이 버튼의 상태 저장 색상을 만듭니다.

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

    <!-- Focused and not pressed -->
    <item android:state_focused="true" 
          android:state_pressed="false" 
          android:color="#ffffff" />

    <!-- Focused and pressed -->
    <item android:state_focused="true" 
          android:state_pressed="true" 
          android:color="#000000" />

    <!-- Unfocused and pressed -->
    <item android:state_focused="false" 
          android:state_pressed="true" 
          android:color="#000000" />

    <!-- Default color -->
    <item android:color="#ffffff" />

</selector>

xml을 res / drawable 폴더 (예 : res / drawable / button_text_color.xml)의 파일에 저장하십시오. 그런 다음 드로어 블을 텍스트 색상으로 설정하십시오.

android:textColor="@drawable/button_text_color"

15
(적어도 적어도) "정상"상태 (응답의 <item android : color = "# ffffff"/>)가 응답과 같이 파일의 끝에 배치되어야하는 버그가 있습니다. 파일 맨 위에 일반 상태를두면 (다른 상태 위에 있음) 선택기가 작동하지 않습니다.
Chris Blunt

58
버그가 아닙니다. 상태 선택이 작동하는 방식입니다. 그것은 가장 잘 어울리지 않습니다. 대신 맞는 것이 처음부터 끝납니다.
superjos December

정수 값 으로이 작업을 수행하는 방법은 무엇입니까? 텍스트 패딩과 비슷한 것을하려고합니다.
elimirks

이것을 쓸데없는 시간으로 보냈지 만 textcolor 속성 대신 background 속성으로 설정하고 있음을 발견했습니다. textcolor를 보는 데 익숙하지 않은 드로어 블을 가져 가십시오!
Odaym

20
색상 선택기가 res/color폴더 에 있으면 더 좋습니다. 그리고 전화 할 때 다음을 사용하십시오.android:textColor="@color/button_text_color"
Justin Justin

16

그것을하는 또 다른 방법은 수업 시간입니다.

import android.graphics.Color; // add to top of class  

Button btn = (Button)findViewById(R.id.btn);

// set button text colour to be blue
btn.setTextColor(Color.parseColor("blue"));

// set button text colour to be red
btn.setTextColor(Color.parseColor("#FF0000"));

// set button text color to be a color from your resources (could be strings.xml)
btn.setTextColor(getResources().getColor(R.color.yourColor));

// set button background colour to be green
btn.setBackgroundColor(Color.GREEN);

1
버튼의 텍스트 색상이 변경되지만 버튼의 다른 상태 (예 : 누른 상태) 동안 해당 색상이 유지됩니다. 대부분의 시나리오에서 상태 동안 버튼의 배경색이 변경되면 버튼의 텍스트 색상도 변경하는 것이 바람직합니다. @Konstantin Burov의 대답이 편리합니다.
Dzhuneyt

1
이것은 원래 질문에 대한 답변이 아닙니다. 문제는 상태 기반 드로어 블을 설정할 수있는 것처럼 상태 기반 색상을 텍스트보기에 정의하는 방법에 관한 것입니다.
연금술사

4

확인은 매우 간단합니다. 먼저 1. res-valuse로 이동하여 colors.xml을 엽니 다. 2. 예를 들어 # FF4081과 같이 정의 된 텍스트의 1을 복사하고 이름을 변경합니다. 이와 같은 흰색 값

<color name="White">#FFFFFF</color>

그런 다음 버튼 안에이 줄을 추가하십시오.

 b3.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.White));

확인 b3은 내 버튼의 이름이므로 ur 버튼의 이름이 변경되었습니다. 다른 색상을 변경 한 다음 흰색을 색상 이름으로 변경하면 흰색을 사용하지만 다른 색상은 색상으로 정의하면 다른 모든 색상은 동일합니다. 내가 퐁 2에서 설명한 것처럼 XML


1

버튼의 텍스트 색상 변경

이 방법은 더 이상 사용되지 않기 때문에

button.setTextColor(getResources().getColor(R.color.your_color));

나는 다음을 사용한다 :

button.setTextColor(ContextCompat.getColor(mContext, R.color.your_color));

0

사용하다 getColorStateList 이 같은

setTextColor(resources.getColorStateList(R.color.button_states_color))

대신에 getColor

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