【问题标题】:Which Context for setTheme?setTheme 的哪个上下文?
【发布时间】:2013-01-16 23:49:54
【问题描述】:

我在我的应用中使用带有标签的 actionbarsherlock。 在选项卡上必须将文本颜色更改为黑色或白色。根据我的应用程序的方向。在风景上我必须换成白色。因为我的操作栏是黑色的。当我更改为纵向时,我必须设置为黑色,因为我的标签背景是白色的。 但是您可以以编程方式使用来更改颜色。所以我用这个技巧来改变主题。

当我的清单上的方向更改时,我已禁用重新加载选项

android:configChanges="keyboardHidden|orientation|screenSize">

这行得通。 现在我在我的片段上实现它:

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);

    if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT)
    {
        getSherlockActivity().setTheme(android.R.style.Theme_Holo_Light);
        Log.e("Portai", "port");
    }
    else
    {
        getSherlockActivity().setTheme(android.R.style.Theme_Holo);
        Log.e("land", "alnd");
    }
}

我可以在 logcat 上看到日志。但是主题是确定的。标签字体颜色始终为黑色! 任何人都可以帮我设置主题,以便我可以通过编程方式更改选项卡上的文本颜色

【问题讨论】:

  • 只有在极少数情况下才应该自己处理配置更改。你最好在你的styles.xml 中定义一个新主题,在一个符合横向配置的资源目录中(如/values-land/values-v11-land)。
  • 主题需要在屏幕上创建布局之前定义,这意味着如果您禁用活动的重新创建,您将无法拥有新主题。听从 Karakuri 的建议。
  • 谢谢,就是这样!但我怎么能做到我的应用程序不刷新自己?这是一个 SherlockFragment 并且 onCreatedView 再次加载。这不是我想要的
  • 你试过我的答案了吗?如果对你有帮助,请告诉我。

标签: android actionbarsherlock


【解决方案1】:

另一种方法是不覆盖配置更改(针对活动)并检查片段创建的方向,如下所示:

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(this.getClass().getSimpleName(), "onCreate()");

    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
      getActivity().setTheme(android.R.style.Theme_Holo_Light);
    } else {
      getActivity().setTheme(android.R.style.Theme_Holo);
    }
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 2018-05-06
    相关资源
    最近更新 更多