2012-04-14 21 views
1

我想弄清楚爲多種屏幕尺寸/密度/等設計。我以爲「dp」是我的答案,但它不是我認爲的那樣。Android:設計擴大到寬度

這裏就是我想要做的事:

我對於保持靜態菜單項的頁眉和頁腳部分。然後我在2之間有一個ScrollView。在ScrollView中有幾個顯示各種信息的「塊」。我希望這些塊始終擴展到屏幕的整個寬度。我想要這些塊的高度進行簡單縮放以保持1:1 - > height:width的比例。我也希望TextViews/Images/Buttons/etc可以縮放並保持其在塊內的位置。如果Blocks高度對於屏幕來說太大,那就是ScrollView的來源。如果它們合適,那也沒問題。我主要想縮放到寬度,並讓用戶滾動,如果有必要。

目前,如果在屏幕變寬,塊變得很寬,但不縮放高度的匹配。

這裏是什麼我的XML佈局代碼看起來像一個基本的(簡化readabilities緣故)破敗。還要注意每個塊可能是不同的大小。我不是在尋找「佔用25%」的解決方案。這些區塊內部佈局相當複雜且完全不同。實現的

<LinearLayout> 
    <RelativeLayout>Header stuff</RelativeLayout> 

    <ScrollView> //height and width = match_parent width lower priority than header/footer 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="???" //Had been using a specified "dp" value but that didn't work like I thought. What goes here? 
     > 
       Block#1 with lots of TextViews, ImageViews and Buttons...etc 
     </RelativeLAyout> 

     <RelativeLayout> 
       Block#2 
     </RelativeLAyout> 

     <RelativeLayout> 
       Block#3... etc 
     </RelativeLAyout> 

    </ScrollView> 

    <RelativeLayout>Footer stuff</RelativeLayout> 

</LinearLayout> 

回答

0

單程「完美」的1:1成的視圖的比例(或其它預定義的比率)是創建它的自定義擴展並重寫onMeasure()方法。你的情況,你可能需要一個SquareRelativeLayoutonMeasure()方法看起來像這樣:

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    int width = MeasureSpec.getSize(widthMeasureSpec); 
    setMeasuredDimension(width, width); 
} 

編輯: 如果你想有一個自定義的比例,你可以什麼地方把它定義和衡量查看這樣的:

float ratio = 0.5f; 
@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    int width = MeasureSpec.getSize(widthMeasureSpec); 
    setMeasuredDimension(width, ratio*width); 
} 

如果您知道如何創建自己的xml屬性,您可以添加ratio屬性並從那裏獲取它,這意味着您不必爲每個不同的比率創建一個新的視圖。

+0

很酷。我必須進一步研究。儘管我不一定希望它是「正方形」。我可能在我的問題中解釋得很差。它可能有2:1的比例或3:2的比例。我只是想讓高度正確地展開以匹配它,所以塊佔據整個寬度並且高度適當地擴展。 – user1269977 2012-04-14 19:56:56

+0

@ user126977:您可以擴展此方法以創建可以爲其設置自定義比率屬性的視圖。我會更新我的答案 – Jave 2012-04-16 08:00:43