18

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

在android中使用AutocompleteTextview时,有什么方法可以自定义下拉菜单中分隔线的外观吗?

ListView 非常简单,但是对于 autocompletetextview 仅使用 ArrayAdapter,有什么方法可以自定义分隔线。

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

4

4 回答 4

24

我不确定如何为单个 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>
于 2012-09-18T11:10:58.283 回答
2

我遇到了同样的问题并尝试了很多方法但没有取得结果,最后我得到了一种使用 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>

最后看起来像分隔符。

在此处输入图像描述

于 2016-12-02T10:21:42.547 回答
2

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

<?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的背景颜色与线性布局的背景颜色重叠)现在使用边距属性并将textview的底部边距设置为1dp你会在元素之间划清界限......

于 2016-08-14T13:42:27.460 回答
0

马克的回答通常是最好的解决方案。然而,不同版本的 AppCompat 库有不同的行为,关于如何android:dropDownListViewStyle影响其他菜单,如系统溢出/选项菜单。例如,在 AppCompat 23.0.1 版本中,它不会影响 ActionBar/Toolbar 中的这个菜单;而版本 23.2.1 它会影响它,如解释here

如果你想要一个孤立的样式只影响 AutoCompleteTextView,那可能是不可能的。但另一种方法是手动创建列表分隔线图像,作为下拉列表行布局的一部分:

res/layout/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/drawable/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 的类似方法。

于 2018-01-02T21:12:50.103 回答