Фоновое изображение активности Android - PullRequest
24 голосов
/ 19 января 2012

Как использовать фоновое изображение в теме / стиле Активности?

Если я сделаю это, используя цвет:

<style name="CustomTheme" parent="android:Theme.Light">
    <item name="android:windowBackground">@color/custom_theme_color</item>
</style>

Работает правильно, но если я заменил строку на:

<item name="android:windowBackground">@drawable/splash_image</item>

Изображение отображается правильно, но все содержимое разбито на крошечный блок в верхнем левом углу экрана Тень под строкой состояния также обрезается или портится.

Я использую Mono для Android, и изображение является действительным png из девяти патчей.

Ответы [ 5 ]

16 голосов
/ 19 января 2012

Я также не пользуюсь темами, поэтому в макете упражнения я бы добавил

android:background="@drawable/splash_image"
9 голосов
/ 19 января 2012

Я не использую темы или что-то еще, поэтому я не уверен, как это повлияет на это, но я установил свой фон следующим образом:

getWindow().setBackgroundDrawableResource(R.drawable.background_image);

inCreate

7 голосов
/ 16 октября 2015

Мое решение было изменить Android: WindowBackground на Android: фон.

<?xml version="1.0" encoding="UTF-8" ?>
<resources>
  <style name="Theme.Splash" parent="android:Theme">
    <item name="android:background">@drawable/splash</item>
    <item name="android:windowNoTitle">true</item>
  </style>
</resources>
5 голосов
/ 08 июля 2013

Мне нужно было заставочное изображение, которое выглядело как начальная активность моего приложения и сталкивалось с той же проблемой.Мне повезло с windowContentOverlay вместо windowBackground.Drawable появился под строкой состояния в том же положении, что и реальный макет.Он работал на Android 2.2, Android 3.0 и Android 4.1.

Это мой стиль:

<style name="SplashTheme" parent="android:style/Theme.Light">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowContentOverlay">@drawable/splash</item>    
</style>

Мой отрисовочный файл splash.xml имитирует заголовок моего пользовательского интерфейса, используя layer-list:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!--- Background; tile is broken on Android 2.2 so just have super wide background that will get clipped  -->
    <item>
        <bitmap android:gravity="top|left" android:src="@drawable/splash_background" />
    </item>

    <!--- Icon left justified -->
    <item>
        <bitmap android:gravity="top|left" android:src="@drawable/header_icon" />
    </item>

    <!--- Buttons/etc right justified  -->
    <item>
        <bitmap android:gravity="top|right" android:src="@drawable/splash_buttons"  />
    </item>
</layer-list>

Я считаю, что ActionBar также имеет несколько встроенных способов справиться с этим, если ваше приложение использует его.Образец MonoIO , похоже, имеет такой образ запуска.

1 голос
/ 02 апреля 2019

Вы можете использовать android:gravity="fill" вместо android:gravity="center",

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:opacity="translucent">

    <item>
        <bitmap
            android:gravity="fill"
            android:src="@drawable/splash_screen" />
    </item>
</layer-list>

Примечание: Это будет зависеть от вашей формы и размера заставки.В моем случае с использованием android:gravity="fill" мой всплеск выглядит идеально.Вы можете использовать различные атрибуты гравитации в зависимости от типа вашего заставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...