I have ToggleButtonwith an image setted in android:background property. This background image fits all the background.
I would like to center a smaller background image inside a large ToggleButton avoiding to enlarge the image to fit all the background.
Does someone have a clue?
If you want to lay text on top of an image, you're probably going to have to set the image in code instead of XML. Something like:
Resources r = getResources();
Drawable myimage = r.getDrawable(R.drawable.myimage);
Button mybutton = findViewById(R.id.mybutton);
myimage.setBounds(0, 0, myimage.getIntrinsicWidth(), myimage.getIntrinsicHeight());
mybutton.setCompoundDrawables(myimage, null, null, null);
Ok, I got it:
First, we create our ToggleButton in our XML layout. Think our drawable is a selector which contains two (for selected and unselected states) images smaller than the background of the ToggleButton:
<ToggleButton
android:id="#+id/messageSeeMoreToggleButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOff=""
android:textOn=""
android:background="#drawable/selector_wall_toggle_see_more_button"
android:contentDescription="#string/conversation_see_more_Button_description" />
Then, in our class Activity, we find our ToggleButton as usual:
viewHolder.messageSeeMoreToggleButton = (ToggleButton) view.findViewById(R.id.messageSeeMoreToggleButton);
Now, we are going to change the appearance of the drawable, using StateListDrawable.setLevel. We can adjust the value in setLevel for better result:
StateListDrawable stateListDrawable = (StateListDrawable) viewHolder.messageSeeMoreToggleButton.getBackground();
stateListDrawable.setLevel(3000);
So, we will have our image centered inside the ToggleButton background, avoiding to enlarge the image.
I hope it helps someone.
Related
What is the difference between android:setBackground & android:setImageResource when used with an ImageView
I was trying to change the icon of imageButton onclick. when I used:
flashBTN.setImageResource(R.drawable.torch_icon_grey);
I am getting the button covered in grey and the correct drawable doesn't show.
And when I am trying :
flashBTN.setBackground(R.drawable.torch_icon_grey);
I am getting error:setBackground ca't be applied to int
Bonus: How setImageDrawable is difference?
you can read this. I think you are talking about this in xml:
android:background -> A drawable to use as the background, it could be just a color in HEX notation or a drawable.
android:src -> Sets a drawable as the content of this ImageView.
However in java you can use setImageDrawable(Drawable drawable) for setting a drawable as the content of this ImageView.
I want to add an image background to my buttons (which are added dyncamilly), but the image original size looks applied by default, and it is far too big. How can I adjust my image to fit with the button size automatically ?
Drawable img = act.getResources().getDrawable(R.drawable.top);
button.setBackground(img);
Use an ImageButton http://developer.android.com/reference/android/widget/ImageButton.html
They should handle the sizing automatically
Inside your Button xml, try adding this
android:scaleType="fitCenter"
I am using an image as the background of a linear layout in my android program.I need to set opacity for this.Can anyone tell me how can I do this?..The image that is translucent doesnt show the opacity,doesn't know the reason though.
Thanks in advance for your valuable comments
If you set the background of the LinearLayout programatically this shouldn't be any problem.
What you are looking for is the Drawable.setAlpha(int alpha) method. From a personal project:
ImageView image = (ImageView) row.findViewById(R.id.list_icon);
image.setImageResource(R.id.something);
image.setAlpha(110);
Not exacly the same, but maybe you get the point.
You are using a drawable as the background of your layout. The challenge here is to get the variable representing your drawable. This is done here:
In the activity to the layout:
Resources res = getResources();
Drawable background = res.getDrawable(R.drawable.*the id*);
// The layout which are to have the background:
LinearLayout layout = ((LinearLayout) findViewById(R.id.*you get it*));
// Now that we have the layout and the background, we ajust the opacity
// of the background, and sets it as the background for the layout
background.setAlpha( *a number* );
layout.setBackgroundDrawable(background);
And it should work. At least it did work for me.
I like to use a customized (Radio)Button and I know I can use whatever image for the background with the following code inside the xml:
<RadioButton
...
android:button="#drawable/myDrawable"
../>
However: I want to use three radiobuttons, that fill the whole row. But the drawable that I use for the button, doesnt get resized depending on the sreensize, so if the drawable is too big only parts of it will show, and if it is too small, not the whole screen will be filled. If I would use ImageViews I could change the ScaleType like so:
ImageView myImageView = (ImageView) findViewById(R.id.myimageview);
myImageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
But there is no such property for other Views, than the imageView. So how can I accomplish the same for (Radio)Buttons?
You will have to provide images with different sizes (see Supporting Multiple Screens)
I was just wondering if there was a way to change the opacity of the background image for a View (ie. TextView, etc.).
I know that I can set the background image like this:
android:background="#drawable/my_drawable_image"
Or I can set a specific background colour with an alpha setting like this:
android:background="#10f7f7f7"
Is there a way I can control the opacity (set the alpha) if I'm setting the background as a drawable image? And I want to do this in the XML Layout. I already know that I could grab the Drawable object and programmatically set the alpha, but I want to see if I can do it in the layout.
I ended up just going with the programmatical solution, since it doesn't look like it can be done via the XML layouts.
Drawable rightArrow = getResources().getDrawable(R.drawable.green_arrow_right_small);
// setting the opacity (alpha)
rightArrow.setAlpha(10);
// setting the images on the ImageViews
rightImage.setImageDrawable(rightArrow);
This might make your Work simpler
View backgroundimage = findViewById(R.id.background);
Drawable background = backgroundimage.getBackground();
background.setAlpha(80);
Alpha Values 0-255, 0 means fully transparent, and 255 means fully opaque
from: This Answer
You can also use XML to change the transparency:
android:alpha = "0.7"
The value of alpha ranges from 0 to 1
You can embed the image in xml, so you'll be able to see it in the Graphical Layout
<LinearLayout
style="#style/LoginFormContainer"
android:id="#+id/login_layout"
android:orientation="vertical"
android:background="#drawable/signuphead">
And change the code like this to make it transparent:
Drawable loginActivityBackground = findViewById(R.id.login_layout).getBackground();
loginActivityBackground.setAlpha(127);
The answer you gave didn't exactly answer the question you asked. Here's what I did.
Drawable login_activity_top_background = getResources().getDrawable(R.drawable.login_activity_top_background);
login_activity_top_background.setAlpha(127);
LinearLayout login_activity_top = (LinearLayout) findViewById(R.id.login_activity_top);
login_activity_top.setBackgroundDrawable(login_activity_top_background);