본문 바로가기

아옳옳의 코딩공부/아옳옳의 안드로이드스튜디오

2021-03-29안드로이드 스튜디오(키보드 제어 , 다이얼로그 )

반응형

키보드 제어 

에디트텍스트에 포커싱 하게 되면 아래에서 키보드가 올라온다 . 그랫을때 그 키보드를 제어하는 방법이 있다. 

코드로 제어 하는 방법이 있고 , 매니패스트로 제어를 하는 방법이 있는데 , 코드로 작성하는 법 보다 매니패스트 설정이 더 간단하고 솔직히 키보드를 제어할 일이 많이 없을거 같아 코드만 넣어 놓고 설명은 생략 하겠다 

public class MainActivity extends AppCompatActivity {

    EditText editText;
    InputMethodManager manager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = findViewById(R.id.editText);
        Button button = findViewById(R.id.button);


        manager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        editText.requestFocus();
        // manager.showSoftInput(editText,InputMethodManager.SHOW_IMPLICIT);

        //눌럿을떄 토글 처럼 키보드 올라왔다 내려갓다 하는것이다.
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                editText.requestFocus();
                // InputMethodManager manager = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
                manager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
            }
        });
    }
}

이건 잘 몰라도 사실 무관하다 

다음은 매니패스트로 사용하는 법이다 

 

보통 위2줄중 하나 , 아래 2줄중 하나 사용함 

빨간 부분만 추가해주면 되기떄문에 매니패스트 사용하는게 더 간편하다 

 


다이얼로그 (★ 중요하당) 

 

다이얼로그생성은 빌더 클래스로 생성

AlertDialog.Builder builder = new AlertDialog.Builder(this); 

타이틀영역

setTitle : 타이틀문자열 지정

setIcon : 타이틀영역의 아이콘 지정

 

메세지 영역 

setMessage : 본문을 단순 문자열로 구성

 

버튼영역 

setPositiveButton : 3번 버튼 ( 보통 예 아니오 사용) 

setNegativeButton :2번 버튼( 보통 예 아니오 사용) 

setNeutralButton: 1번 버튼 ( 보통 자세히보기 등으로 사용 ) 

 

코드에 주석 참조 ~ 

public class MainActivity extends AppCompatActivity {
    // 다이얼로그 실습

    EditText edt_Name, edt_Email, dig_Email, dig_name;
    int index;

    @Override// 빽 버튼이 눌렸을 때 실행되는 메소드
    public void onBackPressed() {
        super.onBackPressed();
        //제목영역 ,메시지영역, 버튼영역으로 구성됨
        //Builder : 기본 대화상자 처리를 위한 기본구조를 생성

        //원하는 정보를 사용자에게 알리고자 할 때 사용되는 기본적인 대화상자
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("종료 확인");
        builder.setMessage("현재 프로그램을 종료하실랑가요~? ");
        //다이얼로그 오른쪽 버튼   finish();  로 프로그램 종료 
        builder.setPositiveButton("확인", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                finish();
            }
        });
        //다이얼로그 왼쪽 버튼 취소 버튼은 따로 설정안해도 작동됨
        builder.setNegativeButton("취소", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        //다이얼로그 네츄럴 버튼 자세히보기 등 설명할 사항이 있다면 추가하는 버튼이다.
        builder.setNeutralButton("자세한 정보", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(getApplicationContext(), "옳옳 네츄럴 버튼", Toast.LENGTH_LONG).show();
            }
        });
        //빌더를 보여줘라 
        builder.show();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 새로운 레이아웃 만들어서 다이얼로그로 만들어보기  

        edt_Name = findViewById(R.id.editText);
        edt_Email = findViewById(R.id.editText2);
        Button button1 = findViewById(R.id.button);
        Button button2 = findViewById(R.id.button2);

        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // 1. 다일로그 레이아웃을 빌더에 바로 줄수 없어서 뷰로 인플레이션 하고 빌더에 셋 해쥼
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                // 2. 인플레이션 해줌
                LayoutInflater inflater = getLayoutInflater();
                View layout = inflater.inflate(R.layout.dialog, null);
                //3. 빌더에 레이아웃 셋팅해줌
                builder.setView(layout);


                builder.setTitle("사용자 정보 입력 ");
                builder.setIcon(R.drawable.ic_menu_allfriends);

                dig_name = layout.findViewById(R.id.editText3);
                dig_Email = layout.findViewById(R.id.editText4);
                dig_name.setText(edt_Name.getText().toString());
                dig_Email.setText(edt_Email.getText().toString());

                //다이얼로그 오른쪽 버튼
                builder.setPositiveButton("확인", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        edt_Email.setText(dig_Email.getText().toString());
                        edt_Name.setText(dig_name.getText().toString());
                    }
                });
                //다이얼로그 왼쪽 버튼
                builder.setNegativeButton("취소", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getApplicationContext(), "취소했습둥", Toast.LENGTH_LONG).show();
                    }
                });

                builder.show();

            }
        });

        //두번째 버튼 체크박스 형태의 다이얼로그 
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String[] singer = {"아옳옳족 총잽이", "아옳옳족 활잽이", "아옳옳족 칼잽이", "아옳옳족 주술사"};
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setTitle("원하는 아옳이는?");
                ArrayList<String> item = new ArrayList<>();


                // -1 아무것도 선택안함 
               /* 다이얼로그 라디오버튼 실습 
               builder.setSingleChoiceItems(singer, -1, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        index = which;
                    }
                });
                builder.setPositiveButton("확인", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    if(index>=0){
                        Toast.makeText(getApplicationContext(),"좋아하는 아옳이는 " + singer[index] + "입니다", Toast.LENGTH_LONG).show();
                    }
                    }
                });*/
                builder.setMultiChoiceItems(singer, null, new DialogInterface.OnMultiChoiceClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                        String value = singer[which];
                        if (isChecked) {
                            item.add(value);
                        } else {
                            item.remove(value);
                        }
                    }
                });
                builder.setPositiveButton("확인", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        String msg = "";
                        for (int i = 0; i < item.size(); i++) {
                            msg += "\n" + item.get(i);
                        }
                        Toast.makeText(getApplicationContext(), "좋아하는 아옳이는 :  " + msg, Toast.LENGTH_LONG).show();
                    }
                });
                builder.show();
            }
        });

    }
}

반응형