2011-07-26 197 views
11

我的Android應用程序目前有兩個佈局,其初始屏幕,肖像和風景。都使用相同的簡單的格式 - 這是尺寸爲屏幕相同的圖像,在一個簡單的線性佈局保持:Android佈局和自動圖像調整

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

使用的圖像是320瓦特X 480H和Android自動調整以適合在屏幕上,而不管設備的屏幕大小。顯然,例如,在爲平板電腦調整尺寸時,圖像不夠銳利。

我在這裏應該指出,我的目標是儘可能減少最終應用程序的安裝大小,並且我知道我可以爲每個不同的屏幕大小包含不同的佈局和大小相同的圖像。

我的啓動畫面由屏幕頂部三分之一處的應用程序名稱組成,然後是屏幕底部三分之二處的圖像。爲了節省內存,我希望將應用程序名稱和圖像裁剪爲兩個獨立的圖像,然後以縱向模式以縱向佈局顯示這些圖像。然後,我將使用圖像的線性水平佈局,然後使用橫向模式的應用程序名稱。

對於縱向佈局我有這樣的:

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

當我顯示日食上面,它看起來不錯的智能手機,但在平板電腦上顯示的圖像時,不按比例,雖然我正在使用android:scaleType =「fitCenter」參數。我試過在圖像視圖layout_width和layout_height中使用傾斜而不是fill_parent,但是這也不起作用。

我在做什麼錯?有沒有另一種方法來做到這一點?

感謝

我編輯的問題,包括基於@ KaHa6u的幫助之下修訂後的XML。所以現在我有:

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

垂直地向上擴展,而不是水平,所以我結束了高高瘦瘦的圖像屏幕尺寸的增大時。

回答

13

@basinbasin

我剛剛遇到一種與您所解釋的情況非常相似的情況。我需要在佈局的頂部有一個ImageView,它只能在水平方向拉伸並在手機進入橫向時保持其高度。我成功只有這個:

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

,當然,隨着活動的屬性:

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

希望這有助於。謝謝。

1

fitCenter scaleType保持原始高寬比。您是否嘗試過fitXY scaleType? Matrix.ScaleToFit Documentation

+0

感謝@ KaHa6uc。我已經改變它適合XY,並使用adjustViewBounds也。現在屏幕可以垂直放大,但不是水平放大。我編輯了我的問題以包含修改後的佈局。 有沒有更多的想法任何人? – basinbasin

0

您是否嘗試過「fill_parent」作爲您要拉伸的ImageView的android:layout_height和android:layout_width值? 我想「wrap_content」設置不會讓系統知道調整圖像的邊界。請嘗試一下,讓我知道結果。

+0

再次感謝@ KaHa6uc,使用fill_parent更好。我還嘗試了使用相關佈局和使用填充以便我可以將文本圖像放在圖片上方屏幕的頂部。說實話,我已經放棄了。我無法讓文本圖像在大屏幕上正確呈現,嘿,它只是一個閃屏。這一切都花費了太多的時間和精力來解決大多數用戶會點擊的問題。 – basinbasin