我想为具有这些属性的DialogFragments
创建一个样式,但它们永远不会应用于我的DialogFragments
。
大小永远不会更改为100dp
。正如您所看到的,我使用了android:width
和layout_width
,但这些都没有做任何事情。
也不应用填充。
背景R.drawable.popup_rounded_frame
只是圆角矩形的shape
。
它几乎可以工作,但背景也适用于我布局中的其他RelativeLayouts'
背景。但它不能正常工作:getDialog().getWindow().setBackgroundDrawableResource(R.drawable.popup_rounded_frame);
实际上删除了当前的背景并将其替换为您想要的背景。
此<item name="android:background">@drawable/popup_rounded_frame</item>
仅设置当前背景的背景!
我的DialogFragment样式
<style name="ArionDialogFragment" parent="Theme.AppCompat.Dialog">
<item name="android:width">100dp</item>
<item name="android:height">100dp</item>
<item name="android:layout_width">100dp</item>
<item name="android:layout_height">100dp</item>
<item name="android:padding">16dp</item>
<item name="android:background">@drawable/popup_rounded_frame</item>
</style>
这是我的DialogFragment的启动方式
popuptest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
PopUP popUP = new PopUP();
popUP.setStyle(DialogFragment.STYLE_NO_FRAME, R.style.ArionDialogFragment);
popUP.show(getSupportFragmentManager(),"d");
}
});
这是扩展DialogFragment
的PopUp
public class PopUP extends DialogFragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.popup_connectsensor,container,false);
return v;
}
它的外观如下:https://www.dropbox.com/s/8iy5b5t8ax293oo/Screenshot_20160913-123922.png?dl=0
答案 0 :(得分:0)
我认为你做错了。您需要在创建对话框时应用样式。像这样:
public static class AwesomeDialogFragment extends DialogFragment {
public static AwesomeDialogFragment newInstance() {
AwesomeDialogFragment f = new AwesomeDialogFragment();
f.setArguments(new Bundle(0));
return f;
}
@SuppressLint("InflateParams")
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity(), R.style.YourStyle)
.setView(getActivity().getLayoutInflater().inflate(R.layout.your_layout, null))
.setPositiveButton(R.string.btn_done, null)
.setNegativeButton(R.string.btn_cancel, null)
.setCancelable(false)
.create();
}
}
您需要覆盖onCreateDialog()
。通过这种方式,您可以应用自定义样式。
您可以通过以下方式调用您的片段:
AwesomeDialogFragment.newInstance().show(getSupportFragmentManager(), "your_tag");
答案 1 :(得分:0)
尝试将
放入 setStyle(DialogFragment.STYLE_NO_FRAME, R.style.ArionDialogFragment)
PopUP类中onCreate()方法内的代码。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_FRAME,R.style.ArionDialogFragment);
}
这会让对话框正确应用您想要的样式。
答案 2 :(得分:0)
尝试一下:
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//the following line has to be placed before the inflater gets created
getContext().getTheme().applyStyle(R.style.ArionDialogFragment, true);
View v = inflater.inflate(R.layout.popup_connectsensor, container, false);
return v;
}
答案 3 :(得分:0)
class YourDialogFragment : DialogFragment()
override fun getTheme(): Int {
return R.style.YourStyleDialog
}