Gambar latar layar penuh dalam suatu aktivitas


145

Saya melihat banyak aplikasi yang menggunakan gambar layar penuh sebagai latar belakang. Ini adalah sebuah contoh:

Gambar latar layar penuh

Saya ingin menggunakan ini dalam proyek, cara terbaik yang saya temukan sejauh ini untuk melakukan ini adalah menggunakan gambar dengan ukuran besar, memasukkannya ke dalam ImageViewdan menggunakan android: adjustViewBounds="true"untuk mengatur margin

Masalahnya adalah bahwa jika layar dengan resolusi sangat tinggi, gambarnya akan jatuh pendek.

Pilihan lain yang saya pikirkan adalah menggunakan gambar dalam FrameLayout, dengan match_parentdi widthdan heightsebagai latar belakang ... ini membentang gambar, tapi saya pikir hasilnya tidak terlalu baik.

Bagaimana Anda melakukannya?


3
Jangan percaya ini bekerja pada latar belakang, tetapi seharusnya bekerja pada gambar. android:scaleType="centerCrop"
EGHDK

Jawaban:


223

Ada beberapa cara untuk melakukannya.

Pilihan 1:

Buat gambar sempurna yang berbeda untuk dpi berbeda dan letakkan di folder yang dapat digambar terkait. Kemudian atur

android:background="@drawable/your_image"

Pilihan 2:

Tambahkan satu gambar besar. Gunakan FrameLayout. Sebagai anak pertama tambahkan ImageView. Tetapkan berikut ini di ImageView Anda.

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

2
di mana Anda menyimpan 'your_image'?
Atharva Johri

5
Dalam folder res-> drawable. Mungkin ada banyak - masing-masing dudukan untuk resolusi yang berbeda (mis. Resolusi rendah / resolusi tinggi). Jika Anda tidak memiliki gambar spesifik untuk setiap resolusi, resolusi apa pun akan berfungsi.
krodmannix

5
Jawabannya bagus. Tapi saya bertanya-tanya apakah seseorang menemukan ukuran ponsel khas untuk setiap grup dpi, yang akan sangat berguna saat menyiapkan gambar. Diedit: ditemukan - stackoverflow.com/questions/10574363/…
fox

7
opsi terakhir -> kehabisan memori: D
ternes3

1
Kesalahan OOM di sini kita datang ... jika ini adalah gambar besar Anda akan perlu untuk menaikkan atau turun tergantung pada ukuran layar! dalam hal ini Anda harus memuat bitmap kemungkinan besar melalui tugas asinkron.
Jonny2Plates

25

Pilihan lain adalah menambahkan satu gambar (tidak harus besar) di drawable (beri nama backgroung.jpg), buat iv_background ImageView di root xml Anda tanpa atribut "src". Kemudian dalam metode onCreate dari aktivitas terkait:

    /* 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);

Tidak ada pemotongan, tidak banyak gambar dengan ukuran berbeda. Semoga ini bisa membantu!


3
Ini adalah solusi yang berguna, tetapi ingatlah untuk melakukan pemrosesan bitmap dari utas utama: developer.android.com/training/displaying-bitmaps/…
Kyle Ivey

19

Anda harus memasukkan berbagai ukuran gambar ke dalam folder berikut

untuk lebih detail kunjungi tautan ini

  • ldpi

  • mdpi

  • hdpi

  • xhdpi

  • xxhdpi

dan gunakan latar belakang RelativeLayout atau LinearLayout alih-alih menggunakan ImageView sebagai contoh berikut

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

Saya mendapatkan kesalahan ituUnexpected namespace prefix "xmlns" found for tag RelativeLayout
CodyBugstein

Ini membuat Fragmen saya sangat lamban. Tidak tahu mengapa.
Sermilion

gunakan cache atau muat gambar dengan picasso ( square.github.io/picasso ) berharap akan menyelesaikan masalah Anda
Munish Kapoor

7

Bagaimana dengan

android:background="@drawable/your_image"

pada tata letak utama aktivitas Anda?

Dengan cara ini Anda juga dapat memiliki gambar yang berbeda untuk kepadatan layar yang berbeda dengan menempatkannya di res/drawable-**dpifolder yang sesuai .


7

Sudah lama sejak ini diposting, tetapi ini membantu saya.

Anda dapat menggunakan tata letak bersarang. Mulai dengan RelativeLayout, dan letakkan ImageView Anda di situ.

Setel tinggi dan lebar untuk match_parent untuk mengisi layar.

Atur scaleType = "centreCrop" sehingga gambar sesuai dengan layar dan tidak meregang.

Kemudian Anda bisa meletakkan tata letak lain seperti biasa, seperti LinearLayout di bawah ini.

Anda dapat menggunakan android: alpha untuk mengatur transparansi gambar.

<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

Jika Anda ingin gambar Anda ditampilkan DI BALIK Bilah Tindakan transparan, masukkan yang berikut ini ke dalam definisi gaya Tema Anda:

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

Nikmati!


7

Gunakan ini

android:background="@drawable/your_image"

dalam aktivitas Anda, tata letak linear atau relatif pertama.


1

Sejalan dengan jawaban NoToast, Anda harus memiliki beberapa versi "your_image" di resolusi / drawable-ldpi, mdpi, hdpi, x-hdpi (untuk layar besar xtra), hapus match_parent dan simpan android: adjustViewBounds = " benar"


1

Tambahkan android:background="@drawable/your_image"di dalam Relativelayout / Linearlayout Anda.


0

Jika Anda memiliki bg.png sebagai gambar latar belakang Anda maka cukup:

<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

Kerja. Anda harus mencoba ini:

android:src="@drawable/img"


-2

Cara termudah:

Langkah 1: Buka file AndroidManifest.xml

Anda dapat melihat file di sini!

Langkah 2: Temukan android:theme="@style/AppTheme" >

Langkah 3: Ubah ke android:theme="@style/Theme.AppCompat.NoActionBar" >

Langkah 4: Kemudian Tambahkan ImageView & Gambar

Langkah 4: Itu dia!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.