2011-07-26 44 views
11

Ứng dụng android của tôi hiện có hai bố cục cho màn hình, hình dọc và ngang của màn hình. Cả hai sử dụng định dạng cùng rất đơn giản - một hình ảnh đó là kích thước tương tự như màn hình, được tổ chức trong một bố cục tuyến tính đơn giản:Bố cục Android và thay đổi kích thước hình ảnh tự động

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<ImageView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:scaleType="fitCenter" 
     android:src="@drawable/splash_p" 
     /> 
</LinearLayout> 

Hình ảnh sử dụng là 320W x 480h và Android sẽ tự động thay đổi kích thước nó để phù hợp với màn hình, không phân biệt kích thước màn hình của thiết bị. Rõ ràng, hình ảnh không sắc nét khi được định lại kích thước cho máy tính bảng chẳng hạn.

Tôi nên chỉ ra ở đây rằng mục tiêu của tôi là giảm kích thước đã cài đặt của ứng dụng cuối cùng càng nhiều càng tốt và tôi biết rằng tôi có thể bao gồm các bố cục và kích thước khác nhau của cùng một hình ảnh cho từng kích thước màn hình khác nhau.

Màn hình giật gân của tôi được tạo thành từ tên của ứng dụng ở phần trên cùng của màn hình và sau đó là hình ảnh ở hai phần ba dưới cùng của màn hình. Để tiết kiệm bộ nhớ, tôi muốn cắt tên ứng dụng và hình ảnh thành hai hình ảnh riêng biệt, sau đó hiển thị chúng trong bố cục dọc tuyến tính cho các thiết bị được giữ ở chế độ dọc. Sau đó, tôi sẽ sử dụng bố cục ngang hình ảnh tuyến tính và sau đó là tên ứng dụng cho chế độ ngang.

Đối với cách bố trí chân dung tôi đã nhận điều này:

 <?xml version="1.0" encoding="utf-8"?> 
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> 
     <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent"   android:layout_height="wrap_content" android:orientation="vertical"> 
     <View android:layout_height="45dp" android:layout_width="45dp" /> 
     <ImageView android:layout_height="fill_parent" 
     android:src="@drawable/splashtext" 
     android:scaleType="fitCenter" 
     android:layout_gravity="center" 
     android:layout_width="fill_parent"></ImageView> 

     <View 
     android:layout_height="35dp" 
     android:layout_width="35dp" />  

     <ImageView 
     android:scaleType="fitCenter" 
     android:src="@drawable/splashpic" 
     android:layout_height="fill_parent" android:scaleType="fitCenter" android:layout_width="fill_parent" android:layout_gravity="center"/> 
</LinearLayout> 
</LinearLayout> 

Khi tôi hiển thị ở trên trong nhật thực, có vẻ ok cho điện thoại thông minh, nhưng những hình ảnh không được nhân rộng khi được hiển thị trên một tấm bảng, mặc dù Tôi đang sử dụng đối số android: scaleType = "fitCenter". Tôi đã thử sử dụng dips thay vì fill_parent trong layouteview width_width và layout_height nhưng điều đó cũng không hoạt động.

Tôi đang làm gì sai? Có một cách khác để làm điều này?

Cảm ơn

Tôi đã chỉnh sửa câu hỏi để bao gồm XML được sửa đổi này dựa trên trợ giúp của @ KaHa6u bên dưới. Vì vậy, bây giờ tôi có:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 
    <LinearLayout android:id="@+id/linearLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 
<View 
     android:layout_height="15dp" 
     android:layout_width="15dp" 
/> 
<ImageView android:layout_height="wrap_content" 
     android:src="@drawable/splashtext" 
     android:adjustViewBounds="true" 
     android:scaleType="fitXY" 
     android:layout_gravity="center" 
     android:layout_width="wrap_content" 
     android:layout_weight="1"> 
     </ImageView> 


<View 
     android:layout_height="15dp" 
     android:layout_width="15dp" 
/> 
<ImageView 
     android:scaleType="fitXY" 
     android:src="@drawable/splashpic" 
     android:adjustViewBounds="false" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:layout_weight="4" 
     android:layout_gravity="center"/> 
</LinearLayout> 
</LinearLayout> 

Quy mô theo chiều dọc, nhưng không theo chiều ngang, vì vậy tôi kết thúc với hình ảnh mỏng cao khi kích thước màn hình tăng.

Trả lời

13

@basinbasin

Tôi vừa gặp phải một tình huống rất giống với trường hợp bạn đã giải thích. Tôi cần phải có một ImageView trên đầu trang của bố trí, mà đã được kéo dài CHỈ HORIZONTALLY và giữ lại chiều cao của nó khi điện thoại được vào hướng ngang. Tôi đã thành công với chỉ này:

<ImageView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:src="@drawable/main_header" 
    android:scaleType="fitXY" 
/> 

và, tất nhiên, với thuộc tính hoạt động của:

<activity android:configChanges="keyboardHidden|orientation"> 

Hope this helps. Cảm ơn bạn.

1

fitCenter scaleType duy trì tỷ lệ khung hình gốc. Bạn đã thử scaleType fitXY chưa? Matrix.ScaleToFit Documentation

+0

Cảm ơn vì điều này @ KaHa6uc.Tôi đã thay đổi nó thành fitXY và cũng đã sử dụng adjustViewBounds. Bây giờ màn hình sẽ mở rộng theo chiều dọc, nhưng không theo chiều ngang. Tôi đã chỉnh sửa câu hỏi của mình để bao gồm bố cục được sửa đổi. Còn ý tưởng nào nữa không? – basinbasin

0

Bạn đã thử "fill_parent" làm giá trị android: layout_height và android: layout_width cho ImageView bạn muốn kéo dài chưa? Tôi đoán rằng cài đặt "wrap_content" không cho phép hệ thống biết các giới hạn để thay đổi kích thước hình ảnh. Hãy thử điều đó và cho tôi biết kết quả.

+0

Cảm ơn một lần nữa @ KaHa6uc, sử dụng fill_parent là tốt hơn. Tôi cũng đã thử nghiệm với relativelayouts và sử dụng padding để tôi có thể phù hợp với hình ảnh văn bản ở trên cùng của màn hình phía trên pic. Thành thật mà nói, tôi đã từ bỏ bây giờ. Tôi không thể có được hình ảnh văn bản để hiển thị chính xác trên màn hình lớn hơn, và hey, nó chỉ là một màn hình giật gân. Tất cả đã tốn quá nhiều thời gian và công sức cho một cái gì đó mà hầu hết người dùng sẽ nhấp vào để loại bỏ. – basinbasin

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