2016-01-07 52 views
1

所以我創建了一個以編程方式更改佈局大小的類。該類是:Android - 使用一個類以編程方式根據屏幕大小改變佈局大小

public class ActivityResize extends Activity{ 

    DisplayMetrics displayMetrics = new DisplayMetrics(); 
    //private Point size = new Point(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
     Log.d("getMetrics", "Value : " + displayMetrics); 
    } 

    public int width(int sizeX) 
    { 
     int screenWidth = displayMetrics.widthPixels * (sizeX/100); 
     return screenWidth; 
    } 

    public int height(int sizeY) 
    { 
     int screenHeight = displayMetrics.heightPixels * (sizeY/100); 
     return screenHeight; 
    } 
} 

我在做DisplayMetrics錯了嗎?因爲每當我嘗試記錄screenWidthscreenHeight時,日誌都會返回0。

+0

它不依賴於此。但你沒有添加setContentView(佈局) –

+0

這是一個只用於計算的類,所以它不需要佈局.. –

回答

0

你計算使用displayMetrics.widthPixels * (sizeX/100);大小,請注意,如果你的SIZEX < 100,這將是0,那麼結果將是0,解決它,你可以在你的sizeX類型更改爲float或使用

displayMetrics.widthPixels * (sizeX/100.0f); 
+0

我結束了使用'int screenWidth = displayMetrics.widthPixels * sizeX/100;'to減少其他類的併發症大聲笑 –

+0

你的意思screenWidth通過調用'displayMetrics.widthPixels * sizeX/100;'是0?如果是這樣,請向我們展示sizeX值和'displayMetrics.widthPixels'值,我測試過我們可以從'displayMetrics'獲得正確的值。 – starkshang

+0

'sizeX'的值是80,'displayMetrics'中的所有內容都是0 ..當我從類本身調用它時,它顯示了通常的'DisplayMetrics {density = 3.0,width = 1080,height = 1920,scaledDensity = 3.0, xdpi = 403.0,ydpi = 403.0}'但是當我從另一個類調用它時,它全部更改爲0,這打敗了它可以從另一個類調用的類來調整內部佈局的目的。 –

0

所以我設法找到答案是隻用ActivityResize類(改名爲LayoutResize減少混淆)來計算。它有一個onCreate,如果我的記憶爲我服務,那麼它就會與intent合作。我改變了類此:

import android.app.Activity; 
import android.util.DisplayMetrics; 
import android.util.Log; 

public class LayoutResize extends Activity{ 

    public DisplayMetrics displayMetrics = new DisplayMetrics(); 

    public int width(int sizeX, DisplayMetrics displayMetrics) 
    { 
     int screenWidth = displayMetrics.widthPixels * sizeX/100; 
     return screenWidth; 
    } 

    public int height(int sizeY, DisplayMetrics displayMetrics) 
    { 
     int screenHeight = displayMetrics.heightPixels * sizeY/100; 
     return screenHeight; 
    } 
} 

所以我刪除其中有getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);onCreate和我使用這個類所有其他類增加了getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);。並且還在onCreate之外宣佈DisplayMetrics displayMetrics = new DisplayMetrics();

我叫任何其他班的班級使用layoutResize.height(100, displayMetrics);

相關問題