2014-09-12 25 views
0

目前,我正在尋求解決簡單情況的方法,該方法似乎很棘手。我需要android應用程序中的7個togglebuttons,這是一個簡單的黑色圓圈,但我需要它們在行中並水平填充父項(屏幕)。作爲一個資源,我使用了一個圓圈的大的.jpeg圖像。爲了讓他們填寫所有屏幕在同一個模式,我把它們放進LinearLayout中與在Android中可繪製的縮放比例以支持多個屏幕

@android:layout_width = "fill_parent"; 
@android:layout_height = "wrap_content"; 
@android:weight="70"; 

重量是70,所以每個按鍵10接收的問題是,源圖像太大,不幸導致.. 。本:

(因爲我沒有足夠的聲譽張貼圖片,這裏是鏈接 http://postimg.org/image/f8wvs5si1/

對不起,代碼量小這張圖片通過手機拍攝,我沒有對互聯網接入用eclipse和這個項目一段時間的計算機。我當然試圖改變layout_height在其他possiblelites,但它沒有奏效。我也可以在垂直位置放一個重量總和,但在不同的屏幕上它看起來不一樣。 我也試圖以編程方式更改高度onCreate方法,

buttonX.setHeight(buttonX.getWidth()); 

或做相同的佈局,但沒有任何幫助

也許這個問題是dumm,但我會很高興聽到一些想法。

回答

0

這是由於屏幕密度的變化。有幾件事情可以做,以解決這個問題:

  1. 使用不同的圖像,每個密度(但我假設你正在尋找其他解決方案)

  2. 使用DisplayMetrics獲得的實際寬度然後相應地設置寬度/高度。

  3. 此代碼:

    buttonX.setHeight(buttonX.getWidth());

可能不起作用,因爲您在繪製佈局之前調用它,因此寬度不是繪製寬度。你可以解決這個使用ViewTreeObserver喜歡這裏:

How can you tell when a layout has been drawn?

  • 使用XML屬性一樣scaleType="centerFit"就個人而言,我發現這些令人困惑,因爲scaleType屬性不會似乎總是表現的同樣的方式給我。您可能需要嘗試不同的方法,但有時如果您需要XML解決方案,它們會派上用場。
  • +0

    謝謝。我會嘗試3和4,主要是3) 它似乎也適用於類似的自定義對象 – 2014-09-12 23:32:25

    +0

    似乎沒有任何作品,但有可能我使用ViewTreeObserver不正確。首先,代碼行「this.layout.getViewTreeObserver()。removeGlobalOnLayoutListener(this);」返回給我的是佈局無法解析或不是字段(但它是layout.getViewTreeObserver()。etc)。其次,我發現只有在方法內部,高度和寬度的值不是空的。我試圖在我的Activity類中實現這個接口,但它是一樣的:一個變量在方法中不是0,而在其他地方不是。最後,我無法設置按鈕高度 – 2014-09-15 11:07:04

    +0

    最後!有效!謝謝,我不得不使用LayoutParams設置我的首選高度 – 2014-09-15 12:40:17