ภาพพื้นหลังแบบเต็มหน้าจอในกิจกรรม


145

ฉันเห็นแอปพลิเคชั่นมากมายที่ใช้ภาพเต็มหน้าจอเป็นพื้นหลัง นี่คือตัวอย่าง:

ภาพพื้นหลังแบบเต็มหน้าจอ

ฉันต้องการใช้สิ่งนี้ในโครงการวิธีที่ดีที่สุดที่ฉันพบในการทำเช่นนี้คือการใช้รูปภาพที่มีขนาดใหญ่ใส่ไว้ในImageViewและใช้android: adjustViewBounds="true"เพื่อปรับระยะขอบ

ปัญหาคือถ้าหน้าจอที่มีความละเอียดสูงมากภาพจะสั้น

อีกทางเลือกหนึ่งที่ฉันคิดคือใช้ภาพใน a FrameLayoutโดยมีทั้งmatch_parentในwidthและheightเป็นพื้นหลัง ... สิ่งนี้ขยายภาพ แต่ฉันคิดว่าผลลัพธ์ไม่ดีมาก

คุณจะทำอย่างไร


3
อย่าเชื่อว่าใช้งานได้บนพื้นหลัง แต่ควรใช้กับภาพ android:scaleType="centerCrop"
EGHDK

คำตอบ:


223

มีหลายวิธีที่คุณสามารถทำได้

ตัวเลือกที่ 1:

สร้างภาพที่สมบูรณ์แบบที่แตกต่างกันสำหรับ dpi ที่แตกต่างกันและวางไว้ในโฟลเดอร์ drawable ที่เกี่ยวข้อง จากนั้นตั้งค่า

android:background="@drawable/your_image"

ตัวเลือก 2:

เพิ่มภาพขนาดใหญ่เดียว ใช้ FrameLayout ImageViewในฐานะที่เป็นส่วนเสริมลูกคนแรก ตั้งค่าต่อไปนี้ใน ImageView ของคุณ

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

2
คุณเก็บ 'your_image' ไว้ที่ไหน
Atharva Johri

5
ในโฟลเดอร์ res-> drawable อาจมีหลาย - แต่ละขาตั้งสำหรับความละเอียดที่แตกต่างกัน (เช่นความละเอียดต่ำ / ความละเอียดสูง) หากคุณไม่มีภาพที่เฉพาะเจาะจงสำหรับแต่ละความละเอียดภาพใดภาพหนึ่งจะใช้ได้
krodmannix

5
คำตอบนั้นดี แต่ฉันสงสัยว่ามีคนพบขนาดโทรศัพท์ทั่วไปสำหรับแต่ละกลุ่ม dpi ซึ่งจะมีประโยชน์มากเมื่อเตรียมภาพ แก้ไข: พบ - stackoverflow.com/questions/10574363/ …
fox

7
ตัวเลือกสุดท้าย -> หน่วยความจำไม่
เพียงพอ

1
ข้อผิดพลาดของ OOM ที่นี่เรามา ... หากเป็นภาพใหญ่คุณจะต้องขยายหรือลดขนาดขึ้นอยู่กับขนาดหน้าจอ! ในกรณีนี้คุณจะต้องโหลดบิตแมปผ่านงานอะซิงโครนัสมากที่สุด
Jonny2Plates

25

อีกทางเลือกหนึ่งคือการเพิ่มภาพเดียว (ไม่จำเป็นต้องมีขนาดใหญ่) ใน drawables (ลองตั้งชื่อมันว่า backgroung.jpg) สร้าง ImageView iv_background ที่รูทของ 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

  • hdpi

  • XHDPI

  • xxhdpi

และใช้พื้นหลัง RelativeLayout หรือ LinearLayout แทนการใช้ ImageView เป็นตัวอย่างการ follwoing

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

สิ่งนี้ทำให้ Fragment ของฉันช้ามาก ไม่สามารถหาสาเหตุได้
Sermilion

ใช้แคชหรือโหลดภาพด้วย 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: alpha เพื่อตั้งค่าความโปร่งใสของภาพ

<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 = " ความจริง"



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" ตัวอย่างเช่น id รูปภาพของฉันคือ @ drawable / ดาวน์โหลด

ป้อนคำอธิบายรูปภาพที่นี่

เสร็จสิ้น.


-2

วิธีที่ง่ายที่สุด:

ขั้นตอนที่ 1: เปิดไฟล์ AndroidManifest.xml

คุณสามารถดูไฟล์ได้ที่นี่!

ขั้นตอนที่ 2: ค้นหา android:theme="@style/AppTheme" >

ขั้นตอนที่ 3: เปลี่ยนเป็น android:theme="@style/Theme.AppCompat.NoActionBar" >

ขั้นตอนที่ 4: จากนั้นเพิ่ม ImageView และรูปภาพ

ขั้นตอนที่ 4: นั่นแหล่ะ!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.