【问题标题】:Fragments with different themes不同主题的片段
【发布时间】:2018-01-12 15:16:43
【问题描述】:

我在尝试在运行时更改 Android Activity 的主题时遇到了麻烦。

这就是我要归档的内容: 我有一个包含三个片段的活动(MainActivity)。其中两个片段应该有一个工具栏和一个正常的状态栏,但第三个片段不应该有工具栏,应该有一个透明的状态栏,后面有内容。因此,我创建了两种样式:带有工具栏等的普通 AppTheme 和没有这些的另一种称为 Fullscreen 的样式。现在,当片段被切换时,主题应该会改变。

我曾尝试在为新片段充气后更改主题,但这不起作用(显然)。

我还看到了this question 和其他一些人,它们几乎都包含相同的答案,这对我不起作用。

我真的希望你们中的一个人能帮上忙!

谢谢

【问题讨论】:

  • 对于不同的片段实例使用不同的主题应该不是问题。包含您的一些代码将有助于我们更好地理解您的问题。

标签: android android-fragments android-toolbar android-theme


【解决方案1】:

你可以修改Activity主题然后recreate看看效果

class YourActivity{
boolean isThirdFragmentVisible;
...
public void onNavigateToThirdFragment(){
   setTheme(<full screen theme>);
   isThirdFragmentVisible = true;
   recreate();
}

...
public void onCreate(){
   if(isThirdFragmentVisible){
       showThirdFragment();
   }
}
...
}

【讨论】:

  • 显然isThirdFragmentVisible 中的onCreate 将始终为假...
【解决方案2】:

任何片段都可以访问附加的活动。因此,片段可以设置任何活动属性,例如工具栏和状态栏。

例子:

状态栏:

  • 在 onViewCreated 回调中你可以设置这个模式不显示状态栏:

    getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
    
  • 要在其他fragment中显示状态栏,也可以这样设置:

    getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
    

工具栏:

同理,工具栏可以由任何片段使用setSupportActionBar活动方法设置。更多信息 > https://developer.android.com/training/appbar/setting-up.html#add-toolbar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2012-03-17
    • 2020-05-28
    • 1970-01-01
    相关资源
    最近更新 更多