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.
Related Topics
How to Create Parallelogram Shape Background
Fragment-Fragment Communication in Android
Sqlite Example Program in Android
How to Run Service Continuously
Resource Linking Fails on Lstar
Failed to Resolve: Com.Github.Philjay:Mpandroidchart:V2.1.4
Check If User Is Authenticated for the First Time in Firebase Google Authentication in Android
Difference Between Finish() and System.Exit(0)
Circular Dependencies Cannot Exist in Relativelayout, Android
Project Has No Default.Properties File! Edit the Project Properties to Set One
Android/Java: Transition/Migration from Proguard to R8
How to Pass a File Path Which Is in Assets Folder to File(String Path)
Toast Created in an Intentservice Never Goes Away
Why Shouldn't I Use System.Out.Println() in Android