我有一个基本的AutoCompleteTextView
和一个ArrayAdapter
。在Android 4. *上工作得很好,但是在2.3滚动下拉列表时,行会全部呈现黑色。如果我点击一行,那么整个下拉列表会正确呈现。
在下面的文字中,当使用inflate
生成TextView时,如果我将背景颜色设置为白色(注释掉的行),那么即使滚动也会显示白色,但是点按选择效果(更改)那行到系统点击一行颜色)然后不起作用。
我在这里使用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;
}
....
答案 0 :(得分:4)
因为你的主题是黑暗的..
如果您在Manifest.xml中的主题很轻..即
<application
android:label="@string/app_name"
android:theme="@style/Theme.Light.NoTitleBar.Workaround" >
我通过在values文件夹中添加2个xml文件来实现它。
<强> styles.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>
<强> theme.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>
我找不到另一种方式......
答案 1 :(得分: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>
答案 2 :(得分:1)
尝试使用这种方式......
tv = (TextView) mInflater.inflate(android.R.layout.simple_spinner_item, parent, false);
答案 3 :(得分: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>