在片段布局中过度绘制问题,同时存在背景颜色和主题

时间:2018-02-11 16:27:15

标签: android layout fragment gpu-overdraw

您好,我是使用AS进行Android编程的新手。这应该是一个常见/容易的问题,但到目前为止我还没有找到解决方案。

我正在left_为平板电脑创建right_fragmentsactivity_main.xml标签,其中我希望在right_fragment中设置背景色(暂时设置为#ffffff并保持left_fragment为默认值)。然后Android Lint警告我Overdraw: Painting regions more than once上有right_fragment

我尝试创建一个新主题:

<style name="NoBgTheme" parent="android:Theme.Material.Light.DarkActionBar">
    <item name="android:windowBackground">@null</item>
</style>

并将android:theme="@style/NoBgTheme"添加到right_fragment.xml,但它无效。

Screenshot of this app w/ Debug GPU Overdraw enabled.

如果我在android:theme=中将"@style/AppTheme""@style/NoBgTheme"更改为AndroidManifest.xml,那就可以了,但所有其他布局都失去了背景。

知道如何修复此OVERDRAW吗? Thx提前。

activity_main.xml中:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:baselineAligned="false"
    android:orientation="horizontal">

    <fragment
        android:id="@+id/left_fragment"
        android:name="jerryc05.fragmenttest.LeftFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1" />

    <fragment
        android:id="@+id/right_fragment"
        android:name="jerryc05.fragmenttest.RightFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1" />

</LinearLayout>

left_fragment.xml 非常简单,我们可以忽略它。

right_fragment.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:theme="@style/NoBgTheme"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#ffffff">

    <TextView
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="This is right fragment"
        android:textSize="20sp"
        tools:ignore="HardcodedText" />

</LinearLayout>

AndroidManifest.xml 保持不变。

MainActivity.java 保持不变。

2 个答案:

答案 0 :(得分:0)

会发生一点透支。如果要在左侧片段和右侧片段显示上修复透支,则需要将nobgtheme设置为主要活动。如果仅在平板电脑布局期间发生这种情况,您可以检查这是否是正在使用的平板电脑布局,并使用此处描述的方法在运行时设置无背景主题:How to change current Theme at runtime in Android

答案 1 :(得分:0)

好吧,我有另一种解决方案。

我在android:theme="@style/NoBgTheme"之后<activity android:name=".MainActivity"之后添加了>

然后我分别手动将android:background="#f0f0f0"android:background="#ffffff"指定为left_right_fragment.xml

效果很好!!!

但Android Lint警告仍然存在......(这是一个错误还是我的错?)