Полноэкранное фоновое изображение в упражнении


145

Я вижу много приложений, которые используют полноэкранное изображение в качестве фона. Это пример:

Полноэкранное фоновое изображение

Я хочу использовать это в проекте, лучший способ, который я нашел до сих пор, это использовать изображение с большим размером, поместить его в ImageViewи использовать android: adjustViewBounds="true"для настройки полей

Проблема в том, что если экран с очень высоким разрешением, изображение падает.

Другой вариант, о котором я подумал, - это использовать изображение в a FrameLayout, с match_parentin widthи в heightкачестве фона ... это растягивает изображение, но я думаю, что результат не очень хороший.

Как бы вы это сделали?


3
Не верьте, что это работает на фоне, но это должно работать на изображениях. android:scaleType="centerCrop"
EGHDK

Ответы:


223

Есть несколько способов сделать это.

Опция 1:

Создавайте разные идеальные изображения для разных точек на дюйм и помещайте их в соответствующую папку для рисования. Затем установите

android:background="@drawable/your_image"

Вариант 2:

Добавьте одно большое изображение. Используйте FrameLayout. Как первый ребенок добавить ImageView. Установите следующее в вашем ImageView.

android:src="@drawable/your_image"
android:scaleType = "centerCrop"

2
где вы храните 'your_image'?
Атхарва Джори

5
В Res-> Drawable папки. Их может быть несколько - каждый обозначает разное разрешение (например, низкое разрешение / высокое разрешение). Если у вас нет конкретных изображений для каждого разрешения, любой из них будет работать.
krodmannix

5
Ответ хороший. Но мне интересно, нашел ли кто-нибудь типичные размеры телефонов для каждой группы точек на дюйм, что было бы весьма полезно при подготовке изображений. Отредактировано: найдено - stackoverflow.com/questions/10574363/…
лиса

7
последний вариант ->
нехватка

1
Ошибка OOM здесь мы пришли ... если это большое изображение, которое вам нужно будет увеличивать или уменьшать в зависимости от размера экрана! в этом случае вам, скорее всего, потребуется загрузить растровое изображение с помощью асинхронной задачи.
Jonny2Plates

25

Другой вариант - добавить одно изображение (не обязательно большое) в drawables (назовем его backgroung.jpg), создать ivViewbackground ImageView в корне вашего xml без атрибута «src». Затем в методе onCreate соответствующего действия:

    /* create a full screen window */
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.your_activity);

    /* adapt the image to the size of the display */
    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    Bitmap bmp = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(
      getResources(),R.drawable.background),size.x,size.y,true);

    /* fill the background ImageView with the resized image */
    ImageView iv_background = (ImageView) findViewById(R.id.iv_background);
    iv_background.setImageBitmap(bmp);

Нет обрезки, нет много разных размеров изображений. Надеюсь, поможет!


3
Это полезное решение, но не забудьте выполнить растровую обработку вне основного потока: developer.android.com/training/displaying-bitmaps/…
Кайл Айви,

19

Вы должны поместить изображения различных размеров в следующую папку

для более подробной информации перейдите по этой ссылке

  • ldpi

  • MDPI

  • ИПЧР

  • xhdpi

  • xxhdpi

и использовать фон RelativeLayout или LinearLayout вместо использования ImageView в качестве следующего примера

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical"
 android:background="@drawable/your_image">

</RelativeLayout>

Я получаю сообщение об ошибкеUnexpected namespace prefix "xmlns" found for tag RelativeLayout
CodyBugstein

Это делает мой фрагмент таким медленным. Не могу понять, почему.
Сермилион,

используйте кеш или загрузите изображение с помощью Picasso ( square.github.io/picasso ). Надеемся, что это решит вашу проблему
Munish Kapoor

7

Что о

android:background="@drawable/your_image"

на основной макет вашей деятельности?

Таким образом, вы также можете иметь разные изображения для разных плотностей экрана, поместив их в соответствующие res/drawable-**dpiпапки.


7

Прошло много времени с тех пор, как это было опубликовано, но это помогло мне.

Вы можете использовать вложенные макеты. Начните с RelativeLayout и поместите в него свой ImageView.

Установите высоту и ширину в match_parent, чтобы заполнить экран.

Установите scaleType = "centreCrop", чтобы изображение умещалось на экране и не растягивалось.

Затем вы можете добавить другие макеты, как обычно, как LinearLayout ниже.

Вы можете использовать Android: альфа, чтобы установить прозрачность изображения.

<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">

  <ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="centerCrop"
    android:src="@drawable/image"
    android:alpha="0.6"/>

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

      <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello"/>

      <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="There"/>

   </LinearLayout>
</RelativeLayout>

7

Если вы хотите, чтобы ваше изображение показывало ЗА прозрачной панелью действий, добавьте следующее в определение стиля вашей темы:

<item name="android:windowActionBarOverlay">true</item>

Наслаждайтесь!


7

использовать это

android:background="@drawable/your_image"

в вашей деятельности самый первый линейный или относительный макет.


1

В соответствии с ответом NoToast, вам необходимо иметь несколько версий «your_image» в ваших res / drawable-ldpi, mdpi, hdpi, x-hdpi (для больших экранов xtra), удалить match_parent и сохранить android: AdjustViewBounds = " правда"


1

Добавьте android:background="@drawable/your_image"в ваш Относительный / Linearlayout Worked.


0

Если вы используете bg.png в качестве фонового изображения, просто:

<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:background="@drawable/bg"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_world"/>
</RelativeLayout>

-1

Работает. Вы должны попробовать это:

android:src="@drawable/img"

-1

three step for put background

1) Вы должны выбрать понравившуюся картинку. например: введите описание изображения здесь

2) Затем вы копируете эту картинку в рисование. предупреждение: вы должны выбрать типы, короткие для имени изображения.

введите описание изображения здесь

3) Вы идете на страницу xml и собираетесь написать:

android: background = "id picture", например, мой идентификатор изображения @ drawable / download.

введите описание изображения здесь

финиш.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.