[Android] 포커스가있는 클릭 가능한 TextView의 색상을 변경하고 클릭 하시겠습니까?


Answers

코드에서 상태 기반 색상을 설정하려면 ColorStateList 를 인자로 전달하여 setTextColor 에 int를 전달하여 메서드 상태에 따라 색상을 모든 상태로 설정해야합니다. 또한 XML이 완전히 올바르지 않은 것처럼 보입니다. ColorStateList 문서의 예제는 다음과 같습니다 ( res/color/selector_txt.xml 과 같이 위치해야합니다).

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:color="@color/testcolor1"/>
    <item android:state_pressed="true" android:state_enabled="false" android:color="@color/testcolor2" />
    <item android:state_enabled="false" android:color="@color/testcolor3" />
    <item android:color="@color/testcolor5"/>
 </selector>

ColorStateList를 텍스트 색상으로 설정하는 방법에 대한 UPD :

ColorStateList cl = null;
try {
   XmlResourceParser xpp = getResources().getXml(R.color.selector_txt);
   cl = ColorStateList.createFromXml(getResources(), xpp);
} catch (Exception e) {}

XML은 다음과 같이 쉽게 사용할 수 있습니다.

android:textColor="@color/selector_txt"
Question

내가 몇 가지 색상을주고 싶은 클릭 가능한 TextView가 있습니다. 하지만 어떻게해야할지 모르겠다. 다음은 내가 작업하고있는 두 파일의 관련 코드 스 니펫입니다.

TextView title = new TextView(this);
title.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
title.setTextColor(R.color.textcolor);
title.setText(titleLine);
title.setTypeface(null, Typeface.BOLD);
title.setClickable(true);
title.setId(idLine);
title.setFocusable(true);

title.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {

                /* Irrelevant code */                   

    }
});

그리고 이것은 내 textcolor.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="#000000"/> <!-- pressed -->
    <item android:state_focused="true"
          android:color="#000000"/> <!-- focused -->
    <item android:color="#000000"/> <!-- default -->
</selector>

textcolor-file을 사용하여 title.setTextColor (R.color.textcolor); textcolor는 내가 누를지라도 회색이됩니다. 모든 색 영역에 "# 000000"을 쓴 이후로 이상합니다.
하지만 setTextColor 코드를 제거하면 textView가 연한 회색으로 표시되고 누를 때 검정색으로 표시됩니다. 그러나 그것은 내가 원하는 색상이 아닙니다.

그래서, 누구든지이 문제를 도와 줄 수 있습니까?

그냥 명확히하기 위해 : 나는 그것이 정상이고, 눌리고, 집중 될 때 텍스트의 색을 지정할 수 있기를 원한다.




이것을 시도해보십시오 .. 그것은 나를 위해 일했습니다 :

파일 이름 : res / color / bg_tab_text_color.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_selected="false" android:color="@color/tab_unselected_text_color"/>
    <item android:state_pressed="true" android:color="@color/tab_selected_text_color"/>
    <item android:state_pressed="false" android:state_selected="true" android:color="@color/tab_selected_text_color"/>
    <item android:color="@color/tab_unselected_text_color"></item>
</selector>

xml 레이아웃에서 색상을 다음과 같이 설정해보십시오.

android:textColor="@color/bg_tab_text_color"



그것은 매우 쉽습니다. 이걸 해봐. 나를 위해 일했다.

파일 이름 : res / color / bg_tab_text_color.xml

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

<item android:state_pressed="true" android:drawable="@color/blue" />

xml 레이아웃에서 색상을 다음과 같이 설정해보십시오.

android:textColor="@color/bg_tab_text_color"



R.java 클래스를 보라 (자동적으로 생성된다). 당신은 그런 것을 가지고 있습니다 :

 public static final class color {
        public static final int gray_transparent=0x7f050001;
}

그래서 당신의 코드에서 :

title.setTextColor(R.color.textcolor);

textcolor.xml에서 값을 설정하는 것이 아니라 R.java (textcolor.xml 주소를 포함)에서 값을 설정하는 것입니다. 색상을 설정하는 올바른 방법은 다음과 같습니다.

title.setTextColor(getResources().getColorStateList(R.color.textcolor));



1 단계 : xml에서 텍스트 색상을 다음과 같이 설정합니다.

android : textColor = "@ color / text_color"

2 단계 : res / color / text_color.xml 만들기

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

<item android:state_pressed="true"
      android:color="#ffffffff"/> <!-- pressed -->
<item android:state_focused="true"
      android:color="#ff0000ff"/> <!-- focused -->
<item android:color="#ff000000"/>  <!--default -->

</selector>



res / drawable / tab_textColor.xml에서 다음을 수행하십시오.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:color="#FFFFFF" />
    <item android:state_pressed="true" android:color="#FFFFFF" />
    <item android:color="#CCCCCC" />
</selector>



<TextView
    android:id="@+id/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/icon"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="5dp"
    android:text="@string/tab_indicator_home"
    android:textColor="@drawable/tab_textcolor"
    android:textSize="10sp"
    android:visibility="visible"
    tools:ignore="SmallSp" />



res / color / text_selector.xml 파일에서 :

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/white"
          android:state_selected="true"/>
    <item android:color="#8020e0"/>
</selector>

레이아웃 :

<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Word"
    android:textColor="@color/text_selector"
    android:textSize="12sp"/>

코드에서 :

textView.setSelected(false); // To deselect.
textView.setSelected(true);