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

+0

onCreate 메서드 내에서 너비와 높이를 계산하는 코드를 사용합니다. – Kamal

답변

0

당신이 getWindowManager().getDefaultDisplay().getWidth()를 이동하는 경우; 그리고 getHeight()metrics = context.getResources().getDisplayMetrics(); 내면 onCreate? 나는 Activity의 공사 시간에 context과 others을 (를) 사용할 수있는 것으로 확신하지 않습니다.

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 제외 ... 왜 최종 컨텍스트 컨텍스트; 및'context.getResources(). getDisplayMetrics(); '를 사용 하시겠습니까? 'Activity'는'Context'입니다. 자체를 참조 할 무언가를 위해 '최종 컨텍스트'를 유지할 필요가 없습니다. 'Activity'는'context' 나'this' 접두사없이 언제든지'getResources()'를 호출 할 수 있습니다. – Squonk

+0

위의 코드는 단일 Android 기기를 타겟팅 할 때 작동하지만 모바일 및 태블릿 용 앱을 제작할 때 코드가 충돌합니다. –

+0

@Squonk 나는 OP가 미래에 다른 클래스의 인수로 그것을 전달해야 할 수도 있음을 알리기 위해 문맥을 선언했다.이 코드에서는 확실히 컨텍스트 변수를 만들 필요가 없다. –