SplashScreen с вектором растягивается на весь экран
Я сделал свой заставку с помощью этого урока, и он отлично работает. https://www.bignerdranch.com/blog/splash-screens-the-right-way/
В основном я создал splascreen через тему:
<style name="ThemeSplash" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/drawable_splashcreen</item>
</style>
Я хотел бы разместить векторное изображение внутри так:
(drawable_splashcreen)
<item android:drawable="@color/color_background_splash_screen" />
<item
android:drawable="@drawable/vector_najdiflet_logo"
/>
Изображение будет растянуто по всему экрану. В API 23 он работает так, как должен. Но на более старых устройствах он просто растягивается. Я попробовал ширину, высоту и даже испортил видовые экраны, но не успел. Любое исправление для этого?
Ответы
Ответ 1
В полноэкранном всплеске попробуйте использовать:
android:gravity="fill_horizontal|fill_vertical"
Если не разрешить, возможно, решение создает отдельные изображения для каждого размера разрешения.
Наиболее распространенные разрешения:
- Small = 240 x 320px (ldpi)
- Medium = 320 x 480px (mdpi)
- Large = 480 x 800px (hdpi)
- xLarge = 640 x 960px (xhdpi)
Портретный формат:
- ldpi = 240 x 360px (0,75 x mdpi)
- mdpi = 320 x 480 пикселей (базовая плотность)
- hdpi = 480 x 720px (1,5 x mdpi)
- xhdpi = 640 x 960px (2 x mdpi)
- xxhdpi = 960 x 1440px (3 x mdpi)
- xxxhdpi = 1080 x 1920px (4 x mdpi)
Ландшафтный формат (инвертированный портретный формат):
- ldpi = 360 x 240px (0,75 x mdpi)
- mdpi = 480 x 320 пикселей (базовая плотность)
- hdpi = 720 x 480px (1,5 x mdpi)
- xhdpi = 960 x 640px (2 x mdpi)
- xxhdpi = 1440 x 960px (3 x mdpi)
- xxxhdpi = 1920 x 1080px (4 x mdpi)
Подробнее о вас можно найти здесь:
Ответ 2
Я наткнулся на ту же проблему. К сожалению, кажется, что нет возможности заставить заставку работать только с вектором, который можно нарисовать для предварительного API 23.
Проблема в том, что вы не можете загрузить VectorDrawableCompat вне процесса, как в этом случае в ваших темах android: windowBackground. Таким образом, здесь, вероятно, происходит то, что в API 21 вектор преобразуется в PNG для совместимости. Таким образом, в <layered-list>
преобразованный PNG вставляется в <item>
, что заставляет растровое изображение растягиваться по всем краям, потому что в нем отсутствует элемент <bitmap>
.
Итак, мое решение заключается в следующем:
Создайте drawable_splashscreen.xml
внутри папки drawables-v23
которая выглядит следующим образом для векторного рисования
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<item android:drawable="?attr/colorPrimary"/>
<item android:drawable="@drawable/ic_splashscreen" android:gravity="center"/>
</layer-list>
Затем создайте еще один drawable_splashscreen.xml
но внутри обычной папки drawables
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<item android:drawable="?attr/colorPrimary"/>
<item>
<bitmap android:drawable="@drawable/ic_splashscreen" android:gravity="center"/>
</item>
</layer-list>
Обратите внимание на элемент <bitmap>
. Так что теперь, когда PNG используется на устройствах до API 23, он будет отображаться правильно и не будет растянут на весь фон. К сожалению, вы также должны предоставить заставку в формате PNG, чтобы это работало в старых API. Но для каждого устройства с API 23+ будет использоваться векторное изображение.
Надеюсь, что этот ответ может помочь тому, кто работает в той же проблеме!
Ответ 3
Используйте растровое изображение и определите свое изображение в src. Установите гравитацию в центр
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<item android:drawable="@color/color_background_splash_screen"/>
<item>
<bitmap
android:gravity="center"
android:src="@drawable/ic_logo_splash"/>
</item>
</layer-list>
![заставка]()
Ответ 4
Я не думаю, что это возможно сделать с векторами, для устройств < API 23, так как невозможно установить атрибуты android: height и android: width на drawable.
Чтобы реализовать мой заставку с центрированным значком, мне пришлось экспортировать вектор моего логотипа в .png для каждого размера экрана и вставлять растровое изображение в список слоев:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<item android:drawable="@drawable/splash_screen_background" />
<item
android:left="20dp"
android:right="20dp">
<bitmap
android:gravity="center"
android:scaleType="centerInside"
android:src="@drawable/logo_rasterised" />
</item>
</layer-list>
В идеале я не хотел бы иметь какие-либо растровые изображения вообще в своих ресурсах, но, по крайней мере, заставка - это единственное место, где мне пришлось использовать растровые изображения.
Ответ 5
Ссылаясь на ссылку, которую вы указали, вам не хватает коэффициента гравитации:
<bitmap
**android:gravity="center"**
android:src="@mipmap/ic_launcher"/>
Ответ 6
** Привет, вы можете попробовать этот код:
window.getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
Это все.
Ответ 7
Не помещайте свое изображение в окно: Background (style.xml),
вместо
добавить изображение в файл макета, например,
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/vector_najdiflet_logo"
android:scaleType="centerCrop"/>
попробуйте изменить,
android:scaleType="centerInside"
Ответ 8
Не помещайте свое изображение в окно: Фон, вместо этого добавьте в качестве андроида: src для изображения для макета SplashScreenActivity.