Hình nền toàn màn hình trong một hoạt động


145

Tôi thấy nhiều ứng dụng sử dụng hình ảnh toàn màn hình làm nền. Đây là một ví dụ:

Hình nền toàn màn hình

Tôi muốn sử dụng điều này trong một dự án, cách tốt nhất mà tôi đã tìm thấy từ trước đến nay là sử dụng một hình ảnh với kích thước lớn, đặt nó vào ImageViewvà sử dụng android: adjustViewBounds="true"để điều chỉnh lề

Vấn đề là nếu một màn hình có độ phân giải rất cao, hình ảnh sẽ bị thiếu.

Một tùy chọn khác tôi nghĩ là sử dụng hình ảnh trong một FrameLayout, với match_parentwidthheightlàm nền ... này trải dài hình ảnh, nhưng tôi nghĩ rằng kết quả không phải là rất tốt.

Bạn sẽ làm điều này như thế nào?


3
Đừng tin điều này hoạt động trên nền, nhưng nó sẽ hoạt động trên hình ảnh. android:scaleType="centerCrop"
EGHDK

Câu trả lời:


223

Có một số cách bạn có thể làm điều đó.

Lựa chọn 1:

Tạo các hình ảnh hoàn hảo khác nhau cho các dpi khác nhau và đặt chúng vào thư mục có thể vẽ có liên quan. Sau đó thiết lập

android:background="@drawable/your_image"

Lựa chọn 2:

Thêm một hình ảnh lớn duy nhất. Sử dụng FrameLayout. Là một đứa trẻ đầu tiên thêm một ImageView. Đặt các mục sau trong ImageView của bạn.

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

2
bạn lưu trữ 'your_image' ở đâu?
Atharva Johri

5
Trong các thư mục res-> drawable. Có thể có nhiều - mỗi giá trị cho một độ phân giải khác nhau (ví dụ: độ phân giải thấp / độ phân giải cao). Nếu bạn không có hình ảnh cụ thể cho từng độ phân giải, bất kỳ hình ảnh nào cũng sẽ hoạt động.
krodmannix

5
Câu trả lời là tốt. Nhưng tôi tự hỏi nếu ai đó tìm thấy kích thước điện thoại điển hình cho mỗi nhóm dpi, sẽ khá hữu ích khi chuẩn bị hình ảnh. Đã chỉnh sửa: đã tìm thấy - stackoverflow.com/questions/10574363/ Kẻ
cáo

7
tùy chọn cuối cùng -> hết bộ nhớ: D
ternes3

1
Lỗi OOM ở đây chúng tôi đến ... nếu đó là một hình ảnh lớn bạn sẽ cần phải tăng hoặc giảm tùy thuộc vào kích thước màn hình! trong trường hợp này, bạn rất có thể sẽ tải một bitmap thông qua tác vụ không đồng bộ.
Jonny2Plates

25

Một tùy chọn khác là thêm một hình ảnh duy nhất (không nhất thiết phải lớn) trong drawables (đặt tên là backgroung.jpg), tạo ImageView iv_background ở gốc xml của bạn mà không có thuộc tính "src". Sau đó, trong phương thức onCreate của hoạt động tương ứng:

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

Không cắt xén, không có nhiều hình ảnh kích thước khác nhau. Hy vọng nó giúp!


3
Đây là một giải pháp hữu ích, nhưng hãy nhớ xử lý bitmap khỏi luồng chính: developer.android.com/training/displaying-bitmaps/
Kẻ

19

Bạn nên đặt các hình ảnh kích thước khác nhau vào thư mục sau

để biết thêm chi tiết truy cập liên kết này

  • ldpi

  • mdpi

  • hdpi

  • xhdpi

  • xxhdpi

và sử dụng nền RelativeLayout hoặc linearLayout thay vì sử dụng ImageView làm ví dụ theo dõi

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

Tôi đang gặp một lỗi đóUnexpected namespace prefix "xmlns" found for tag RelativeLayout
CodyBugstein

Điều này làm cho mảnh vỡ của tôi rất lag. Không thể hiểu tại sao.
Bài giảng

sử dụng bộ nhớ cache hoặc tải hình ảnh với picasso ( vuông.github.io/ picasso ) hy vọng sẽ giải quyết vấn đề của bạn
Munish Kapoor

7

Thế còn

android:background="@drawable/your_image"

về bố cục chính của hoạt động của bạn?

Bằng cách này, bạn cũng có thể có các hình ảnh khác nhau cho các mật độ màn hình khác nhau bằng cách đặt chúng vào các res/drawable-**dpithư mục thích hợp .


7

Đã được một thời gian kể từ khi điều này được đăng, nhưng điều này đã giúp tôi.

Bạn có thể sử dụng bố trí lồng nhau. Bắt đầu với RelativeLayout và đặt ImageView của bạn vào đó.

Đặt chiều cao và chiều rộng thành match_parent để lấp đầy màn hình.

Đặt scaleType = "centreCrop" để hình ảnh vừa với màn hình và không bị giãn.

Sau đó, bạn có thể đặt bất kỳ bố cục nào khác như bình thường, như linearLayout bên dưới.

Bạn có thể sử dụng android: alpha để đặt độ trong suốt của hình ảnh.

<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

Nếu bạn muốn hình ảnh của mình hiển thị BEHIND một Thanh hành động trong suốt, hãy đặt phần sau vào định nghĩa kiểu của Chủ đề:

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

Thưởng thức!


7

dùng cái này

android:background="@drawable/your_image"

trong hoạt động của bạn đầu tiên bố trí tuyến tính hoặc tương đối.


1

Theo dòng với câu trả lời của NoToast, bạn sẽ cần có nhiều phiên bản "your_image" trong res / drawable-ldpi, mdpi, hdpi, x-hdpi (đối với màn hình lớn xtra ), xóa match_parent và giữ android: điều chỉnhViewBound = " thật"


1

Thêm vào android:background="@drawable/your_image"bên trong Relateelsayout / Linearlayout Worked của bạn.


0

Nếu bạn có bg.png làm hình nền thì chỉ cần:

<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

Đang làm việc. bạn nên thử điều này:

android:src="@drawable/img"

-1

three step for put background

1) bạn nên chọn hình ảnh của bạn. ví dụ: nhập mô tả hình ảnh ở đây

2) Sau đó, bạn sao chép hình ảnh này trong drawable. cảnh báo: bạn nên chọn loại viết tắt cho tên hình ảnh.

nhập mô tả hình ảnh ở đây

3) bạn vào trang xml Dự định và viết:

android: background = "id ảnh" ví dụ id ảnh của tôi là @ drawable / download.

nhập mô tả hình ảnh ở đây

hoàn thành.


-2

Cách dễ nhất:

Bước 1: Mở tệp AndroidManifest.xml

Bạn có thể xem các tập tin ở đây!

Bước 2: Xác định vị trí android:theme="@style/AppTheme" >

Bước 3: Thay đổi thành android:theme="@style/Theme.AppCompat.NoActionBar" >

Bước 4: Sau đó, thêm ImageView & Image

Bước 4: Thế đấy!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.