添加到布局的视图继承了父级的样式

时间:2015-01-22 14:20:28

标签: android android-layout android-view android-styles

我正在重复使用InputDialog extends DialogFragment并在EditInputDialog上添加删除按钮所有这一切正常,但现在我正在玩围绕着风格,发现了这个古怪的小问题:

delete button

我希望删除按钮使用按钮的默认设备样式

这是布局的简单样式(/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并非我唯一尝试过的

但它根本没有帮助。有什么我想念的,或者这是怎么回事?

这种风格不是我最终要用的,这只是用于测试,然后我遇到了这个问题。

1 个答案:

答案 0 :(得分:2)

您需要将对话框的上下文而不是活动上下文提供给按钮,以便它可以检索正确的主题(Dialog基类使用ContextThemeWrapper来包装活动上下文,同时提供它自己的主题)。

使用getActivity()替换传递给按钮构造函数的getDialog().getContext()应该可以解决问题。请注意,传递给LayoutInflater回调的onCreateView()会使用正确的上下文进行初始化,您也可以通过调用inflater.getContext()从那里检索它。

相关问题