3

我有一个基本AutoCompleteTextView的和ArrayAdapter绑定的。在 Android 4.* 上运行良好,但在 2.3 上,每当我滚动下拉列表时,行都会呈现为全黑。如果我点击一行,则整个下拉列表将正确呈现。

在下面的文本中,当使用生成TextView时inflate,如果我将背景颜色设置为白色(注释掉的行),那么即使滚动也总是显示白色,但是点击选择效果(将行更改为系统点击一行颜色)然后不起作用。

我在这里使用actionbarsherlock,但我希望这不是原因。有任何想法吗?

截图:http: //i.imgur.com/gnugp.png

public class AutocompleteAdapter extends ArrayAdapter<String> implements Filterable {

public AutocompleteAdapter(Context context) {
    super(context, android.R.layout.simple_dropdown_item_1line);

    mInflater = LayoutInflater.from(context);
    mContext = context;
}

@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
    final TextView tv;
    if (convertView != null) {
        tv = (TextView) convertView;
    } else {
        tv = (TextView) mInflater.inflate(android.R.layout.simple_dropdown_item_1line, parent, false);
        //tv.setBackgroundColor(tv.getResources().getColor(R.color.white));
    }

    tv.setText(getItem(position));
    return tv;
}
....
4

4 回答 4

4

这是因为你的主题是黑暗的..

如果您在 Manifest.xml 中的主题很轻......即,

    <application
        android:label="@string/app_name"
        android:theme="@style/Theme.Light.NoTitleBar.Workaround" >

我通过在 values 文件夹中添加 2 个 xml 文件来使其工作。

样式.xml

<resources>

    <style name="AppTheme" parent="android:Theme.Light" />
      <style name="AutoCompleteTextViewLight" parent="@android:style/Widget.AutoCompleteTextView">
    <item name="android:textColor">@android:color/primary_text_light</item>
    </style>
    <style name="Widget.DropDownItemLight" parent="@android:style/Widget.DropDownItem">
        <item name="android:textColor">@android:color/primary_text_light</item>
    </style>
</resources>

主题.xml

<resources>
    <style name="Theme.Light.NoTitleBar.Workaround" parent="@android:style/Theme.Light.NoTitleBar">
        <item name="android:autoCompleteTextViewStyle">@style/AutoCompleteTextViewLight</item>
        <item name="android:dropDownItemStyle">@style/Widget.DropDownItemLight</item>
    </style>
</resources>

我找不到其他方法...

于 2013-01-10T06:11:12.007 回答
1

我相信,DropDown 背景和 TextColor 取决于您的应用程序的主题或设备的默认主题。

因为,你说它在少数设备上运行良好(我有同样的问题)。使用自定义 DropDownItem 总是好的。

代替:

tv = (TextView) mInflater.inflate(android.R.layout.simple_dropdown_item_1line, parent, false);

使用simple_dropdown_item_1line自定义 TextView 布局:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/text_dropDown"
    android:layout_width="fill_parent"
    android:layout_height="30dp"
    android:background="@color/white"
    android:padding="2dp"
    android:textColor="@color/text_light_grey"
    android:textSize="@dimen/text_medium" >
</TextView>
于 2013-01-10T05:55:16.513 回答
1

尝试使用这种方式...

tv = (TextView) mInflater.inflate(android.R.layout.simple_spinner_item, parent, false);
于 2013-01-10T06:03:36.713 回答
1

此问题类似于使用ListView.

http://android-developers.blogspot.fr/2009/01/why-is-my-list-black-android.html

解决方法是使用cacheColorHint属性,但是属性不存在AutoCompleteTextView,那么如何设置呢?实际上,您必须在下拉菜单中进行设置。

将自定义样式应用于下拉列表:

<item name="dropDownListViewStyle">@style/Widget.YourApp.DropDownListView</item>

为 设置一个值cacheColorHint

<style name="Widget.YourApp.DropDownListView" parent="android:Widget.ListView.DropDown">
    <item name="android:cacheColorHint">@android:color/transparent</item>
</style>
于 2013-06-18T12:30:38.627 回答