这是我的代码:
public class MainMenuActivity extends Activity implements OnClickListener {
public int width;
public int height;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.mainmenu);
Button play = (Button) findViewById(R.id.playbut);
Button credits = (Button) findViewById(R.id.creditsbut);
Button help = (Button) findViewById(R.id.helpbut);
play.setOnClickListener(this);
credits.setOnClickListener(this);
help.setOnClickListener(this);
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
width = dm.widthPixels;
height = dm.heightPixels;
}
问题是,public int width没有被设置为dm.widthPixels,同样也被设置为height。有什么提示吗?
答案 0 :(得分:3)
给定的代码应该导致设置属性。如果没有发生,那么必然会有其他事情发生:
dm
像素属性的值不是您期望的值。width
和height
值。如果您感到困惑,请尝试使用调试器运行,并在方法中设置断点。单步执行该方法,并检查所设置的实际值。
答案 1 :(得分:1)
这类问题是为什么公共实例变量通常被认为是不好的做法。你最好将实例变量设为私有,如果需要,可以使用公共getter。这意味着您可以保证在您不知情的情况下没有人更改价值:
public class MainMenuActivity ... {
private int width;
private int height;
public int getWidth() {
return width;
}
// etc
}
如果您进行此更改,那么您可能会立即发现谁正在更改您下面的值 - 无论设置width
和height
的值,现在都无法编译。
答案 2 :(得分:0)
this.width = dm.widthPixels; this.height = dm.heightPixels;
是的,你可以尝试这个,如果它还没有工作,那么你可以尝试通过更改 数据类型的宽度和高度int为double。可能是极限问题。 如果有效,请告诉我。