Overdraw и Romain Guy в блоге - программирование

Overdraw и Romain Guy в блоге

Основываясь на сообщении блога Романа Гая Пример использования Android-производительности, когда он говорит о Overdraw, он говорит следующее:

Удаление фона окна: фон, определенный в вашей теме, используется системой для создания окон предварительного просмотра при запуске приложения. Никогда не устанавливайте его равным null, если ваше приложение не прозрачно. Вместо этого установите его цвет/изображение, которое вы хотите или избавитесь от onCreate(), вызвав getWindow(). SetBackgroundDrawable (null). ***

Однако getWindow(). setBackgroundDrawable (null), кажется, не имеет никакого эффекта. Здесь образец с кодом:

//MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
    getWindow().setBackgroundDrawable(null);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

// main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="40dp"
android:layout_marginRight="40dp"
android:background="#FFE0FFE0"
tools:context=".MainActivity" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="40dp"
    android:layout_marginRight="40dp"
    android:background="#FFFFFFE0" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        android:text="@string/hello_world" />
</LinearLayout>

// styles.xml
<style name="AppTheme" parent="AppBaseTheme">
   <item name="android:windowBackground">@color/yellow</item>
</style>

Этот образец дает результаты на изображении. Вы можете видеть, что внешний слой имеет переиздание, а цвет фона окна все еще отображается. Я ожидал, что оконный фон исчезнет, ​​и только lineralayout, чтобы передернуть.

enter image description here

4b9b3361

Ответ 1

Просто переместите getWindow().setBackgroundDrawable(null) вниз, где-нибудь после setContentView(R.layout.main); например:.

@Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    getWindow().setBackgroundDrawable(null);
}

Вызов setContentView(...) распространяет настройку содержимого в окне, к которому привязана активность, и, возможно, переопределяет изменение, которое вы хотели сделать с помощью setBackgroundDrawable(null).

Результат:

enter image description here