Android : 安装在设备上时微调器背景变暗,文本变白
Android : Spinner background gets dark and text white when installed on device
我有一个 dialog
包含一个 spinner
。当我 运行 模拟器上的应用程序一切正常,但是当我 运行 它在设备上时, spinner
文本变为白色,单击的 spinner
的背景为黑色。我不明白为什么,也不知道如何解决它。这很烦人,因为无法再阅读文本。
我已经在我的应用程序的其他地方实现了 spinners
,并且一切正常。仅当 spinner
在 dialog
.
中时才会出现此问题
这是我的 dialog
的代码:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Add the buttons
builder.setPositiveButton(R.string.ok, new MyOnClickListener(itemInfo));
builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
builder.setMessage(R.string.dialog_message).setTitle(R.string.dialog_title);
//Create spinner
ArrayList<String> listForSpinner = (ArrayList) currentUser.getListNames();
String[] spinnerList = listForSpinner.toArray(new String[listForSpinner.size()]);
final ArrayAdapter<String> adp = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_spinner_item, spinnerList);
adp.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner = new Spinner(getApplicationContext());
spinner.setAdapter(adp);
spinner.setPadding(50, 50, 50, 0);
spinner.setPopupBackgroundResource(R.color.white); //test that wasn't successful
builder.setView(spinner);
AlertDialog dialog = builder.create();
dialog.show();
非常感谢!
您可以通过在 styles.xml 中定义自己的样式来更改背景
<style name="SpinnerTheme" parent="Theme.AppCompat.Light">
<item name="colorAccent">@color/bb_inActiveBottomBarItemColor</item>
<item name="android:textColorPrimary">#ffffff</item>
<item name="colorPrimary">@color/active_tab_icon</item>
<item name="colorPrimaryDark">@color/active_tab_icon</item>
<item name="android:background">@color/mb_blue</item>
</style>
然后,在您的 layout.xml 中将自定义样式设置为微调器:
<Spinner
style="@style/SpinnerTheme"
android:layout_width="match_parent"
android:layout_height="70dp"
android:id="@+id/mySpinner"
/>
为了解决这个问题,我创建了自定义布局。
我在代码中更改了 2 行:
final ArrayAdapter<String> adp = new ArrayAdapter<>(getApplicationContext(), R.layout.dialog_spinner_item, spinnerList);
adp.setDropDownViewResource(R.layout.dialog_spinner_dropdown_item);
并创建了 2 个布局文件:
dialog_spinner_item.xml :
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="@color/black"
android:background="@color/white"
android:textSize="@dimen/text_size_title_text_view">
</TextView>
dialog_spinner_dropdown_item.xml :
<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="@color/black"
android:background="@color/white"
</CheckedTextView>
我有一个 dialog
包含一个 spinner
。当我 运行 模拟器上的应用程序一切正常,但是当我 运行 它在设备上时, spinner
文本变为白色,单击的 spinner
的背景为黑色。我不明白为什么,也不知道如何解决它。这很烦人,因为无法再阅读文本。
我已经在我的应用程序的其他地方实现了 spinners
,并且一切正常。仅当 spinner
在 dialog
.
这是我的 dialog
的代码:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Add the buttons
builder.setPositiveButton(R.string.ok, new MyOnClickListener(itemInfo));
builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
builder.setMessage(R.string.dialog_message).setTitle(R.string.dialog_title);
//Create spinner
ArrayList<String> listForSpinner = (ArrayList) currentUser.getListNames();
String[] spinnerList = listForSpinner.toArray(new String[listForSpinner.size()]);
final ArrayAdapter<String> adp = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_spinner_item, spinnerList);
adp.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner = new Spinner(getApplicationContext());
spinner.setAdapter(adp);
spinner.setPadding(50, 50, 50, 0);
spinner.setPopupBackgroundResource(R.color.white); //test that wasn't successful
builder.setView(spinner);
AlertDialog dialog = builder.create();
dialog.show();
非常感谢!
您可以通过在 styles.xml 中定义自己的样式来更改背景
<style name="SpinnerTheme" parent="Theme.AppCompat.Light">
<item name="colorAccent">@color/bb_inActiveBottomBarItemColor</item>
<item name="android:textColorPrimary">#ffffff</item>
<item name="colorPrimary">@color/active_tab_icon</item>
<item name="colorPrimaryDark">@color/active_tab_icon</item>
<item name="android:background">@color/mb_blue</item>
</style>
然后,在您的 layout.xml 中将自定义样式设置为微调器:
<Spinner
style="@style/SpinnerTheme"
android:layout_width="match_parent"
android:layout_height="70dp"
android:id="@+id/mySpinner"
/>
为了解决这个问题,我创建了自定义布局。
我在代码中更改了 2 行:
final ArrayAdapter<String> adp = new ArrayAdapter<>(getApplicationContext(), R.layout.dialog_spinner_item, spinnerList);
adp.setDropDownViewResource(R.layout.dialog_spinner_dropdown_item);
并创建了 2 个布局文件:
dialog_spinner_item.xml :
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="@color/black"
android:background="@color/white"
android:textSize="@dimen/text_size_title_text_view">
</TextView>
dialog_spinner_dropdown_item.xml :
<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="@color/black"
android:background="@color/white"
</CheckedTextView>