마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

다이얼로그에 이미지를 띄우려면 어떻게 하죠 감이안잡히네요

0 추천
drawble에 이미지를 3장 넣어둔 상태고

AlterDialog.Builder. dlg = new AlterDialog.Builder(MainActivity.this);

해서 dlg를 이용해서 어떻게 다이얼로그에 이미지를 넣죠?? ㅠㅠㅠㅠ 도와주세요

 

또 추가로 xml파일에 이미지뷰로 각 사진별 아이디를 정해둔 상태입니다 !!
mkz69477 (160 포인트) 님이 2020년 11월 25일 질문

2개의 답변

+1 추천

 Dialog 와 관련해서 공식적인 권장사항은 라이프사이클에 좀 더 대응하기 쉽게 하시려면 DialogFragment를 사용하세요.

https://developer.android.com/reference/android/app/DialogFragment

하지만  Dialog도 여전히 사용할 수 있습니다.  그리고 님처럼 커스텀 레이아웃을 사용하고 싶다면 시스템에서 제공하는 레이아웃대신에 님이 지정한 레이아웃을 사용하시면 됩니다. 해당 메소드는

public void setContentView (int layoutResID)

dlg.setContentView(R.layout.my_dialog_layout)

layout 을 하나 만드신 다음에 builder에서 setContentView를 호출하세요. 이 경우에는 물론 버튼 클릭리스너 처리는 님이 직접해 주셔 합니다. Dialog에도 findViewById가 존재합니다.

public T findViewById (int id)

이미지를 다이얼로그에 동적으로 전달하고 싶다면,  Dialog를 상속하셔서 님이 정의하는 클래스를 만드신 다음 이미지를 지정하는 메소드를 하나 추가하시면 되겠죠. 아니면 

public void setContentView (View view)

이미지가 담긴 Layout을 inflate해 준 다음 이걸 setContentView에 설정해도 되겠네요. 이러면 AlertDialogBuilder를 그대로 사용하실 수 있겠네요.

도움이 되시길.

spark (224,800 포인트) 님이 2020년 11월 26일 답변
btn1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                baselayout = (View)View.inflate(MainActivity.this,R.layout.dialog,null);
                AlertDialog.Builder dlg = new AlertDialog.Builder(MainActivity.this);
                dlg.setTitle(btn1.getText().toString());
                dlg.setView(baselayout);
                dlg.setNegativeButton("취소", null);
                dlg.show();



            }
        });

이렇게 코딩했는데 drawble 폴더에 marsh라는 사진이 있는데 어떻게 추가하죠 ㅠㅠㅠㅠ ㄹㅇ 초보라서 ;;;; 현재 baselayout을 다이얼로그에 사진을 3개 나오게 했는데 실제로 구현하려는것은 drawble에 있는 사진하나를 다이얼로그에 나오게 하려는 것이거든요 ...
+1 추천
AlertDialog dialog = AlertDialog.Builder(context)
            .setView(R.layout.yout_layout_id)
            //다른 메소드 생략
            .show();

ImageView photoImage = dialog.findViewById<ImageView>(R.id.photo_image);
photoImage.setImageResource(R.drawable.your_drwable_id);

이렇게 될 듯 한데요. 도움이 되시길...

spark (224,800 포인트) 님이 2020년 11월 26일 답변
마지막으로 이것만 더 여쭤볼께요 ^^

1. 방금 작성하신 소스에 yout_layout_id에는 뭐를 쓰면되나요?? findviewbyid 해둔 marsh를 쓰니까 에러뜨네요 ....

2.

btn5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                lay = (View)View.inflate(MainActivity.this,R.layout.seek,null);
                AlertDialog.Builder dlg = new AlertDialog.Builder(MainActivity.this);
                dlg.setTitle("다운로드 상황");
                dlg.setView(lay);
               /* new Thread(){
                    public void run(){
                        for(int i=seek.getProgress(); i<100; i+=0.2){
                            seek.setProgress(seek.getProgress()+i);
                            SystemClock.sleep(100);
                        }
                    }
                }.start();*/
                dlg.setNegativeButton("취소", null);
                dlg.show();
            }
        });

여기 새로운 xml파일에 시크바 만들어두고 그 xml을 lay로 연결하고 버튼btn5눌르면 바로 다이얼로그창 띄워서 쓰레드 이용해서 자동증가 시크바 움직이게 하려는데 다이얼로그창에있는 시크바를 움직이는 방법을 모르겠네요 ......
주석 처리한데서 오류가뜨네요 .....
R.layout.your_layout_id는 말 그대로 님이 사용하시기 원하는 레이아웃 파일의 ID 입니다.
님의 경우는 R.layout.seek인 걸로 보이네요.
그리고
SystemClock.sleep();
Thread.sleep();
이건 정상적인 모발일 앱에서는 절대 쓰시면 안됩니다. 유저인터페이스를 블락시키는 메소드들이예요. 모던 안드로이드 시스템은 16ms 단위로 화면을 갱신하게 되어 있기 때문에 저렇게 블락킹하는 메소드를 쓰시는 것은 아주 좋지 않아요.
seek.postDelayed()

new Handler.postDelayed()를 사용하시면 될 것 같아요.
그리고 님이 파일 다운로드 상황을 서버로 부터 알 수 없는 경우라면, 그냥 Progressbar를 사용하시는게 심플할 것 같은데요.
과제하다보니 이제봤네요 ;;;  답변 감사합니다 !!
...