2015-06-14 38 views
0

我的佈局中有一個按鈕,其背景和文本顏色被定義爲選擇器。當未按下時,按鈕具有背景顏色和文本顏色,並且當按下另一種顏色和另一種文本顏色時 - 例如白色背景與黑色文本 - >黑色背景與白色文本。Android:以編程方式更改爲實體xml形狀使文本消失

在我的代碼中的某個點上,我需要用第三組顏色替換背景/文本顏色,然後返回到xml中定義的原始選擇器。但是,返回後文本不再出現,而是我得到一個純色按鈕。

<Button 
android:id="@+id/somebutton" 
android:layout_width="80" 
android:layout_height="80" 
android:textColor="@color/sometext_selector" 
android:background="@drawable/somebackground_selector" 
      android:gravity="center" 
      android:text="@string/sometext" 
      android:textSize="15sp" 
      /> 

此時一切都很好,但是當我這樣做:

someButton.setBackgroundDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.backgroundRed, null)); 

someButton.setTextColor(getResources().getColor(android.R.color.holo_red_light)); 

,然後再把這個:

someButton.setBackgroundDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.originalBackgroundSelectorDefinedInXml, null)); 

someButton.setTextColor(getResources().getColor(R.color.originalTextSelectorDefinedInXml)); 

是當問題開始。

下面是我選擇了個XML - 道歉僞代碼,試想一下,適當的十六進制值:

首先 - 背景:

<item android:drawable="@drawable/color_purple_full" android:state_selected="true"/> 
<item android:drawable="@drawable/color_purple_full" android:state_pressed="true"/> 
<item android:drawable="@drawable/color_purple_full" android:state_focused="true"/> 
<item android:drawable="@drawable/color_purple_outline"/> 

color_purple_outline:

android:shape="oval"> 
<stroke android:width="2dp" android:color="#somepurplehexa" /> 
<size android:width="80dp" android:height="80dp"/> </shape> 

color_purple_full:

android:shape="oval"> 
<solid android:color="#somepurplehexa"/> 
<size android:width="80dp" android:height="80dp" /> </shape> 

文本:

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

<item android:color="@android:color/black" android:state_selected="true"/> 
<item android:color="@android:color/black" android:state_pressed="true"/> 
<item android:color="@android:color/black" android:state_focused="true"/> 
<item android:color="@color/green"/> 

我所看到的是在未擠壓狀態,但按下狀態我剛開始純色,沒有文字上正確的背景它根本就沒有。我會很感激任何想法,爲什麼發生這種情況,爲什麼在原始的XML它工作正常,但只有停止工作後更改編程?

回答

0

解決:

原來問題在這裏:

someButton.setTextColor(getResources().getColor(R.color.originalTextSelectorDefinedInXml)); 

應該已經

someButton.setTextColor(getResources().getColorStateList(R.color.originalTextSelectorDefinedInXml)); 
相關問題