![](/img/trans.png)
[英]Remove top and bottom black borders from AutoCompleteTextView
[英]AutoCompleteTextView - How to remove margin from top and bottom?
我正在使用AutoCompleteTextView
創建一個下拉菜單。 如何刪除列表頂部和底部的默認邊距?
要重新創建:
<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:boxBackgroundColor="@color/white"
android:focusable="false"
app:boxStrokeWidth="1.5dp"
app:layout_constraintTop_toBottomOf="@+id/spinner_network">
<AutoCompleteTextView
android:id="@+id/autoCompleteTextView"
android:layout_width="250dp"
android:layout_height="match_parent"
android:inputType="none"
android:dropDownHeight="200dp"
android:text="Select age" />
</com.google.android.material.textfield.TextInputLayout>
List<String> dropdownItems = new ArrayList<>();
for(int i = 1; i <= 100; i++){
dropdownItems.add(String.valueOf(i));
}
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(
this, R.layout.dropdown_item, dropdownItems
);
AutoCompleteTextView autoCompleteTextView = findViewById(R.id.autoCompleteTextView);
autoCompleteTextView.setAdapter(spinnerAdapter);
R.layout.dropdown_item
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textView"
android:layout_width="match_parent"
android:textColor="@color/black"
android:padding="14dp"
android:layout_height="wrap_content"
android:text="TextView" />
嘗試從 AutoCompleteTextView 中刪除dropDownHeight
屬性
android:dropDownHeight="200dp" --> remove this line
並將您的 AutoCompleteTextView 高度設置為wrap_content
。
同時,我認為沒有直接的 API 可以讓您這樣做; 但是您可以通過反射作為最后的手段來實現它。 希望會有一個 API,因為反射是反模式。
AutoCompleteTextView
的下拉彈出窗口可以通過mPopup
field內部訪問。 要通過反射獲得它:
// 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
}
然后通過將其設置為內部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)
}
這是在OnClickListener
中完成的,因為當用戶點擊列表時,可空性檢查將不匹配。
它不會讓我編輯答案,而是https://stackoverflow.com/users/2850651/mike-m的另一個解決方案來刪除填充:
在autoCompleteTextView
的.showDropDown()
中調用 .showDropDown .setOnClickListener()
<com.google.android.material.textfield.MaterialAutoCompleteTextView
android:id="@+id/autoCompleteTextView"
android:layout_width="250dp"
android:layout_height="50dp"
android:drawableEnd="@drawable/ic_arrow_drop_down"
android:dropDownHeight="200dp"
android:inputType="none"
android:text="Select age"
...../>
List<String> dropdownItems = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
dropdownItems.add(String.valueOf(i));
}
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(
this, R.layout.dropdown_item, dropdownItems
);
MaterialAutoCompleteTextView autoCompleteTextView = findViewById(R.id.autoCompleteTextView);
autoCompleteTextView.setAdapter(spinnerAdapter);
//.showDropDown() removes the padding
autoCompleteTextView.setOnClickListener(v -> autoCompleteTextView.showDropDown());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.