我正在重复使用InputDialog
extends DialogFragment
并在EditInputDialog
上添加删除按钮所有这一切正常,但现在我正在玩围绕着风格,发现了这个古怪的小问题:
我希望删除按钮使用按钮的默认设备样式
这是布局的简单样式(/res/values/styles.xml):
<style name="myBackgroundStyle" parent="@android:style/Theme.Dialog">
<item name="android:background">#FF0000</item>
</style>
以下是我创建和添加按钮的方法:
Button btnDelete = new Button(getActivity());
btnDelete.setText("Delete");
RelativeLayout rl = (RelativeLayout)view.findViewById(R.id.inputLayout);
LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.RIGHT_OF, R.id.btnSave);
lp.addRule(RelativeLayout.ALIGN_BASELINE, R.id.btnSave);
btnDelete.setLayoutParams(lp);
rl.addView(btnDelete);
我也尝试在创建时将样式应用于按钮,例如:
new Button(getActivity(),null,android.R.attr.buttonStyle);
.buttonStyle
并非我唯一尝试过的
但它根本没有帮助。有什么我想念的,或者这是怎么回事?
这种风格不是我最终要用的,这只是用于测试,然后我遇到了这个问题。
答案 0 :(得分:2)
您需要将对话框的上下文而不是活动上下文提供给按钮,以便它可以检索正确的主题(Dialog
基类使用ContextThemeWrapper
来包装活动上下文,同时提供它自己的主题)。
使用getActivity()
替换传递给按钮构造函数的getDialog().getContext()
应该可以解决问题。请注意,传递给LayoutInflater
回调的onCreateView()
会使用正确的上下文进行初始化,您也可以通过调用inflater.getContext()
从那里检索它。