2010-05-06 64 views
36

Tôi đang cố gắng đặt phần tử LinearLayout gốc (được đặt thành fill_parent trong cả hai thứ nguyên) để có hình nền luôn nằm ở góc dưới bên trái của màn hình bất kể hướng của thiết bị . Nó sẽ là tuyệt vời nếu có một số cách để thiết lập vị trí hình nền như bạn có thể làm với css bằng cách sử dụng "background-position: left bottom;" nhưng tôi không thấy cách nào để đạt được điều này trong Android. Có cách nào để làm việc này không?Vị trí ảnh nền

Cảm ơn sự giúp đỡ.

Trả lời

78

Bạn sẽ phải tạo một drawable bitmap tùy chỉnh với bitmap của bạn trong một tập tin XML (ví dụ: "res/drawables/my_drawable.xml"

<?xml version="1.0" encoding="utf-8"?> 
<bitmap 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/my_png_file" 
    android:gravity="bottom|left" /> 

Và sau đó thiết lập xml drawable này làm nền của cái nhìn của bạn ("@ drawables/my_drawable"). Định dạng XML có thể vẽ được rất kém được ghi lại trong trang web của Android, tuy nhiên, do đó, chắc chắn không phải là một vấn đề dễ dàng để tìm ra cách giải quyết theo cách của riêng bạn.

+0

Làm thế nào tôi có thể tham chiếu đến bitmap XML đó trong một XML khác? – mr5

+0

Giống như cách bạn muốn nói đến bất kỳ đối tượng nào khác - trong ví dụ của tôi, nếu bạn gọi nó là 'my_drawable.xml', nó được tham chiếu là' @ drawable/my_drawable' ở bất kỳ nơi nào bạn có thể tham chiếu bất kỳ loại nào khác có thể vẽ được (như 'android: background',' android: drawableLeft' trên chế độ xem văn bản, v.v.) –

+0

không có thư mục res/drawables. Nếu bạn muốn tạo ra lỗi thì sẽ xảy ra lỗi. Tôi tạo ra một thư mục xml và đặt nó ở đó và lỗi đã được cố định – user2070775

9

Nếu tìm được lợi thế điều này theo chương trình: hình ảnh phù hợp với bố cục thay vì lớn hơn sau đó nó. Không có lý do tại sao

Mã:

Bitmap bmp = BitmapFactory.decodeResource(getResources(), 
       R.drawable.image); 
BitmapDrawable bitmapDrawable = new BitmapDrawable(bmp); 
bitmapDrawable.setGravity(Gravity.BOTTOM|Gravity.RIGHT); 
LinearLayout layout = (LinearLayout) findViewById(R.id.background_root); 
layout.setBackgroundDrawable(bitmapDrawable); 
+0

Một lợi thế nữa là nó có thể được áp dụng cho nhiều khung nhìn chỉ thay đổi hình ảnh – Onimusha

0

Quấn LinearLayout của bạn thành một RelativeLayout và thêm một ImageView với nó. Sử dụng android: layout_alignParentBottom và android: layout_alignParentLeft bạn có thể đặt hình ảnh của mình ở phía dưới bên trái.

<RelativeLayout 
    android:id="@+id/relativeLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <ImageView 
     android:id="@+id/imageView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:src="@drawable/my_image" /> 

    <LinearLayout 
     android:id="@+id/linearLayout" 
     ... > 

Đảm bảo ImageView là phần tử đầu tiên của RelativeLayout vẽ hình nền.

0

câu trả lời của tôi chỉ là một bản cập nhật các câu trả lời trên Nếu bạn đang sử dụng XML cho nền, nó có thể xảy ra vấn đề trong tỉ lệ

nên sử dụng mã này

Bitmap bmp = BitmapFactory.decodeResource(getResources(), 
       R.drawable.image); 
BitmapDrawable bitmapDrawable = new BitmapDrawable(bmp); 
    bitmapDrawable.setGravity(Gravity.BOTTOM| Gravity.RIGHT| Gravity.FILL_HORIZONTAL); 
LinearLayout layout = (LinearLayout) findViewById(R.id.background_root); 
layout.setBackgroundDrawable(bitmapDrawable); 

Gravity.Fill_HORIZONTAL sẽ phù hợp với chiều rộng của bố trí mà bạn đang áp dụng nền, bạn cũng có thể đề cập đến điều này trong tệp XML nhưng như tôi đã nói nó sẽ xảy ra vấn đề của Tỷ lệ hình ảnh

Các vấn đề liên quan