2012-02-26 97 views
1

是的,我知道這個問題已被問過幾十次之前。但是,在實施多個解決方案時,我的應用程序部隊將關閉。我試圖做一個按鈕點擊:確定Android屏幕大小並相應地設置視圖的大小

//Determine Screen Size and Create Layout Param 
    android.view.Display display = ((android.view.WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    int BtnWth = display.getWidth()/4; 
    int BtnHgt = display.getHeight()/4; 
    RelativeLayout.LayoutParams BtnDim = new RelativeLayout.LayoutParams(BtnWth, BtnHgt); 

    // Declare MPC pads 
    Button pad1 = (Button) findViewById(R.id.pad1); 

public void onClick(){ 

    // Set width and height of each pad 
    pad1.setLayoutParams(BtnDim); 
} 

而且還使用onDraw()方法。兩者都在真正的Android 3.1設備上關閉。

+0

這不是從你的代碼清晰,但似乎你正在初始化你的值超出函數的範圍。這可能發生在服務沒有準備好的地方,或者很可能是佈局沒有加載的地方,這可能會返回空值(例如pad1)。這種行爲會觸發部隊關閉。 你嘗試從方法加載你的值(onCreate,可能)?此外,您可以嘗試捕獲代碼,並在跟蹤通道上輸出異常詳細信息,以便您更好地瞭解可能導致FC的原因。 – XMoby 2012-02-26 20:11:05

+0

是的,我嘗試了onCreate(),我聽說可能會導致值尚未加載,所以然後我試圖在onDraw(),它也強制關閉。我會嘗試投擲並捕捉異常。 – Cameron 2012-02-26 20:17:03

+0

好吧,我從來沒有在Android中引發異常。我將如何去顯示結果? – Cameron 2012-02-26 20:22:12

回答

4

試試這個代碼,而不是讓像素的屏幕寬度和高度:

DisplayMetrics dm = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(dm); 
int screenWidth = dm.widthPixels; 
int screenHeight = dm.heightPixels; 

確保您添加到您的進口:

import android.util.DisplayMetrics; 
+0

那還是會產生一股力量。 – Cameron 2012-02-26 20:14:51

+0

我的猜測是,你正在得到一個與代碼本身不同的理由。調查與adb接近的力量。它會打印出錯誤的堆棧軌跡,以及爲什麼在代碼中包含行號。有關如何使用adb的信息,請參閱http://developer.android.com/guide/developing/tools/adb.html。您需要使用以下命令查看logcat:adb -s logcat -v time – ravishi 2012-02-26 20:31:29

+0

這是我XML文件中的印刷錯誤,我忽略了layout_width中的「d」。感謝adb技巧,這將在未來證明有用。謝謝你的幫助。 – Cameron 2012-02-27 01:28:57