I have a layout and i want to set your background color with this xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_selected="true" android:color="#000000"></item>
<item android:color="#ffffff" ></item>
</selector>
this layout to be in a tabhost and where is selected it change your olor, how I do?
There's three "main" states you need to take into account: selected, pressed and the rest. Here's an example:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="#color/tab_background_active" />
<item android:state_pressed="true" android:drawable="#color/tab_background_pressed"/>
<item android:drawable="#color/tab_background_inactive" />
</selector>
You should also use "focused" if you care about supporting users with trackballs.
Related
I am using roughike/BottomBar below link shown to a image so how am i make look like this.
https://i.stack.imgur.com/Wybr2.png please help
You can add in your styles.xml :
<item name="android:navigationBarColor">#color/theme_color</item>
or programmatically
window.setNavigationBarColor(#ColorInt int color)
Of course you should bear in mind that this will only work with API>21.
Also refer to this link.
Define a selector drawable and also make two drawable for selected and unselected tab
selector tab tab_background.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="#drawable/tab_background_selected" android:state_selected="true" />
<item android:drawable="#drawable/tab_background_unselected" android:state_selected="false" android:state_focused="false" android:state_pressed="false" />
</selector>
tab_background_selected.xml in drawable folder
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#d13fdd1a" />
</shape>
tab_background_unselected.xml in drawable folder
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#3F51B5" />
</shape>
And after all that in your style.xml mention your selector to use
<style name="Base.Widget.Design.TabLayout" parent="android:Widget">
<item name="tabBackground">#drawable/tab_background</item>
<item name="tabIndicatorColor">#ff00ff</item>
<item name="tabIndicatorHeight">2dp</item>
</style>
I want to change background of a button when it is clicked. I tried to use a selector. But It didn't work. Here is the selector (add_grp_slctr.xml):
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_focused="true" android:drawable="#drawable/add_grp_d"/>
<item android:state_pressed="true" android:drawable="#drawable/add_grp_d" />
<item android:drawable="#drawable/add_grp" />
</selector>
And the button :
<Button
android:id="#+id/addGrpBtn"
android:layout_width="55dp"
android:layout_height="45dp"
android:layout_gravity="center"
android:background="#drawable/add_grp_slctr"
android:onClick="addGrpDialogOpen" />
add_grp_d and add_grp are images(png).
I tried a similar code which will be white by default, black when pressed on an onclick of a button:
//***This is the btn_selector which is to be declared in drawable folder***
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="#android:color/black" /> <!-- pressed -->
<item android:drawable="#android:color/white" /> <!-- default -->
</selector>
and called this on the button.xml -->
android:background="#drawable/btn_selector"
Hope this would help..:)
go through the http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList once. Also state_focussed for button only works when you are focussing the button using a hardware-keyboard.
As for your case
<?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:drawable="#drawable/button_default"/>
<item android:state_pressed="true" android:state_selected="false" android:drawable="#drawable/button_default" />
<item android:state_pressed="false" android:state_selected="true" android:drawable="#drawable/button_selected"/>
<item android:state_pressed="true" android:state_selected="true" android:drawable="#drawable/button_selected" />
<item android:drawable="#drawable/button_selected" />
</selector>
Use your selector
change your code like this
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_focused="true" android:drawable="#drawable/add_grp_d"/>
<item android:state_pressed="true" android:drawable="#drawable/add_grp" />
<item android:drawable="#drawable/add_grp_d" />
</selector>
My Code
<item android:drawable="#drawable/shadow_design_click" android:state_pressed="true"/>
<item android:drawable="#drawable/shadow_design" android:state_focused="true"/>
<item android:drawable="#drawable/shadow_design"/>
</selector>
I think you should change your selector a bit.
Check this answer here.
Instead of passing cuastom XML file, if you just want to change the color of you button then you can try with the following way.
Button lineColorCode = (Button)findViewById(R.id.button1);
Now inside button's click event use following code.
int color = Color.parseColor("#AE6118"); //The color u want
lineColorCode.setColorFilter(color);
I am trying to very simply style a Button. I just want it blue with with text when not pressed, and white with blue text when clicked.
I tried to do this with a style and a selector.
In my layout I have this Button:
<Button
android:id="#+id/button1"
style="#style/MyButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="#string/login" />
And in res/values/styles I have this styles.xml:
<style name="MyButton">
<item name="android:background">#drawable/btn_background</item>
<item name="android:textColor">#drawable/btn_textcolor</item>
</style>
And of course, the two selectors, in res/drawable, btn_background.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="#color/white" />
<item android:color="#color/SapphireBlue" />
</selector>
and btn_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="#color/SapphireBlue" />
<item android:color="#color/white" />
</selector>
The error I get now when I either run the app, or open the layout editor is:
<item> tag requires a 'drawable' attribute
I understand the message, but I don't have a drawable, is it is a simple, flat button.
How can I create such a simple button?
Update according to this post, it should work.
Try this way,hope this will help you to solve your problem.
btn_background.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="#color/white" android:state_pressed="true"></item>
<item android:drawable="#drawable/white" android:state_focused="true"></item>
<item android:drawable="#drawable/SapphireBlue" android:state_enabled="true" android:state_focused="false" android:state_pressed="false"></item>
<item android:drawable="#drawable/white" android:state_enabled="false"></item>
</selector>
btn_textcolor.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#color/SapphireBlue" android:state_pressed="true"></item>
<item android:color="#drawable/SapphireBlue" android:state_focused="true"></item>
<item android:color="#drawable/white" android:state_enabled="true" android:state_focused="false" android:state_pressed="false"></item>
<item android:color="#drawable/SapphireBlue" android:state_enabled="false"></item>
</selector>
Background attribute expects a drawable and the drawable selector must be in one of the /drawable folders.
TextColor attribute expects a color and the color selector must be in one of the /color folders.
/res/color/my_textcolor_selctor.xml
/res/drawable/my_background_selector.xml
Also, the drawable selector must use 'android:drawable' for selector items (a color resource maybe used for the attribute value since a color is a drawable),
whereas the color selector must use 'android:color' for the selector items.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false"
android:drawable="#color/disabledbackgroundColor" />
<!-- default -->
<item android:drawable="#color/myBackgroundColor" />
</selector>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false"
android:color="#color/disabledColor" />
<!-- default -->
<item android:color="#color/defaultColor" />
</selector>
android:background seems to accept drawable selectors but not color selectors... so just leave a color as your android:background, and use a normal color selector with android:backgroundTint, which expects colors anyway:
at styles.xml:
<style name="MyButton">
<item name="android:background">#color/some_fixed_color</item>
<item name="android:backgroundTint">#color/background_color_selector</item>
<item name="android:textColor">#drawable/btn_textcolor</item>
</style>
(res/color/background_color_selector.xml is a normal color selector.)
I'm trying to add to my existing statelist drawable, a disabled state and it just doesn't work.
originally, I had this code:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="#drawable/store_item_background_selected" android:state_selected="true"/>
<item android:drawable="#drawable/store_item_background"/>
</selector>
and it worked perfectly for selected and not selected.
now I wanted to add the android:state_enabled="false" like this:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="#drawable/store_item_background_selected" android:state_selected="true"/>
<item android:drawable="#drawable/store_item_background" android:state_enabled="true"/>
<item android:drawable="#drawable/store_item_background_disabled"/>
</selector>
and it never switches to the disabled image.
any ideas?
EDIT
I added setEnabled(false) to the constructor of the view I'm setting this statelist drwable and now I see the disabled image, but once I set the view to enabled, it won't switch to disabled again.
Although this is a really old question, one should write a selector in this order:
disabled state first
pressed state second
normal state last
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="#android:integer/config_shortAnimTime">
<item android:drawable="#color/due_gray" android:state_enabled="false" />
<item android:drawable="#color/whizdm_primary_dark_color" android:state_pressed="true" />
<item android:drawable="#color/whizdm_primary_color" />
</selector>
Try this
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="#drawable/store_item_background_selected" android:state_enabled="true" android:state_selected="true"/>
<item android:drawable="#drawable/store_item_background" android:state_enabled="true"/>
<item android:drawable="#drawable/store_item_background_disabled" android:state_enabled="false"/>
</selector>
I'm using a galery and have used getColorStateList to display texts in a different color when they are selected, declaring an xml like so:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:color="#color/yellow"></item>
<item android:state_selected="false" android:color="#color/white"></item>
<item android:color="#FFFFFF"></item>
</selector>
I need to do something quite similar with images :
I want display a different image when it's selected in the gallery.
do anyone knows how to do so ?
Thx
I think use a selector for imageview just like this.
<?xml version="1.0" encoding="UTF-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Non focused states -->
<item android:state_focused="false" android:state_selected="false"
android:state_pressed="false" android:drawable="#drawable/your_image" />
<!-- Focused states -->
<item android:state_focused="true" android:state_selected="true"
android:state_pressed="true" android:drawable="#drawable/your_image" />
<!--normal state-->
<item android:drawable="#drawable/your_image" />
place all your image in drawable folder