在AutocompleteTextview的下拉列表中自定义分隔符/分隔符

时间:2012-08-02 12:56:55

标签: android drop-down-menu autocompletetextview separator divider

我在网站上看到过这个问题,但是没有人能得到任何答案。

在Android中使用AutocompleteTextview时,有没有办法在下拉列表中自定义分隔符的外观?

ListView非常简单,但只使用ArrayAdapter作为autocompletetextview,有没有办法自定义分隔符。

(不是textview,我已经知道这样做了)

4 个答案:

答案 0 :(得分:18)

我不确定如何为单个AutoCompleteTextView执行此操作,但我知道如何为整个应用程序设置它。这也应该对你有所帮助:)

<style name="MyTheme" parent="AppTheme">
        <item name="android:dropDownListViewStyle">@style/MyListViewStyle</item>
</style>

<style name="MyListViewStyle" parent="@android:style/Widget.ListView">
        <item name="android:divider">#F00</item>
        <item name="android:dividerHeight">1px</item>
</style>

答案 1 :(得分:1)

我没有找到任何分隔符属性所以我这样做了

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/black">

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="Medium Text"
    android:id="@+id/textView129"
    android:textColor="#000000"
    android:background="@color/white"
    android:layout_marginBottom="1dp"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:paddingTop="5dp"
    android:paddingBottom="5dp"/>
</LinearLayout>

所以我正在做的是我有线性布局的背景颜色和文本视图的另一种背景颜色(textView&#39;背景颜色与线性布局的背景颜色重叠)现在使用margin属性和将textview的下边距设置为1dp你将在元素之间得到一条干净的线....

答案 2 :(得分:1)

我遇到了同样的问题并尝试了许多方法但没有达到结果,最后我得到了一个快速简便的方法来设置分隔符和分频器长度与AutocompleteTextview。基本上我们可以使用ArrayAdapter Layout的TextView从底部设置边框。像

一样

步骤1。为arrayadapetr制作布局,如

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/testt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/background_single_line"
android:textColor="@drawable/text_color"
android:textAppearance="?android:attr/textAppearanceMediumInverse"
style="?android:attr/dropDownItemStyle"
android:maxLines="1"
android:padding="3dp"
android:textSize="16sp" />

step2:在drawable文件夹中创建新布局,其名称为background_single_line.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape android:shape="rectangle">
        <solid android:color="@android:color/black" />
    </shape>
</item>
<item android:bottom="1dp">
    <shape android:shape="rectangle">
        <solid android:color="@android:color/white" />
    </shape>
</item>

最后看起来像分隔符。

enter image description here

答案 3 :(得分:0)

Mark的回答通常是最佳解决方案。但是,不同版本的AppCompat库有不同的行为,关于android:dropDownListViewStyle如何影响其他菜单,如系统溢出/选项菜单。例如,在AppCompat版本23.0.1中,它不会影响ActionBar / Toolbar中的此菜单;而版本23.2.1会影响它,正如here所述。

如果您希望隔离的样式仅影响AutoCompleteTextView,则可能无法实现。但另一种方法是手动创建列表分隔符图像,作为下拉列表行布局的一部分:

<强> RES /布局/ autocomplete_list_row.xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    tools:layout_height="50dip">

    <TextView
        android:id="@+id/text"
        style="?android:attr/dropDownItemStyle"
        android:textSize="18sp"
        android:layout_width="fill_parent"
        tools:text="An auto-complete list item"
        android:minHeight="48dip"
        android:layout_height="wrap_content"
        android:ellipsize="marquee"/>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dip"
        android:background="@drawable/divider"/>

</LinearLayout>

<强> RES /抽拉/ divider.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
       android:shape="rectangle">
    <size android:height="1dp" />
    <solid android:color="#458c8c8c" />
</shape>

然后在适配器中将此布局用于AutoCompleteTextView:

ArrayAdapter<CharSequence> autoCompleteListAdapter = 
    new ArrayAdapter<>(context,
                       R.layout.autocomplete_list_row,
                       R.id.text, arrayList);

使用ConstraintLayout here的类似方法。