我正在尝试为DialogFragment设置标题文本大小
我为旧的测试设备(Android 5.0 API 21)进行了编码,一切都很好
但是在我开始使用新的测试设备(Android 8.1 API 27)后,应用程序崩溃了
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_multiple_info_dialog, null, false);
getDialog().setTitle(R.string.dialog_fragment_BAC_info_title);
TextView title = getDialog().findViewById(android.R.id.title);
title.setTextSize(30);
title.setTextColor(getResources().getColor(R.color.white));
它落在setTextSize(30)行上,错误
java.lang.NullPointerException:尝试调用虚拟方法'void 空对象引用上的android.widget.TextView.setTextSize(float)'
是的,登录后告诉我标题== null
我试图将部分代码替换为onDialogCreate(Bundle savedInstanceState)...
但是同样的事情-现在应用程序位于onDialogCreate ...的同一行上。
有任何解决方法的想法吗?
来自Gradle
compileSdkVersion 27
minSdkVersion 21
targetSdkVersion 27
答案 0 :(得分:0)
这可能会有所帮助,传递文本大小以及单位。
_selectedIndex: Number,
答案 1 :(得分:0)
感谢Mike M.
正确的解决方法是
为onCreate()中的对话框片段定义样式,并在DialogFragment类的
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, R.style.DialogFragmentStyle);
}
需要在styles.xml中添加样式
<style name="DialogFragmentStyle" parent="Theme.AppCompat.Light.Dialog">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">false</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">false</item>
</style>
以及需要设计对话框之后
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
TextView title = dialog.findViewById(android.R.id.title); //here it works!
title.setTextSize(30);
title.setText(R.string.dialog_fragment_title);
title.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
title.setTextColor(getResources().getColor(R.color.orange));
dialog.getWindow().setLayout(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
return dialog;
}