How to change TabLayout.Tab's icon when the tab is selected?
try this
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="#drawable/menu_live_stream_selected" android:state_checked="true" />
<item android:drawable="#drawable/menu_live_stream_selected" android:state_pressed="true" />
<item android:drawable="#drawable/menu_live_stream_selected" android:state_selected="true" />
<item android:drawable="#drawable/menu_live_stream_default" />
</selector>
Related
temp_selector.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/color1" />
<item android:state_selected="true" android:color="#color/color2" />
<item android:color="#color/color3" />
</selector>
And I applied it through the code below
imageView.setImageResource(R.drawable.image)
ImageViewCompat.setImageTintList(imageView, ColorStateList.valueOf(R.color.temp_selector))
I don't know why it doesn't work... What should I do?
(It has to be applied programatically. not xml.)
Use below to change color
imageView.isSelected = true
imageView.isSelected = false
Use below selector:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#color/color3" android:state_selected="false" />
<item android:color="#color/color2" android:state_selected="true"/>
<item android:color="#color/color1" android:state_pressed="true" />
</selector>
I'm trying to implement a RatingBar in my Android app but I'm running into some issues when trying to set the rating. My bar is always displayed as having the maximum available rating. Below are my files:
styles.xml
<style name="ratingBarStyling" parent="#android:style/Widget.RatingBar">
<item name="android:progressDrawable">#drawable/star_rating_bar</item>
<item name="android:indeterminateDrawable">#drawable/star_rating_bar</item>
<item name="android:minHeight">25dip</item>
<item name="android:maxHeight">27dip</item>
</style>
(same for v21)
star_rating_bar.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="#+id/background"
android:drawable="#drawable/star_rating_bar_full_empty" />
<item android:id="#+id/secondaryProgress"
android:drawable="#drawable/star_rating_bar_full_empty" />
<item android:id="#+id/progress"
android:drawable="#drawable/star_rating_bar_full_filled" />
</layer-list>
star_rating_bar_full_empty
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:state_window_focused="true"
android:drawable="#drawable/ic_star_empty" />
<item android:state_focused="true"
android:state_window_focused="true"
android:drawable="#drawable/ic_star_empty" />
<item android:state_selected="true"
android:state_window_focused="true"
android:drawable="#drawable/ic_star_empty" />
<item android:drawable="#drawable/ic_star_empty" />
</selector>
star_rating_bar_full_filled
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:state_window_focused="true"
android:drawable="#drawable/ic_star" />
<item android:state_focused="true"
android:state_window_focused="true"
android:drawable="#drawable/ic_star" />
<item android:state_selected="true"
android:state_window_focused="true"
android:drawable="#drawable/ic_star" />
<item android:drawable="#drawable/ic_star" />
</selector>
And finally the implementation of the RatingBar on the Fragment layout:
<RatingBar
style="#style/ratingBarStyling"
android:id="#+id/venue_card_rating"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:numStars="5"
android:stepSize="1.0"
android:rating="2.0"/>
Now for some reason I can see the filled star icons but non of the empty ones. I have also tried setting it programmatically but the results were the same. Any help would be greatly appreciated.
This is what I'm always getting: stars.png
You have made small mistake/typo
You will have to use android:id instead of providing a new id.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="#android:id/background"
android:drawable="#drawable/star_rating_bar_full_empty" />
<item android:id="#android:id/secondaryProgress"
android:drawable="#drawable/star_rating_bar_full_empty" />
<item android:id="#android:id/progress"
android:drawable="#drawable/star_rating_bar_full_filled" />
</layer-list>
i try to change color of my item Navigation View menu :
styles.xml
<item name="android:activatedBackgroundIndicator">#drawable/activated_background</item>
activated_background.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="#color/White" />
<item android:state_focused="true" android:drawable="#color/White" />
<item android:state_activated="true" android:drawable="#color/White" />
<item android:drawable="#android:color/transparent" />
</selector>
drawer.xml :
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:id="#+id/group_1">
<item
android:id="#+id/drawer_menu_account"
android:checked="false"
android:title="#string/menu_account"
android:icon="#drawable/ic_account_grey600_24dp" />
<item
android:id="#+id/drawer_menu_my_post"
android:checked="false"
android:title="#string/menu_my_post"
android:icon="#drawable/ic_pin_grey600_24dp" />
</group>
[...]
Background color don't change..
What am i doing wrong ?
You don't set the drawable for the background of a Navigation View item in your styles.xml file. Open up your XML layout file containing your Navigation View widget, and add the following line to the widget's attributes:
app:itemBackground="#drawable/activated_background.xml"
If you're having trouble with the "app" pointer, add the following line in as well:
xmlns:app="http://schemas.android.com/apk/res-auto"
Note that this only changes the colour of the background of a selected list item. If you'd like the icon and text colour to change as well, use the app:itemTextColor attribute instead.
Below code works fine for me
my nav view:
<android.support.design.widget.NavigationView
android:id="#+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
android:background="#color/nav.background"
app:menu="#menu/menu_drawer"
app:itemBackground="#drawable/nav_item_background"
app:itemTextColor="#drawable/nav_item_text"/>
drawable/nav_item_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:drawable="#color/nav.item.background" />
<item android:state_checked="true" android:drawable="#color/nav.item.background" />
<item android:state_focused="true" android:drawable="#color/nav.item.background" />
<item android:state_activated="true" android:drawable="#color/nav.item.background" />
<item android:drawable="#color/nav.item.background.default" />
</selector>
drawable/nav_item_text.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#android:color/white" android:state_checked="true" />
<item android:color="#bdbdbd" />
</selector>
You must use android:background="color" for back color of navigation menu
like:
<android.support.design.widget.NavigationView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:id="#+id/shitstuff"
app:itemTextColor="#color/black"
app:menu="#menu/drawermenu"
android:background="#color/colorAccent"
android:layout_marginTop="-24dp"
/>
and for items color use itemTextColor="color"
To have the background display on your selected item you need to add
android:checkable="true"
on every item of your menu.xml items, then set :
app:itemBackground="#drawable/nav_view_item_background"
on your NavigationView and finally:
drawable/nav_view_item_background.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="#color/primary" android:state_checked="true" />
<item android:drawable="#android:color/transparent" />
</selector>
#HaloMediaz and #HemantShori
To keep the background of the selected item in a selected state,
use android:state_checked="true" instead of android:state_pressed="true" in the color state resource.
So your activated color state resource should look like this:
activated_background.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="#color/White" />
<item android:state_focused="true" android:drawable="#color/White" />
<item android:state_activated="true" android:drawable="#color/White" />
<item android:drawable="#android:color/transparent" />
</selector>
I have a Button with a backround ressource that defines states and backgrounds
<?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 android:drawable="#color/gray" android:state_pressed="false" />
<item android:drawable="#color/white" android:state_selected="true" />
<item android:drawable="#color/gray" android:state_selected="false" />
</selector>
I also tried
<?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" android:state_selected="true" />
<item android:drawable="#color/gray" android:state_pressed="false" android:state_selected="false" />
</selector>
when pressed it does change colors, but when I apply btn.setSelected(true); nothing happens
any ideas ?
OK I got it,
for future people who will encounter this, this has solved it
<?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 android:drawable="#color/white" android:state_selected="true" />
<item android:drawable="#color/tab_gray" />
</selector>
Try btn.performClick();, which clicks the button. This might work:
void pressButton(Button btn, boolean pressed) {
if (pressed != btn.isPressed()) {
btn.performClick();
}
}
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);