尝试更改AlertDialog的外观,我使用DialogFragment
将ThemedDialogFragment
子类化,并将此行称为onStart()
:
int alertTitleId = getResources().getIdentifier("alertTitle", "id", "android");
TextView alertTitle = (TextView) dialog.findViewById(alertTitleId);
alertTitle.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen._20ssp));
这导致NullPointerException
,即使我确定窗口中有一个ID为alertTitle
的视图。 HierarchyViewer(*)工具确认。
试图做小变种
e.g。
int alertTitleId = getResources().getIdentifier("android:id/alertTitle", null, null);
或
TextView alertTitle = (TextView) dialog.getWindow().findViewById(alertTitleId);
或
TextView alertTitle = (TextView) dialog.getWindow().getDecorView().findViewById(alertTitleId);
但这都不起作用。
任何想法,伙计们?
(*):HierarchyViewer显示我正在寻找的id
P.S。:我解决了AlertDialog
样式问题,通过对themes.xml
进行操作,我只是想知道为什么这个方法不起作用(它应该是IMO)。
话虽如此,我将向每个答案告诉我如何设置AlertDialog的样式,因为它在这里是偏离主题的。感谢。
P.P.S:作为旁注,我尝试使用这种方法再次编译sdk级别22并在运行Android Jelly Bean 4.3.1的Android模拟器上进行测试。
P.P.P.S:运行5.1.1的模拟器也没有运气。
答案 0 :(得分:0)
您似乎正在尝试访问内部资源ID。在这种情况下,包不是“android”而是“com.android.internal”,但我不确定即使那样实际上也会为你返回ID。
Android Dialog with modifiable single line title
不幸的是,我无法访问他们的R.id.alertTitle,因为它是com.android.internal.R的一部分。