我的布局中有一个Button,其背景和textcolor被定义为选择器。当未按下时,按钮具有背景颜色和文本颜色,并且当按下另一种颜色和另一种文本颜色时 - 例如,白色背景与黑色文字 - >黑色背景与白色文本。
在我的代码中的某个点,我需要用第三组颜色替换背景/文本颜色,然后返回到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));
问题何时开始。
以下是我的选择器的xmls - 为伪代码道歉,想象一下适当的十六进制值:
首先 - 背景:
<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 :(得分:0)
求助:
原来问题出在这里:
someButton.setTextColor(getResources().getColor(R.color.originalTextSelectorDefinedInXml));
应该是
someButton.setTextColor(getResources().getColorStateList(R.color.originalTextSelectorDefinedInXml));