为了显示具有丰富内容和输入元素的对话框,我使用 AndroidAlertDialog.Builder
创建了一个对象,AlertDialog
然后使用系统LayoutInflater
将内容(setView(...)
)设置为一些 XML 布局文件。
这在 Android 2.X 上看起来很完美(深色背景,白色文本):
但在 Android 4.X 上它根本不可读:
注意:当然,这些对话框并不相同,但是两个对话框都会出现问题。
那么我做错了什么?我Theme.Light
在 API 级别 < 11 和Theme.Holo.Light
>= 11 上使用。
编辑1:这是我用来膨胀的代码:
private LayoutInflater mGlobalInflater; // in Activity class
mGlobalInflater = (LayoutInflater) getApplicationContext().getSystemService(LAYOUT_INFLATER_SERVICE); // in Activity's onCreate()
mGlobalInflater.inflate(R.layout.input_dialog, null); // when needed
编辑 2:这是“选择日期”视图的膨胀 XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="15dp">
<DatePicker
android:id="@+id/input_date"
android:startYear="1900"
android:layout_height="wrap_content"
android:layout_width="fill_parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="@string/hint" />
</LinearLayout>
编辑 3:正如我现在发现的那样,膨胀的对话框内容在使用时在 Android <= 2.3.3 上mGlobalInflater = (LayoutInflater) getApplicationContext().getSystemService(LAYOUT_INFLATER_SERVICE);
正确呈现,在使用时在 Android >= 3.0 上正确呈现mInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
。所以这Context
有所不同。为什么?
编辑4:
onContextItemSelected()
对话框在of内部创建和膨胀Activity
:
AlertDialog.Builder dialogPoup = new AlertDialog.Builder(MainActivity.this);
dialogPoup.setTitle("abc123");
final View inputDialog = mGlobalInflater.inflate(R.layout.input_dialog, null);
// setting some properties of the view and its child views
dialogPoup.setView(inputDialog);
这个对吗?还是我必须用' 的上下文分配给 inMainActivity.this
的变量mContext
(例如)替换?Activity
onCreate()