EditText padding attribute does not work the same for API 19 and 21

android, android-layout

Solution

This seems to be a bug in API 21 - Issue 77982.

Should be fixed in future releases. For temporary fix, try setting the padding dynamically.

update : 1) `Actually, the 21 works fine. Is the 19 that doesn't.`

The bug itself is - "the padding works fine in api 21 and doesn't work in lower android devices". This bug is present in sdk 21 and since you are compiling your app with sdk 21 the padding is not working in lower apis.

2) `searchView.setPadding(40, 0, 55, 0);`

This sets the padding in pixels, and you won't notice the difference if you run it in high denisty devices. Try setting padding in dp

int paddingLeft = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics());
        int paddingRight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 55, getResources().getDisplayMetrics());
        int paddingTop = editText.getPaddingTop();
        int paddingBottom = editText.getPaddingBottom();
        editText.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);

Problem

I'm attaching a screen capture with both 19 and 21 emulators running: The one on the left is Android 19 and the one on the right is 21. As you can see, the API 19 based emulator does not respect the padding attribute. Same thing happens on a 4.4.x device, so it's not only an emulator problem. This is the .xml code I'm using for this activity: ``` <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.birsan.cardbox.FolderScreen"> <ImageView android:id="@+id/magnifying_glass_icon" android:layout_width="20dp" android:layout_height="20dp" android:layout_alignBottom="@+id/search_button" android:layout_alignLeft="@+id/search_folder" android:layout_alignStart="@+id/search_folder" android:layout_marginBottom="2dp" android:layout_marginLeft="9dp" android:layout_marginStart="9dp" android:contentDescription="magnifying glass" android:src="@drawable/ic_menu_search" /> <include android:id="@+id/toolbar" layout="@layout/app_bar" /> <EditText android:id="@+id/search_folder" android:layout_width="250dp" android:layout_height="30dp" android:layout_marginLeft="8dp" android:layout_marginTop="10dp" android:background="@drawable/search_custom_widget" android:focusable="true" android:hint="Search in folders" android:iconifiedByDefault="false" android:paddingLeft="40dp" android:paddingRight="55dp" android:singleLine="true" android:textSize="14sp" android:textStyle="bold" /> <Button android:id="@+id/search_button" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="26dp" android:layout_alignBottom="@+id/search_folder" android:layout_alignEnd="@+id/search_folder" android:layout_alignRight="@+id/search_folder" android:layout_marginBottom="2dp" android:layout_marginRight="2dp" android:background="@color/my_blue" android:text="Go" android:textColor="#fff" android:textSize="10sp" /> <com.name.cardbox.SlidingTabLayout android:id="@+id/sliding_tabs" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_below="@+id/app_bar" android:layout_marginTop="40dp" android:background="@color/my_blue" /> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/sliding_tabs" android:background="#fff"> </android.support.v4.view.ViewPager> ``` Why the discrepancy? What am I missing and how can I fix it? Thanks.

Original source