无法在FragmentDialog中设置主题/样式

时间:2018-08-16 13:02:49

标签: android android-layout kotlin

class BottomBarFragment : BottomSheetDialogFragment() {

      override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
            val contextThemeWrapper = ContextThemeWrapper(getActivity(), R.style.Theme_BaseDarkTheme)
            val localInflater = inflater.cloneInContext(contextThemeWrapper)
            binding = FragmentBottomBarBinding.inflate(localInflater, container, false)
            // tried setStyle also
            setStyle(0, R.style.Theme_BaseDarkTheme)
        }

}

样式

<style name="Theme.BaseDarkTheme" parent="Theme.AppCompat">
    <item name="dividerColor">@color/divider_dark</item>
</style>

在片段对话框布局中

    <LinearLayout
        style="@style/llParent"
        android:background="?attr/dividerColor"
        >

因此,我的布局应为深色,但始终为浅色。我在做什么错了?

2 个答案:

答案 0 :(得分:1)

setStyle()的文档中说:

  

调用以自定义片段的基本外观和行为   对话。这可以用于一些常见的对话框行为,请小心   为您选择标志,主题和其他选项。效果一样   可以通过手动设置对话框和窗口属性来实现   你自己在创建片段的对话框后调用此命令   没有效果。

片段的对话框将在onCreate()之后和onCreateView()之前创建。 尝试从setStyle()方法调用onCreate()

答案 1 :(得分:0)

基本上,如果您尝试使用名称为“ dialog”的东西,则应建立对话框。为此,有一种类似onCreateDialog()的方法。

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(),your_style);

    ...

    return builder.create();
}

否则,您应该只扩展一个Fragment,然后可以在其中调用onCreateView()这样的内容:

Context contextThemeWrapper = new ContextThemeWrapper(getActivity(),your_style);
    LayoutInflater newInflater = inflater.cloneInContext(contextThemeWrapper);
    View view = newInflater.inflate(your_layout,container,false);

对不起,Java代码,但是应该有类似的代码。