221

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 this][Imgur

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!

2
  • Check your different values folder for button_1_name string. Commented Jul 22, 2014 at 7:02
  • @lpbug one year later. still faced the same issue and i landed here and got the solution Commented Nov 21, 2015 at 8:55

12 Answers 12

553

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.

7
  • 1
    Thanks for the response! android:textAllCaps="false" did work as a workaround but new buttons that are added are still all capitalized. My styles.xml under res/values does not appear to have the aforementioned attribute. Here's what it had <resources> <!-- Base application theme. --> <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> <!-- Customize your theme here. --> </style> </resources>
    – Alex
    Commented Jul 22, 2014 at 7:03
  • 16
    You are inheriting the theme Theme.Holo.Light.DarkActionBar, that contains that setting. You have to add new explicit property for styling buttons, e.g. <style name="Widget.Button" parent="Widget.Button"><item name="android:textAllCaps">false</item></style> Commented Jul 22, 2014 at 9:09
  • 1
    After adding this, i am having inflation error with arrayindexoutofboundsexception. Commented Feb 10, 2016 at 16:00
  • @usman I doubt that the exception is related to the textAllCaps property. Can you provide more details? Commented Feb 10, 2016 at 16:33
  • 1
    This will not going to work when you are using your own custom class extending Button class.
    – Jugal K
    Commented Aug 18, 2017 at 13:17
32
<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>
1
  • Simple and effective.
    – Valandres
    Commented Sep 6, 2019 at 16:26
11

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);
9

This is fixable in the application code by setting the button's TransformationMethod null, e.g.

mButton.setTransformationMethod(null);
8

add android:textAllCaps="false" in xml button It's true with this issue.

2
4

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);
  1. add this line under the element(button or edit text) in xml

android:textAllCaps="false"

regards

3

You could set like this

button.setAllCaps(false);

programmatically

3

In your .xml file within Button add this line--

android:textAllCaps="false"
1
  • 1
    What's the difference between your answer and the Stelian Matei's answer? Please, don't repeat the accepted answer. Commented Feb 8, 2018 at 19:38
3

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"/>
2

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);
2

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.

1

in XML: android:textAllCaps="false"

Programmatically:

mbutton.setAllCaps(false);

Not the answer you're looking for? Browse other questions tagged or ask your own question.