2012-07-18 162 views
0

我一直在研究一个需要查找不同设备的高度和宽度的应用程序。如果我删除了高度和宽度的代码,则应用程序会运行,如果我包含应用程序崩溃的代码。查找不同设备的高度和宽度

您能否提出建议代码有什么问题。

下面的代码:

public class Newone extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_newone); 
    } 

    final Context context = this; 
    public String cntry = ""; 
    int w= getWindowManager().getDefaultDisplay().getWidth(); 
    int h = getWindowManager().getDefaultDisplay().getHeight(); 

    DisplayMetrics metrics = context.getResources().getDisplayMetrics(); 
    int w = metrics.widthPixels; 
    int h = metrics.heightPixels; 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     MotionEvent object holds X-Y values 
     if(event.getAction() == MotionEvent.ACTION_DOWN) {    
      String text = "You click at x = " + event.getX() + " and y = " + event.getY(); 
      //Toast.makeText(this, text, Toast.LENGTH_LONG).show(); 

      if((event.getX()>((w/1280)*850)) && (event.getX()<((h/752)*900)) && (event.getY()>((w/1280)*380)) && (event.getY()<((h/752)*450))) 
       if((event.getX()>850) && (event.getX()<900) && (event.getY()>380) && (event.getY()<450)) { 
        Toast.makeText(this, text, Toast.LENGTH_LONG).show(); 
        display(cntry); 
       } 

       if((event.getX()>280) && (event.getX()<400) && (event.getY()>200) && (event.getY()<300)) { 
        //Toast.makeText(this, text, Toast.LENGTH_LONG).show(); 
        cntry = "US"; 
        display(cntry); 
       } 

       if((event.getX()>900) && (event.getX()<1200) && (event.getY()>500) && (event.getY()<650)) 
     } 
     return super.onTouchEvent(event); 
    } 

    private void display(final String cntry) { 
     final Dialog dialog = new Dialog(context); 
     dialog.show(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_newone, menu); 
     return true; 
    } 

} 
+1

发布您的logcat plz。 – user1417127 2012-07-18 07:32:28

+0

使用onCreate方法内部计算宽度和高度的代码; – Kamal 2012-07-18 07:50:20

回答

0

如果你移动getWindowManager().getDefaultDisplay().getWidth();和getHeight()metrics = context.getResources().getDisplayMetrics();里面你onCreate?我不知道context和其他可在Activity的建设时间。

1

你必须在onCreate里面移动下面的东西。

final Context context = this; 
public String cntry = ""; 


DisplayMetrics metrics = context.getResources().getDisplayMetrics(); 
int w = metrics.widthPixels; 
int h = metrics.heightPixels; 

而且getWindowManager().getDefaultDisplay().getWidth();getHeight现在deprecated..So避免使用它们。

这里是更正后的片段。

public class Newone extends Activity { 
    final Context context; 
    public String cntry = ""; 
    int w, h; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_newone); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     context = this; 

     DisplayMetrics metrics = context.getResources().getDisplayMetrics(); 
     w = metrics.widthPixels; 
     h = metrics.heightPixels; 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 

     if (event.getAction() == MotionEvent.ACTION_DOWN) { 

      String text = "You click at x = " + event.getX() + " and y = " 
        + event.getY(); 
      // Toast.makeText(this, text, Toast.LENGTH_LONG).show(); 

      if ((event.getX() > ((w/1280) * 850)) 
        && (event.getX() < ((h/752) * 900)) 
        && (event.getY() > ((w/1280) * 380)) 
        && (event.getY() < ((h/752) * 450))) 
       if ((event.getX() > 850) && (event.getX() < 900) 
         && (event.getY() > 380) && (event.getY() < 450)) 

       { 
        Toast.makeText(this, text, Toast.LENGTH_LONG).show(); 

        display(cntry); 
       } 

      if ((event.getX() > 280) && (event.getX() < 400) 
        && (event.getY() > 200) && (event.getY() < 300)) 

      { // Toast.makeText(this, text, Toast.LENGTH_LONG).show(); 
       cntry = "US"; 
       display(cntry); 
      } 

      if ((event.getX() > 900) && (event.getX() < 1200) 
        && (event.getY() > 500) && (event.getY() < 650)) { 

      } 

     } 

     return super.onTouchEvent(event); 
    } 

    private void display(final String cntry) { 

     final Dialog dialog = new Dialog(context); 
     dialog.show(); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_newone, menu); 
     return true; 
    } 

} 
+0

+1除了......为什么要使用'final Context context'和'context.getResources()。getDisplayMetrics();'? “活动”是一个“上下文”。没有必要为将引用自己的东西保存一个'final Context'。一个'Activity'可以随时调用'getResources()',而不需要'context'或'this'前缀。以上代码的 – Squonk 2012-07-18 08:01:04

+0

适用于单个Android设备,但在尝试为手机和平板电脑制作应用程序时,代码崩溃。 – 2012-07-18 08:48:39

+0

@Squonk我声明了上下文,希望OP可能需要将它作为将来的参数传递给其他类。对于此代码,当然不需要创建上下文变量。 – 2012-07-18 08:55:18