2012-07-18 43 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