方向更改期间的“操作”选项卡背景未正确更改

时间:2014-05-06 23:09:39

标签: android android-actionbar screen-orientation

当进入横向模式时,操作栏导航选项卡在操作栏中合并,因此我定义了一个values-land文件夹,其中包含colors.xml文件,其中我为合并设置了适当的背景颜色和文本颜色标签。长话短说:

这些是纵向模式的正确颜色

portrait ok

当我将屏幕旋转到横向模式时会发生这种情况

landscape wrong

当我从横向模式开始启动应用程序,然后更改为肖像时,这就是我得到的:

活动以正确的景观颜色开始,我在values-land/colors.xml中定义

landscape ok

这些是将屏幕旋转到纵向模式时发生的情况

portrait wrong

只有标签的文字颜色会根据我的说明发生变化。 该活动有launchMode="singleTask"(我的情况是强制性的),但即使launchMode="standard",问题仍然存在。我开始认为这是一个API错误......是否有任何解决方法,例如强制重新绘制操作栏的方法?

编辑:我的<activity>代码:

<activity
        android:name="com.rocca.controlloSpese.MainActivity"
        android:label="@string/app_name"
        android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

2 个答案:

答案 0 :(得分:1)

您似乎已经设置了Android清单,以便在轮换期间不会破坏活动。除非您有强有力的理由这样做,否则您应该在旋转时销毁并重新创建活动。

答案 1 :(得分:0)

经过深入研究和一些尝试后,我发现它是什么。当切换到横向模式时,系统会查找“-land”限定符并相应地更新视图,就像所有人都知道的那样。因此,它会更新我的选项卡的文本颜色,因为它找到了一个values-land/目录,其中有一个具有特定颜色的colors.xml文件。 标签的背景由drawables定义,我将它们放在drawable目录中,因为它们对于横向和纵向都是相同的形状,只有颜色会改变。所以没有drawable-land目录,但这意味着系统不会重绘背景并将回收它们,遗漏了这些可绘制内部存在必须更改的值的引用这一事实。解决方案是添加一个drawable-land目录,其中包含背景drawable的副本,以便系统知道它必须重绘视图。它会重绘相同的视图,但至少会使用不同的颜色。