How I can align icon next to text of MaterialButton with defined padding?












1















Hello I ran into problem with aligning icon in material button on Android. I have button with match_parent width, text and icon next to text. I want to align icon 8dp left to text and I tried do it by com.google.android.material.button.MaterialButton app:iconGravity. But result was not as expected.



bad aligned icons image



As you can see, with longer text, icon padding is smaller and smaller. I also tried define app:iconPadding (default is 8dp) but with same result.



Is this bug or I'm doing it wrong?



Layout:



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">

<com.google.android.material.button.MaterialButton
style="@style/MaterialButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:icon="@drawable/ic_launcher"
app:iconGravity="textStart"
tools:text="L" />

<com.google.android.material.button.MaterialButton
style="@style/MaterialButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:icon="@drawable/ic_launcher"
app:iconGravity="textStart"
tools:text="Lorem ipsum" />

<com.google.android.material.button.MaterialButton
style="@style/MaterialButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:icon="@drawable/ic_launcher"
app:iconGravity="textStart"
tools:text="Lorem ipsum dolor sit amet" />
</LinearLayout>


Style:



<style name="MaterialButton" parent="Widget.MaterialComponents.Button">
<item name="android:textColor">@color/white</item>
<item name="android:textAppearance">@style/TextTitleAllCapsBold</item>
<item name="android:fontFamily">@font/roboto_condensed_regular</item>
<item name="android:padding">@dimen/padding_medium</item>
<item name="backgroundTint">@color/colorPrimary</item>
<item name="iconSize">32dp</item>
</style>


Using implementation 'com.google.android.material:material:1.0.0'










