Setting default background of ImageButton to transparent (using AndroidX) - android

I'm using the AndroidX support libraries. In my manifest I declare:
<application
...
android:theme="#style/AppTheme">
In values.styles.xml I declare:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
...
<item name="android:imageButtonStyle">#style/MyImageButton</item>
</style>
<style name="MyImageButton" parent="Widget.AppCompat.ImageButton">
<item name="android:background">#android:color/transparent</item>
</style>
Then I use the ImageButton via:
<ImageButton
android:id="#+id/image"
android:layout_width="40dp"
android:layout_height="40dp" />
Unfortunately, my ImageButton shows a grey background instead of the transparent one. What do I have to do to fix it?

You need to replace this line
<item name="android:imageButtonStyle">#style/MyImageButton</item>
with
<item name="imageButtonStyle">#style/MyImageButton</item>
And This is also another way given by #prince

Add this line in your code to
style="#style/MyImageButton"
So,
<ImageButton
style="#style/MyImageButton"
android:id="#+id/image"
android:layout_width="40dp"
android:layout_height="40dp" />
or you don't want to add style in your all button tag you can follow this answer to change the style of the default button. Hope it will help you. Try and let me know it works or not.
Thanks.
Happy coding :)

You can simply set background of ImageButton to null as below :
<ImageButton
android:id="#+id/image"
android:layout_width="40dp"
android:layout_height="40dp"
android:background="#null" />
This will make your ImageButton transparent.

Related

Default color change in ContentLoadingProgressBar

I am using androidx in my project and somewhere i am using ContentLoadingProgressBar but i am not able to change default color.
I have tried with android:indeterminateTint but can't help.
If anyone having any idea regarding this plz suggest
<androidx.core.widget.ContentLoadingProgressBar
android:id="#+id/progress"
android:layout_width="#dimen/_30sdp"
android:layout_height="#dimen/_30sdp"
android:indeterminateTint="#android:color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
Extend the default theme and override colorAccent
<style name="AppTheme.WhiteAccent">
<item name="colorAccent">#color/white</item> <!-- Whatever color you want-->
</style>
add ContentLoadingProgressBar the android:theme attribute:
android:theme="#style/AppTheme.WhiteAccent"
You need to set both style and android:theme with accent color you want your progress bar in. Refer below code snippets:
layout.xml
<androidx.core.widget.ContentLoadingProgressBar
android:theme="#style/ContentLoadingProgress"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
/>
styles.xml
<style name="ContentLoadingProgress">
<item name="colorAccent">#color/colorWhite</item>
</style>

When using Theme.MaterialComponents.Light.NoActionBar style, setting Button Background has no effect

In order to use Chip and ChipGroup, I set Application style extends Theme.MaterialComponents.Light.NoActionBar int manifests.xml, then I set Button "android:background" attr, but it does not effect! why? and what can I do?
This is my style:
<style name="AppBaseTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="colorPrimary">#color/primary_material_light</item>
<item name="colorPrimaryDark">#color/header_color</item>
<item name="actionBarSize">48dp</item>
<item name="android:screenOrientation">portrait</item>
<!--<item name="buttonStyle">#style/AntButton</item>-->
<!--<item name="materialButtonStyle">#style/AntButton</item>-->
<!--<item name="android:button"></item>-->
<!--<item name="android:progressTint">#color/ffc000</item>-->
<item name="colorAccent">#color/ffc000</item>
</style>
<style name="AntButton" parent="android:Widget">
<item name="android:background">#drawable/abc_btn_default_mtrl_shape</item>
<item name="android:textAppearance">?android:attr/textAppearanceButton</item>
<item name="android:minHeight">48dip</item>
<item name="android:minWidth">88dip</item>
<item name="android:focusable">true</item>
<item name="android:clickable">true</item>
<item name="android:gravity">center_vertical|center_horizontal</item>
<!--<item name="android:colorButtonNormal">#color/white</item>-->
</style>
I have tried to change buttonStyle and materialButtonStyle, but not effect too!
this is my layout XML:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="#+id/ll_popup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="#color/white"
android:divider="#drawable/shape_divider_05dp"
android:orientation="vertical"
android:showDividers="beginning|middle">
<!--only can use backgroundTint to change background color-->
<Button
android:id="#+id/item_popupwindows_Photo"
android:layout_width="match_parent"
android:layout_height="55dp"
android:backgroundTint="#color/white"
android:text="Pictrue"
android:textColor="#color/c_666666"
android:textSize="16sp" />
<!--background not effect !!-->
<Button
android:id="#+id/item_popupwindows_cancel"
android:layout_width="match_parent"
android:layout_height="55dp"
android:background="#color/white"
android:text="cancel"
android:textColor="#color/c_666666"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
this is result :
Because I have used Chip and ChipGroup in APP, I have to user theme extends MaterialComponents! do you know how to resolve it ?please tell me, thanks!
in this page Can't use android:background with button from the new material components, the author wants to change the default padding, but I want to change the backgroundDrawable, so, it does not work for me.
If you want a true Button, but one that you can modify like the framework Button (instead of the MaterialButton), then you can explicitly specify the framework version in your layout file. Replace this:
<Button
android:id="#+id/item_popupwindows_cancel"
... />
with this:
<android.widget.Button
android:id="#+id/item_popupwindows_cancel"
... />
This will give you what it says on the tin: an android.widget.Button, which should respond to styling the way you expect.
Similarly, you could use a <androidx.appcompat.widget.AppCompatButton> if you want support library features but not material components features.
In this particular case, the LinearLayout holding your second Button seems to have a white background color. That means you don't need to explicitly specify a white background for your Button; you can just let the LinearLayout's background show through.
This can be accomplished by using the "Text Button" style of MaterialButton:
style="#style/Widget.MaterialComponents.Button.TextButton"
Use this code for change the color
app:backgroundTint="#color/primaryColor"
You can also use ImageButton instead of Button from material components. android:background is working on ImageButton.
<ImageButton
android:id="#+id/item_popupwindows_cancel"
... />

