2012-02-26 99 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