share|improve this question



























    1















    Hello I ran into problem with aligning icon in material button on Android. I have button with match_parent width, text and icon next to text. I want to align icon 8dp left to text and I tried do it by com.google.android.material.button.MaterialButton app:iconGravity. But result was not as expected.



    bad aligned icons image



    As you can see, with longer text, icon padding is smaller and smaller. I also tried define app:iconPadding (default is 8dp) but with same result.



    Is this bug or I'm doing it wrong?



    Layout:



    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <com.google.android.material.button.MaterialButton
    style="@style/MaterialButton"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:icon="@drawable/ic_launcher"
    app:iconGravity="textStart"
    tools:text="L" />

    <com.google.android.material.button.MaterialButton
    style="@style/MaterialButton"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:icon="@drawable/ic_launcher"
    app:iconGravity="textStart"
    tools:text="Lorem ipsum" />

    <com.google.android.material.button.MaterialButton
    style="@style/MaterialButton"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:icon="@drawable/ic_launcher"
    app:iconGravity="textStart"
    tools:text="Lorem ipsum dolor sit amet" />
    </LinearLayout>


    Style:



    <style name="MaterialButton" parent="Widget.MaterialComponents.Button">
    <item name="android:textColor">@color/white</item>
    <item name="android:textAppearance">@style/TextTitleAllCapsBold</item>
    <item name="android:fontFamily">@font/roboto_condensed_regular</item>
    <item name="android:padding">@dimen/padding_medium</item>
    <item name="backgroundTint">@color/colorPrimary</item>
    <item name="iconSize">32dp</item>
    </style>


    Using implementation 'com.google.android.material:material:1.0.0'










    share|improve this question

























      1












      1








      1


      1






      Hello I ran into problem with aligning icon in material button on Android. I have button with match_parent width, text and icon next to text. I want to align icon 8dp left to text and I tried do it by com.google.android.material.button.MaterialButton app:iconGravity. But result was not as expected.



      bad aligned icons image



      As you can see, with longer text, icon padding is smaller and smaller. I also tried define app:iconPadding (default is 8dp) but with same result.



      Is this bug or I'm doing it wrong?



      Layout:



      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:tools="http://schemas.android.com/tools"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical"
      android:padding="16dp">

      <com.google.android.material.button.MaterialButton
      style="@style/MaterialButton"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      app:icon="@drawable/ic_launcher"
      app:iconGravity="textStart"
      tools:text="L" />

      <com.google.android.material.button.MaterialButton
      style="@style/MaterialButton"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      app:icon="@drawable/ic_launcher"
      app:iconGravity="textStart"
      tools:text="Lorem ipsum" />

      <com.google.android.material.button.MaterialButton
      style="@style/MaterialButton"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      app:icon="@drawable/ic_launcher"
      app:iconGravity="textStart"
      tools:text="Lorem ipsum dolor sit amet" />
      </LinearLayout>


      Style:



      <style name="MaterialButton" parent="Widget.MaterialComponents.Button">
      <item name="android:textColor">@color/white</item>
      <item name="android:textAppearance">@style/TextTitleAllCapsBold</item>
      <item name="android:fontFamily">@font/roboto_condensed_regular</item>
      <item name="android:padding">@dimen/padding_medium</item>
      <item name="backgroundTint">@color/colorPrimary</item>
      <item name="iconSize">32dp</item>
      </style>


      Using implementation 'com.google.android.material:material:1.0.0'










      share|improve this question














      Hello I ran into problem with aligning icon in material button on Android. I have button with match_parent width, text and icon next to text. I want to align icon 8dp left to text and I tried do it by com.google.android.material.button.MaterialButton app:iconGravity. But result was not as expected.



      bad aligned icons image



      As you can see, with longer text, icon padding is smaller and smaller. I also tried define app:iconPadding (default is 8dp) but with same result.



      Is this bug or I'm doing it wrong?



      Layout:



      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:tools="http://schemas.android.com/tools"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical"
      android:padding="16dp">

      <com.google.android.material.button.MaterialButton
      style="@style/MaterialButton"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      app:icon="@drawable/ic_launcher"
      app:iconGravity="textStart"
      tools:text="L" />

      <com.google.android.material.button.MaterialButton
      style="@style/MaterialButton"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      app:icon="@drawable/ic_launcher"
      app:iconGravity="textStart"
      tools:text="Lorem ipsum" />

      <com.google.android.material.button.MaterialButton
      style="@style/MaterialButton"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      app:icon="@drawable/ic_launcher"
      app:iconGravity="textStart"
      tools:text="Lorem ipsum dolor sit amet" />
      </LinearLayout>


      Style:



      <style name="MaterialButton" parent="Widget.MaterialComponents.Button">
      <item name="android:textColor">@color/white</item>
      <item name="android:textAppearance">@style/TextTitleAllCapsBold</item>
      <item name="android:fontFamily">@font/roboto_condensed_regular</item>
      <item name="android:padding">@dimen/padding_medium</item>
      <item name="backgroundTint">@color/colorPrimary</item>
      <item name="iconSize">32dp</item>
      </style>


      Using implementation 'com.google.android.material:material:1.0.0'







      android material-design






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 23 '18 at 12:54









      goofygoofy

      1818




      1818
























          2 Answers
          2






          active

          oldest

          votes


















          0














          remove app:iconGravity="textStart"






          share|improve this answer
























          • Doesn't work. I want to have icon right next to text, not not aligned left.

            – goofy
            Jan 16 at 13:02



















          0















          TL;DR



          only use capitalized text and/or monospace fonts for buttons and use textAlignment="center" (the default) when specifying an icon with iconGravity="textStart"




          I found reason and workaround how to fix this bug.
          It calculates leftPadding of icon badly becouse of attribute android:textAllCaps.



          If you have same experience, remove (or set to false) attribute android:textAllCaps and replace it with uppercased text in strings.xml or using .toUpperCase( ) in Java or Kotlin



          It is issue that was found on September 2018 and by October is marked as Fixed on Google's issuetracker. But I'm using latest stable version of library and still have the bug. Here is my issue



          UPDATE



          The bug is now fixed in version 1.1.0-alpha02.






          share|improve this answer


























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53447120%2fhow-i-can-align-icon-next-to-text-of-materialbutton-with-defined-padding%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            remove app:iconGravity="textStart"






            share|improve this answer
























            • Doesn't work. I want to have icon right next to text, not not aligned left.

              – goofy
              Jan 16 at 13:02
















            0














            remove app:iconGravity="textStart"






            share|improve this answer
























            • Doesn't work. I want to have icon right next to text, not not aligned left.

              – goofy
              Jan 16 at 13:02














            0












            0








            0







            remove app:iconGravity="textStart"






            share|improve this answer













            remove app:iconGravity="textStart"







            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Jan 15 at 14:59









            user10917572user10917572

            1




            1













            • Doesn't work. I want to have icon right next to text, not not aligned left.

              – goofy
              Jan 16 at 13:02



















            • Doesn't work. I want to have icon right next to text, not not aligned left.

              – goofy
              Jan 16 at 13:02

















            Doesn't work. I want to have icon right next to text, not not aligned left.

            – goofy
            Jan 16 at 13:02





            Doesn't work. I want to have icon right next to text, not not aligned left.

            – goofy
            Jan 16 at 13:02













            0















            TL;DR



            only use capitalized text and/or monospace fonts for buttons and use textAlignment="center" (the default) when specifying an icon with iconGravity="textStart"




            I found reason and workaround how to fix this bug.
            It calculates leftPadding of icon badly becouse of attribute android:textAllCaps.



            If you have same experience, remove (or set to false) attribute android:textAllCaps and replace it with uppercased text in strings.xml or using .toUpperCase( ) in Java or Kotlin



            It is issue that was found on September 2018 and by October is marked as Fixed on Google's issuetracker. But I'm using latest stable version of library and still have the bug. Here is my issue



            UPDATE



            The bug is now fixed in version 1.1.0-alpha02.






            share|improve this answer






























              0















              TL;DR



              only use capitalized text and/or monospace fonts for buttons and use textAlignment="center" (the default) when specifying an icon with iconGravity="textStart"




              I found reason and workaround how to fix this bug.
              It calculates leftPadding of icon badly becouse of attribute android:textAllCaps.



              If you have same experience, remove (or set to false) attribute android:textAllCaps and replace it with uppercased text in strings.xml or using .toUpperCase( ) in Java or Kotlin



              It is issue that was found on September 2018 and by October is marked as Fixed on Google's issuetracker. But I'm using latest stable version of library and still have the bug. Here is my issue



              UPDATE



              The bug is now fixed in version 1.1.0-alpha02.






              share|improve this answer




























                0












                0








                0








                TL;DR



                only use capitalized text and/or monospace fonts for buttons and use textAlignment="center" (the default) when specifying an icon with iconGravity="textStart"




                I found reason and workaround how to fix this bug.
                It calculates leftPadding of icon badly becouse of attribute android:textAllCaps.



                If you have same experience, remove (or set to false) attribute android:textAllCaps and replace it with uppercased text in strings.xml or using .toUpperCase( ) in Java or Kotlin



                It is issue that was found on September 2018 and by October is marked as Fixed on Google's issuetracker. But I'm using latest stable version of library and still have the bug. Here is my issue



                UPDATE



                The bug is now fixed in version 1.1.0-alpha02.






                share|improve this answer
















                TL;DR



                only use capitalized text and/or monospace fonts for buttons and use textAlignment="center" (the default) when specifying an icon with iconGravity="textStart"




                I found reason and workaround how to fix this bug.
                It calculates leftPadding of icon badly becouse of attribute android:textAllCaps.



                If you have same experience, remove (or set to false) attribute android:textAllCaps and replace it with uppercased text in strings.xml or using .toUpperCase( ) in Java or Kotlin



                It is issue that was found on September 2018 and by October is marked as Fixed on Google's issuetracker. But I'm using latest stable version of library and still have the bug. Here is my issue



                UPDATE



                The bug is now fixed in version 1.1.0-alpha02.







                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited Feb 4 at 8:51









                Community

                11




                11










                answered Jan 25 at 14:10









                goofygoofy

                1818




                1818






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53447120%2fhow-i-can-align-icon-next-to-text-of-materialbutton-with-defined-padding%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    這個網誌中的熱門文章

                    Xamarin.form Move up view when keyboard appear

                    Post-Redirect-Get with Spring WebFlux and Thymeleaf

                    Anylogic : not able to use stopDelay()