본문 바로가기

▶Programming/Android

extends AppCompatActivity 안에서 dialog 만들기, dialog 크기 변경


Example.zip

제목을 보면 대충 감이 오시리라 믿는다.


무슨말인고하니..


1
2
3
4
5
6
public class example extends AppCompatActivity {    
     @Override    protected void onCreate(Bundle savedInstanceState) {       
        super.onCreate(savedInstanceState);         
        setContentView(R.layout.activity_main);      
 
}
cs


위와같이 처음 안드로이드 스튜디오에서 액티비티를 만들면 위와같이 나온다.


즉 위의 코드가 거의 기본 모습인데...여기에 dialog를 만드려 한다.


보통 책에 보면 alert 다이얼그니 무슨 다이얼로그니 하면서 상당히 어렵게 표현해 두었다.


가장 빡치는건 LayoutInflater=(LayoutInflater)this.getSystemService(어쩌구 저쩌구..) 에서 this다.


사실 위에 보이는 검은색 표에 있는 부분에서 dialog를 만들면 this는 자연스럽게 해결되지만


만약에 따른 class로 dialog를 빼고싶다고 생각하거나 조금 다른 자신만의 dialog를 만든다고 하면


책에 있는 내용들이 상당히 발목을 잡는다.


그래서 여기서는 조금 쉽게 커스텀 다이얼로그를 만드는 법을 다루고자 한다. 내가 겪었던 각종 에러와 이상한 모양의 


다이얼로그 해결법까지 싹다 담을 예정이다. 코드를 그대로 복/붙 했는데도 안된다면 컴퓨터에 문제가 있는것이다.


코드는 정말 노멀하므로...그대로만 하면 다 되게 해놨다.



연습환경


안드로이드 스튜디오 버젼: 1.5.1 


안드로이드 스튜디오 Android SDK Tools: 24.4.1


사용 기기: 갤럭시S3 모델번호:SHV-E210S 안드로이드 버젼: 4.4.4



[프로젝트 생성시]


Minimum SDK AP 15: Android 4.0.3(IceCreamSandwich)


시작 Activity는 Blank Activity(만드는건 Blank Activity로 만들고 쓸데없는건 다 지웠다)


========================================================================



가장 먼저 해야하는 것은 dialog용 xml을 만드는 것이다. 

xml을 만들줄도 모른다면 그냥 기초가 나와있는 책을 먼저 독파하자.


아무튼 dialog용 xml을 만들었다고 치자. 그 이름은 activity_dialog다(내 안드로이드에선..)


그리고 위와같이 Main부분에 코드를 치자. 필요없는거 싹다 지우고 다이얼로그부분만 치자.


그리고 실행시켜보면 아무것도 안 나올 것이다. 메인부분만 나오고.. 왜냐하면


다이얼로그를 실행시켜주는 부분을 적지 않았기 때문이다. 


dialog.setContentView(R.layout.activity_dialog); 아래

dialog.show(); 를 입력하고 다시 실행시켜 보자. 다이얼로그가 보일 것이다.


만약에 다이얼로그 자체를 xml로 만들었기 때문에 이제 레이아웃에 여러분이 원하는 버튼, 이미지 등등


넣고 싶은대로 넣으면 된다. 제약따윈 없다.


만약, 왼쪽 아래와 같이 다이얼로그의 xml이 거의 전체 화면을 덮는 경우가 있다.

근데 내가 원하는건 오른쪽 아래와 같이 작은 사이즈의  다이얼로그 xml이다. 

이럴 때 사이즈 줄이는 방법을 알려주겠다.


                                            



        dialog.setContentView(R.layout.activity_dialog); <<이 코드 아래 아래 코드들을 추가한다.


      //  여기서 주의 할 것은 만약 dialog.setContentView(R.layout.activity_dialog); 가 아래 코드들 보다

//아래에 있다면, 결과화면에서 다이얼로그의 사이즈는 줄어들지 않느다. 반드시 아래 코드보다 위에 있어야 한다


        WindowManager.LayoutParams params = dialog.getWindow().getAttributes();

        //params으로 건드리는 width 와 height는 기기마다 상대적이다.

        params.width=550;//갤럭시s3에선 4cm 갤럭시노트에선 4.5cm

        params.height=450;//갤럭시s3에선 3cm 갤럭시노트에선 3.5

        dialog.getWindow().setAttributes(params);


만약 사이즈가 마음에 들지 않는다면 params.width,height의 값을 바꾸자.


주석으로도 달아놨지만 기기마다 width,height 값에 따라 다이얼로그의 크기가 상대적으로 바뀌므로

혹시 크기가 기기마다 똑같을까봐 걱정하지 않아도 된다.


혹시 몰라 소스코드도 함께 올린다. 참고하기 바란다. 그냥 압축 파일이므로 압축을 풀고 안드로이드 스튜디오에서 불러오기만 하면 된다. export같은걸로 안 만들었다.