Android: Textview: Remove Spacing and Padding on Top and Bottom

How to remove TextView top margin?

using android:includeFontPadding="false" helped me a lot in a similar situation.

AutoCompleteTextView - How to remove margin from top and bottom?



UPDATE

All the credits and efforts back to @MikeM. from the comments. Many thanks to his efforts.

Cause
The padding is coming from the TextInputLayout itself where its DropdownMenuEndIconDelegate sets some MaterialShapeDrawables as the dropdown's background. The value of the vertical padding is 8dp which taken from this resource dimen.

Solution 1:

Override this resource dimen to be 0dp:

<dimen name="mtrl_exposed_dropdown_menu_popup_vertical_padding" tools:override="true">0dp</dimen>

Solution 2:

The previous solution will be applied to all AutoCompleteTextView's, but if you want to do this for a certain ones: change the default dropDown background drawable, for instance:

autoCompleteTextView.setDropDownBackgroundDrawable(new ColorDrawable(Color.WHITE));



With reflections (Not recommended as it's anti-pattern)

The drop down popup of the AutoCompleteTextView can be accessed internally by mPopup field. To get it with reflections:

// Java:

public static ListPopupWindow getPopup(AutoCompleteTextView autoCompleteTextView) {
try {
Field field = AutoCompleteTextView.class.getDeclaredField("mPopup");
field.setAccessible(true);
return (ListPopupWindow) field.get(autoCompleteTextView);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}


// Kotlin:

fun AutoCompleteTextView.getPopup(): ListPopupWindow? {
try {
val field = AutoCompleteTextView::class.java.getDeclaredField("mPopup")
field.isAccessible = true
return field.get(this) as ListPopupWindow
} catch (e: NoSuchFieldException) {
e.printStackTrace()
} catch (e: IllegalAccessException) {
e.printStackTrace()
}
return null
}

Then remove the padding by setting it to the parent view of the internal ListView:

// Java:

autoCompleteTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ListPopupWindow popup = getPopup(autoCompleteTextView);
if (popup != null) {
ListView listView = popup.getListView();
if (listView!= null)
((View) listView.getParent()).setPadding(0, 0, 0, 0);
}
}
});

// Kotlin

autoCompleteTextView.setOnClickListener {
val popUp = autoCompleteTextView2.getPopup()?.listView?.parent
if (popUp != null)
(popUp as View).setPadding(0, 0, 0, 0)
}

This is done in OnClickListener because the nullability checks won't match as the list is formed when the user hits it.

Sample Image



Related Topics



Leave a reply



Submit