【问题标题】:AutoCompleteTextView dropdown can't change dropdown list elevation and paddingAutoCompleteTextView 下拉菜单无法更改下拉列表高度和填充
【发布时间】:2020-10-01 22:16:49
【问题描述】:

我在 TextInputLayout 中使用 AutoCompleteTextView 并在 ArrayAdapter 的帮助下填充它。

    val view = TextInputLayout(
        ContextThemeWrapper(
            this,
            R.style.AppTheme_TextInput_Dropdown
        )
    )
    
    val autoCompleteTextView = AutoCompleteTextView(
        ContextThemeWrapper(
            view.context,
            R.style.AppTheme_AutoCompleteEditText
        )
     <setting some parameters here>

    val arrayAdapter = ArrayAdapter(
        this,
        android.R.layout.simple_dropdown_item_1line,
        arrayOf("Temporary", "Mocked", "Data", "Some other data", "Testing123"),
    )

    autoCompleteTextView.setAdapter(arrayAdapter)
    view.addView(autoCompleteTextView)
    return view

效果是这样的

但我想更改下拉列表中的填充和高度,使其看起来像这样

还没有找到任何有用的方法/参数可以做到这一点。是否有一些简单的方法可以做到这一点,或者将 ArrayAdapter 更改为其他一些(例如 SpinnerAdapter)适配器可以完成这项工作?

编辑:

【问题讨论】:

    标签: android view adapter autocompletetextview


    【解决方案1】:

    请尝试以下:

    import android.os.Bundle;
    import android.widget.ArrayAdapter;
    import android.widget.LinearLayout;
    import androidx.annotation.Nullable;
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.appcompat.widget.AppCompatAutoCompleteTextView;
    
    public class AutoCompleteDropDownExample extends AppCompatActivity {
    
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        AppCompatAutoCompleteTextView autoCompleteTextView = new AppCompatAutoCompleteTextView(this);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        autoCompleteTextView.setLayoutParams(params);
        autoCompleteTextView.setDropDownWidth(LinearLayout.LayoutParams.MATCH_PARENT);
        autoCompleteTextView.setThreshold(1);
    
        ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.select_dialog_item, new String[]{"Temporary", "Mocked", "Data", "Some other data", "Testing123"});
        autoCompleteTextView.setAdapter(adapter);
    
        setContentView(autoCompleteTextView);
    }
    
    • 您没有为AutoCompleteTextView 设置布局参数
    • setDropDownWidth(LinearLayout.LayoutParams.MATCH_PARENT); 会成功的。

    【讨论】:

    • 我正在设置布局参数,只是没有提及,认为它是多余的信息对不起。与 view.setMaxWidth() 一样增加了很多,但主要问题是顶部填充(第一个元素上的可用空间过多)。仍在寻找解决方案。
    • 如果有的话,你能分享整个 Activity/Fragment 代码以及 xml 吗?
    • 活动是 360 行长。没有 XML。 Evereytinh 是动态制作的。我发布了重要的代码片段。除了我发布的代码之外,还设置了一些参数,如大小、颜色等,但没关系。
    • 您可以尝试禁用提示吗?在 AutoCompleteTextView 上使用 setHintEnabled(false);。如果这不起作用,请分享您的 onCreate() 方法。
    • 一切正常,只是想摆脱我在编辑中发布的这些填充。这与正在使用的项目适配器的适配器或 xml 有关。
    【解决方案2】:

    通过添加我自己在活动中加载的 XML 实现使其看起来更好

    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@android:id/text1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceListItemSmall"
        android:gravity="center_vertical"
        android:paddingStart="0dp"
        android:paddingTop="0dp"
        android:paddingEnd="0dp"
        android:minHeight="?android:attr/listPreferredItemHeightSmall" />
    

    然后在活动中

    val arrayAdapter = ArrayAdapter(
                this,
                R.layout.dictionary_list_item,
                arrayOf("Temporary", "Mocked", "Data", "Some other data", "Testing123"),
            )
    
    • 改变了宽度,就像之前的答案/cmets 一样。

    最后我仍然不知道如何更改 dropList 容器填充,但现在看起来已经足够好了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多