Reputation: 712
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.
Upvotes: 3
Views: 3056
Reputation:
You should now be using android:paddingStart
instead of android:paddingLeft
anyway, and it also fixes this bug. There's no system fix coming for this it seems.
Upvotes: 0
Reputation: 12526
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);
Upvotes: 5