12

我正在研究 AutoCompleteTextView。它工作正常,但下拉文本始终是白色背景上的白色文本。这张照片解释了我的问题

图片解释我的问题

在此处输入图像描述

XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#000"
    >
    <!-- <AutoCompleteTextView  -->
    <AutoCompleteTextView
        android:id="@+id/text"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:hint="Tapez votre 1texte"
        android:textColor="#000"        
        />
</LinearLayout>

爪哇:

view = (AutoCompleteTextView)findViewById(R.id.text);        
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,data);
adapter.setDropDownViewResource(R.drawable.ic_action_search);//dd
view.setAdapter(adapter);
4

7 回答 7

32

如果您想更改下拉项的外观,请更改您传递给 ArrayAdapter 的 XML 布局(在您的情况下是android.R.layout.simple_dropdown_item_1line)。

让我们创建一个名为my_list_item.xmlin的新布局res/layout

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    style="?android:attr/dropDownItemStyle"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:padding="5dp"
    android:textAppearance="?android:attr/textAppearanceMediumInverse"
    android:textColor="#00f" />

此文本较小、呈蓝色且居中。我不推荐使用这种布局,更多的是为了证明你可以自定义它。

现在改用这个:

view = (AutoCompleteTextView)findViewById(R.id.text);        
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.my_list_item, data);
view.setAdapter(adapter);

当您在此处设置属性时(如文本颜色):

<AutoCompleteTextView
    android:id="@+id/text"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:hint="Tapez votre 1texte"
    android:textColor="#000"        
    />

您只是更改下拉列表上方的框(您在与 AutoCompleteTextView 交互之前看到的框)。希望有帮助!

于 2012-08-03T01:09:40.217 回答
11

这个问题可能很老,但我相信这对我来说非常重要。我遇到了与 OP 相同的问题,但这是因为我使用 'getApplicationContext()' 代替了 'this'


错误的

ArrayAdapter<String> adapter = new ArrayAdapter<String>
                (getApplicationContext(), android.R.layout.simple_list_item_1, PLACES);


正确的

ArrayAdapter<String> adapter = new ArrayAdapter<String>
                (this, android.R.layout.simple_list_item_1, PLACES);
于 2014-05-31T10:39:14.643 回答
0

I tried setting up the theme before setcontext, tried different resources parameter in arrayAdapter and tried different theme ,but nothing helped.

Then I changed the context from 'this' to 'getApplicationContext' but the problem was persistent.

Finally I changed the context parameter to "getBaseContext()" and the problem was solved.

于 2015-02-14T16:17:55.710 回答
0

一个棘手的解决方案是:添加这一行 setTheme(android.R.style.Theme); 之前setContentView()在您的自动完成文本视图所在的活动文件中。让我知道这个是否奏效。

于 2012-12-19T10:02:32.587 回答
0

由 didldum 回答https://code.google.com/p/android/issues/detail?id=5237

通过扩展主题并覆盖键入文本和建议文本的 2 种样式的解决方法:

  1. 在清单中使用扩展主题: ... ...

  2. 创建使用固定样式的新主题 (res/values/themes.xml): ... @style/AutoCompleteTextViewLight @style/Widget.DropDownItemLight ...

  3. 创建固定颜色的样式(res/values/styles.xml): ... @android:color/primary_text_light @android:color/primary_text_light

于 2014-02-03T13:11:24.513 回答
0

我在选择“select_dialog_singlechoice ArrayAdapter<String > s1= new ArrayAdapter<String> (this,android.R.layout.select_dialog_singlechoice,state);enter image description here ”的布局中得到了我的解决方案

而不是获取应用程序上下文在 ArrayAdapter<> 中写入“this”;

尝试使用不同的布局你肯定会解决你的查询

于 2016-07-11T06:35:01.427 回答
0

我通过一个简单的棘手方式解决了这个问题,

只需将您在 AndroidManifest.xml 中声明的活动主题更改为

 <activity
   android:name=".YourActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar"
            android:windowSoftInputMode="stateHidden"></activity>

并在活动中如下

ArrayAdapter<String> adapter = new ArrayAdapter<String>
                (getActivity(), android.R.layout.select_dialog_item, arraylist);
于 2018-12-13T14:01:37.853 回答