AppCompatButton and buttonStyle

I am trying to get some buttons to be use the Material Design style (in particular accentColor tinting) for Android 4.4 devices using the AppCompat library. I have had success with the following:
<android.support.v7.widget.AppCompatButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="#string/continue_button"
android:id="#+id/continue_button"
android:layout_gravity="center_horizontal|bottom"
style="#style/CompatButton"
android:theme="#style/ThemeOverlay.AppCompat.Dark"/>
where "#style/CompatButton" has "Widget.AppCompat.Button.Colored" for a parent. However some of my buttons are the same but instead of declaring the style in the element, I attach the style as the default "buttonStyle" in the theme being used:
<style name="AppTheme">
...
<item name="android:buttonStyle">#style/CompatButton</item>
<item name="colorAccent">#color/flow_accent</item>
...
</style>
and
<android.support.v7.widget.AppCompatButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="#string/continue_button"
android:id="#+id/continue_button"
android:layout_gravity="center_horizontal|bottom"
android:theme="#style/ThemeOverlay.AppCompat.Dark"/>
These buttons are showing up with the default, non-Material stylings. This also seems to happen with ProgressBar. Can anyone see what's wrong with this and if there's a workaround without having to explicitly define the button style?
Oops, that was dumb. Obviously ThemeOverlay wipes out the previous theme, including the buttonStyle definition. For it to work we have to add the buttonStyle back in:
<style name="FlowOverlay" parent="ThemeOverlay.AppCompat.Dark">
<item name="android:buttonStyle">#style/CompatButton</item>
</style>
<android.support.v7.widget.AppCompatButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="#string/continue_button"
android:id="#+id/continue_button"
android:layout_gravity="center_horizontal|bottom"
android:theme="#style/FlowOverlay"/>
though that loses much of the convenience we wanted from default button styles in the first place.

Android API 21 changes my custom button background

I am testing out my app for API21 on Android! Unfortunately, my buttons seem weird - there is some kind of background color added. The background images did not change - they are completely transparent except for the border. (The different text and size is due to the screenshot).
Here you see the buttons before and since API 21: http://imgur.com/9EEcl0o,yVEnJkI#0
I already tried android:elevation="0dp" and android:background="#android:color/transparent". Anybody knows why my buttons change? Thank you very much!
layout.xml:
<Button android:id="#+id/sm_achievements_btn"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1.1"
android:background="#drawable/menu_btn_selector"
android:onClick="showAchievements"
android:text="#string/sm_achievements_btn"
android:padding="#dimen/padding_std"
android:layout_marginTop="#dimen/margin_small"
android:textColor="#color/button_text"
android:textSize="#dimen/text_xlarge"
style="#style/lbm_button"/>
menu_btn_selector.xml:
<item android:drawable="#drawable/menu_button"
android:state_pressed="false"/>
style.xml:
<style name="lbm_button" parent="android:Theme.Holo.Light">
<item name="android:textAllCaps">false</item>
</style>
Material buttons have a default stateListAnimator that provides state-based elevation (e.g. 0dp when disabled, 1dp when enabled). You can clear it by setting android:stateListAnimator="#null" in your style or directly on the Button.
Here is what that would look like on your button XML:
<Button android:id="#+id/sm_achievements_btn"
...
android:textAllCaps="false"
android:stateListAnimator="#null" />
Also, you're using the wrong parent for your button style. You should never set a theme as the parent for a widget style. Regardless, here is what that should look like if you prefer that route:
<Button android:id="#+id/sm_achievements_btn"
...
style="#style/MyButtonStyle" />
<style name="MyButtonStyle" parent="android:Widget.Material.Light.Button">
<item name="android:textAllCaps">false</item>
<item name="android:stateListAnimator">#null</item>
</style>

