2012-08-13 54 views
0

我在這裏查看了很多線程,試圖瞭解爲什麼會發生這種情況,但我無法用頭圍住它。通過線上比例調整GUI元素的尺寸

在我的RelativeLayout中,我有4個Horizo​​ntalScrollViews(HSV)位於菜單(這是alignedParentBottom)之上。

我想均勻地放置這個菜單上方的4個HSV。通過我的計算,我應該能夠拿到設備高度,減去菜單高度,然後除以4,得到一個單獨的HSV高度。

但是,當我設定每個單純皰疹病毒的高度時,它們比它們應該大。

(注:display.getHeight()返回正確的尺寸我是一個480x800的設備上,如果我打印deviceHeight返回800)。

這裏是我的代碼:

RelativeLayout menuLayout = (RelativeLayout)findViewById(R.id.menuLayout); 
    HorizontalScrollView row1 = (HorizontalScrollView)findViewById(R.id.row1); 
    HorizontalScrollView row2 = (HorizontalScrollView)findViewById(R.id.row2); 
    HorizontalScrollView row3 = (HorizontalScrollView)findViewById(R.id.row3); 
    HorizontalScrollView row4 = (HorizontalScrollView)findViewById(R.id.row4); 

    //get current device dimensions 
    Display display = getWindowManager().getDefaultDisplay(); 
    deviceWidth = display.getWidth(); //returns 480 
    deviceHeight = display.getHeight(); //returns 800 

    int menuHeight = deviceWidth/5; // 480/5 = 96 
    int remainingSpace = deviceHeight - menuHeight; // 800 - 96 = 704 
    int rowHeight = (int) (remainingSpace/4); // 704/4 = 176 

    menuLayout.getLayoutParams().height = menuHeight; 

    row1.getLayoutParams().height = rowHeight; 
    row2.getLayoutParams().height = rowHeight; 
    row3.getLayoutParams().height = rowHeight; 
    row4.getLayoutParams().height = rowHeight; 

當我運行這個代碼,每行都太大,並被推到底部的菜單下。如果我運行getHeight()。它表示它是正確的高度(176),但顯然不是(因爲4行太大而不適合菜單上方的空間)。

任何人都可以對此有所瞭解嗎?非常感謝!

回答

0

我沒有考慮在頂部有菜單欄,它佔據了設備屏幕的一部分。我的解決方案是使主佈局高度爲fill_parent,然後獲取主佈局的高度。我使用此值而不是display.getHeight()值。

0

ViewGroup.LayoutParams「常量字段值」爲嵌套子類的LayoutParams 公共靜態最終詮釋FILL_PARENT 恆值:-1(0xffffffff的)

它說的觀點應該是一樣大的父母減去填充,但是可以要求將另一個「父母」放入限定整個集合的父親中,以包含調整大小的單獨集合。

2

你應該真的在這裏使用LinearLayout。您可以使用android:layout_weight屬性來使用百分比。如果事情均勻,只需使用1,否則,可以設置android:weightSum="100",然後在權重中使用整數(作爲百分比)。

E.g. android:layout_weight="25"爲25%,當父母有android:weightSum="100"