안드로이드 휴대폰 상에 실제 mm 계산하기(dpi를 mm으로 바꾸기)

 

블로그 초기에 안드로이드에서 쓰이는 길이 단위에 대해서 알아보았습니다.

안드로이드에서 쓰이는 길이 단위(dp,sp,pt,px,mm,in)

 

제가 길이 단위에 대해서 알아본 것은

결과적으로 휴대폰의 클릭하는 지점의 좌표를 mm로 알아내려고 한 것이었습니다.

 

방법은 간단합니다.

 

휴대폰에서는 모든 좌표를 px단위로 받습니다.

그리고 dpi=px/inch이므로,

mm=px*25.4/dpi로 변환이 가능합니다.

 

그러므로, 좌표를 px단위로 입력 받은 뒤에, mm로 변환하면 됩니다.

 

        DisplayMetrics outMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
        
        xdpi=outMetrics.xdpi;//x방향 dpi
        ydpi=outMetrics.ydpi;//y방향 dpi

 

로 각 방향의 dpi를 받은 뒤,

mm=px*25.4/dpi

식에 대입하여 전환하면 오케이!!

Posted by 90002

다이얼로그 새로 고침. 매번 같은 내용 나올 때

 

커스텀 다이얼로그를 사용하다보면,

안의 내용을 바꿔도 다이얼로그가 변하지 않는 경우가 있습니다.

방법은 간단합니다.

 

 @Override
   protected void onPrepareDialog(int id, Dialog dialog, Bundle args){
    super.onPrepareDialog(id, dialog,args);
     //다이얼로그 불릴때마다 초기화
    removeDialog(id);

  }

 

를 하면 됩니다. 여기서 id는 showDialog(id)에 넣었던 id를 넣으면 됩니다^^

Posted by 90002

커스텀 다이얼로그를 하면 버튼을 눌러도 닫기가 되지 않습니다.

이것을 해결하기 위한 방법으로는 세가지가 있습니다.

 

1. 커스텀 다이얼로그를 Class로 만들어서 사용하기

 

첫번째 방법으로는 커스텀 다이얼로그를 아예 따로 Class를 만들어서 사용하는 방법입니다.

 

//CustomizeDialog.java-텍스트뷰와 Close 버튼만 있습니다.

public class CustomizeDialog extends Dialog implements OnClickListener {
Button close;
TextView tv;
public CustomizeDialog(Context context,String Stringcontent) {
   
super(context);
    requestWindowFeature
(Window.FEATURE_NO_TITLE);     
    setContentView
(R.layout.custom_diolog_main);
    tv
=(TextView) findViewById(R.id.content);
    tv
.setText(Stringcontent);
    close
= (Button) findViewById(R.id.close);
    close
.setOnClickListener(this);
}

@Override
public void onClick(View v) {      
   
if (v == close)
        dismiss
();
}
}

 

부를 때는 다음과 같이 하면 됩니다.

CustomizeDialog customizeDialog = new CustomizeDialog(CustomDialog.this,"clickme");
customizeDialog.show();
출처 :http://stackoverflow.com/questions/8736508/android-close-custom-dialog-within-layout
2. Dialog 클래스를 선언해서 사용하기
개인적으로는 훨씬 쉬운 방법이라고 생각합니다!
AlertDialog.Builder CustomizeDialog = new AlertDialog.Builder(CompareSizeCore.this)
.setView(CustomizeView)
.create();
등과 같이 커스텀 다이얼로그를 선언(?), 변수화?음... 어쨋든 위와 같이 하고,
닫고 싶은 위치에서는
 CustomizeDialog.dismiss(); 
하면 닫을 수 있습니다!!
 
3. dissmissDialog(id) 사용하기
id에는 showDialog(id)에 적었던 id를 적으면 됩니다.
Posted by 90002

블로그 이미지
90002

공지사항

Yesterday1
Today3
Total125,057

최근에 달린 댓글

최근에 받은 트랙백

글 보관함