2014-02-27 126 views
3

我想讓視圖的寬度基於屏幕的寬度。取決於從0到100的值,寬度將是屏幕寬度的百分比。這裏是我如何獲得在DP的屏幕寬度:根據屏幕寬度製作視圖的寬度

Display display = ((Activity)context).getWindowManager().getDefaultDisplay(); 
DisplayMetrics outMetrics = new DisplayMetrics(); 
display.getMetrics(outMetrics); 
float density = context.getResources().getDisplayMetrics().density; 
float screenWidthDP = outMetrics.widthPixels/density; 

這將返回360dp爲我的設備,這是正確的。然後我使用它來設置我視圖,其中timeCountNewRange()返回一個從0值的寬度 - 100:

int timeCountNewRange = getNewRangeTimeCount(timeCount, min, max); 
int widthDP = (int) (((double)timeCountNewRange/100.0) * screenWidthDP); 

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(widthDP, 15); 
params.setMargins(5, 0, 0, 0); 
appHolder.timeBar.setLayoutParams(params); 

出於某種原因,當「timeCountNewRange」值是100它是隻有60%左右屏幕寬度和其他一切都縮短了。如果與

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(360, 15); 

取代

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(widthDP, 15); 

視圖仍然只有60%左右的屏幕寬度。根據屏幕大小,此錯誤因設備而異。如何正確設置寬度以基於屏幕寬度?

回答

1

如果以編程方式設置,佈局參數將以像素爲單位進行設置。您將不得不再次將dp轉換爲像素,並將寬度設置爲