Cannot lower case button text in android studio

I have a trivial question that has been bothering me for a while. I tried to google this but no one seems to have the same problem as me or doesn't see it as an issue. When I make a button in activity_my.xml under layout
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#string/button_1_name"
android:id="#+id/button2"
android:layout_marginTop="140dp"
android:layout_below="#+id/textView"
android:layout_centerHorizontal="true" />
I get a button that looks like
even though my strings code is:
<resources>
<string name="app_name">HelloWorld</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string name="button_1_name">BuTtOn 1</string>
I know I am definitely missing something small here, but how do I get lower case/upper case working in the button text?
Thanks!
You could add android:textAllCaps="false" to the button.
The button text might be transformed to uppercase by your app's theme that applies to all buttons. Check themes / styles files for setting the attribute android:textAllCaps.
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:buttonStyle">#style/Button</item>
</style>
<style name="Button" parent="Widget.AppCompat.Button">
<item name="android:textAllCaps">false</item>
</style>
This is fixable in the application code by setting the button's TransformationMethod null, e.g.
mButton.setTransformationMethod(null);
It can be done easily by using the following code inside your view in activity_main.xml:
android:textAllCaps="false"
In your case it would be as follows:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#string/button_1_name"
android:id="#+id/button2"
android:layout_marginTop="140dp"
android:layout_below="#+id/textView"
android:layout_centerHorizontal="true"
android:textAllCaps="false" />
You can also change it for all the buttons in your app by adding this to your styles/themes.xml:
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:buttonStyle">#style/Button</item>
</style>
<style name="Button" parent="Widget.AppCompat.Button">
<item name="android:textAllCaps">false</item>
</style>
It can also be set Programatically by using the following in mainActivity.kt or mainActivity.java:
Button btn = (Button) findViewById(R.id.button2);
btn.setAllCaps(false);
add android:textAllCaps="false" in xml button
It's true with this issue.
there are 3 ways to do it.
1.Add the following line on style.xml to change entire application
<item name="android:textAllCaps">false</item>
2.Use
android:textAllCaps="false"
in your layout-v21
mButton.setTransformationMethod(null);
add this line under the element(button or edit text) in xml
android:textAllCaps="false"
regards
You could set like this
button.setAllCaps(false);
programmatically
In your .xml file within Button add this line--
android:textAllCaps="false"
There is a property in <Button> that is android:textAllCaps="false" that make characters in which you want in your own Small and caps. By Default its became True so write this code and make textAllCaps=false then you can write text on button in small and Caps letter as per your requirement.
Complete code for a Button which allow use to write letters as per our requirement.
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="#+id/btnLogin"
android:text="Login for Chat"
android:textAllCaps="false"/>
in XML Code
add this line android:textAllCaps="false"
like bellow code
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#string/button_1_name"
android:id="#+id/button2"
android:layout_marginTop="140dp"
android:layout_below="#+id/textView"
android:layout_centerHorizontal="true"
** android:textAllCaps="false" ** />
or
in Java code (programmatically)
add this line to your button setAllCaps(false)
Button btn = (Button) findViewById(R.id.button2);
btn.setAllCaps(false);
I have faced this issue in TextView. I have tried
android:textAllCaps="false",
mbutton.setAllCaps(false);
<item name="android:textAllCaps">false</item>
none of that worked for me. Finally I fed up and I have hard coded text, it is working.
tv.setText("Mytext");
tv is object of TextView. But as per coding standards, it is bad practice.
in XML:
android:textAllCaps="false"
Programmatically:
mbutton.setAllCaps(false);

Categories

Resources