2011-09-09 36 views
11

Tôi đang cố gắng tạo một Hộp thoại tùy chỉnh và đặt nội dung của nó ở giữa, nhưng nó luôn luôn kết thúc bằng căn trái. Dưới đây là aboutdialog.xml:Làm thế nào để bố trí trung tâm bên trong của Android Dialog?

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:a="http://schemas.android.com/apk/res/android" 
    a:orientation="vertical" 
    a:id="@+id/AboutDialogLayout" 
    a:layout_width="fill_parent" 
    a:layout_height="fill_parent" 
    a:layout_gravity="center_horizontal" 
    a:gravity="center_horizontal"> 

    <ImageView a:id="@+id/imageView1" 
       a:src="@drawable/pricebook" 
       a:layout_height="wrap_content" 
       a:layout_width="wrap_content"/> 
    <TextView a:layout_height="wrap_content"   
       a:textAppearance="?android:attr/textAppearanceLarge" 
       a:id="@+id/textView1" 
       a:text="Price Book" 
       a:layout_width="wrap_content"/> 
    <TextView a:layout_height="wrap_content" 
       a:id="@+id/textView2" 
       a:layout_width="wrap_content" 
       a:text="foo"/> 
</LinearLayout> 

Và tôi (có liên quan) Mã:

Dialog d = new Dialog(this); 
d.setContentView(R.layout.aboutdialog); 
d.setTitle(R.string.app_name); 

tôi thiếu gì ở đây? Cảm ơn sự hỗ trợ.

Ảnh: Screen shot of Dialog problem

+0

Thật kỳ lạ. Việc này ổn với tôi. Bạn có thể gửi ảnh chụp màn hình? – inazaruk

+3

+1 để sử dụng: thay vì android: ở khắp mọi nơi, bạn đã làm như thế nào? –

+0

Có, tôi cũng kiểm tra xem nó hoạt động tốt. –

Trả lời

9

cố gắng để chỉnh sửa như sau: a:layout_gravity="center_horizontal|center_vertical"
HOẶC
sử dụng Relative_Layout và sắp xếp bố trí tuyến tính đến trung tâm của cha mẹ với fill_parent cho tương wrap_content cho Tuyến tính.

mặc dù nó được làm việc với tôi về trung tâm

+3

Bao bọc toàn bộ XML trong RelativeLayout đã làm điều đó. 'Layout_width' cho cả hai * Layouts cần phải là 'fill_parent' và cả' layout_height' cần phải được đặt thành 'wrap_content' (ít nhất đó là cách tôi muốn nó). – Conrad

+0

Bố cục tương đối đã thực hiện mẹo, cảm ơn. –

+0

Nhưng vấn đề là ViewGroup trẻ em trong RelativeLayout phải có layout_width = fill_parent để làm cho nó hoạt động và đôi khi bạn không muốn hành vi đó cho nội dung của bạn. Xem giải pháp của tôi dưới đây;) –

0

Bạn đang làm layout_gravity đó là tốt, nhưng kể từ khi bạn làm điều đó để bố trí ngoài cùng, nó không thể xác định vị trí riêng của mình so với những gì xung quanh nó.

Tôi nghĩ rằng gói bố trí ở trên bên trong bố trí khác sẽ làm điều đó

+0

Việc gói XML ở trên vào một LinearLayout khác không tạo ra sự khác biệt. – Conrad

0

Bạn có thể thử thay đổi layout_gravity LinearLayout của bạn để chỉ lực hấp dẫn? Xem sự khác biệt được giải thích tại đây: Gravity and layout_gravity on Android

+0

Không tạo sự khác biệt. – Conrad

+0

Cách thiết lập: layout_gravity = "center" trên mỗi chế độ xem bên trong LinearLayout của bạn? –

+0

đã cố gắng mà - vẫn không có súc sắc. – Conrad

2

Sửa đổi ViewGroup của Dialog (FrameLayout) giữ bố cục nội dung của bạn. Tôi sử dụng phương pháp tĩnh và gọi nó bên trong onActivityCreated() trong DialogFragments:

/** 
* Center dialog content inside available space 
* @param dialog 
*/ 
public static void centerDialogContent(Dialog dialog) { 
ViewGroup decorView = (ViewGroup) dialog.getWindow().getDecorView(); 
View content = decorView.getChildAt(0); 
FrameLayout.LayoutParams contentParams = (FrameLayout.LayoutParams)content.getLayoutParams(); 
contentParams.gravity = Gravity.CENTER; 
content.setLayoutParams(contentParams); 
} 
Các vấn đề liên quan