728x90
반응형
이제 만들어 볼 것은 커스텀 대화 상자이다.
커스텀 대화 상자를 만들려면 두 가지의 layout이 존재해야 한다.
1. 메인 layout
2. 대화 상자 내의 layout
그럼 xml 소스부터 보자.
메인 Layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/goLogin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="로그인"
android:textSize="25dp"
android:layout_gravity="center"/>
</LinearLayout>
커스텀 Dialog Layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="300dp"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="아이디"/>
<EditText
android:id="@+id/id_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="아이디를 입력하세요 : " />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="비밀번호" />
<EditText
android:id="@+id/pw_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="비밀번호를 입력하세요 : "
android:inputType="textPassword"/>
<Button
android:id="@+id/login_bt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="로그인"/>
</LinearLayout>
여기서 중요한 점은 Layout을 감싸는 부부의 witdh는 match_parent 혹은 wrap_content로 하게 되면 모양이 이상해지니
직접 숫자를 넣어줘야 한다. 그리고 height도 지금은 wrap_content로 하긴 했지만 이게 나중 가면 기기마다 크기가
달라지기 때문에 나중에는 기기마다 크기 값을 설정해주는 함수를 만들어서 설정해줘야 한다.
화면은 이러하다.
메인 화면
Dialog 화면
무튼이제 자바 소스로 넘어가자
자바 소스는 내가 주석으로 설명해놨으니 참고하면 될 것 같다.
public class MainActivity extends AppCompatActivity implements Button.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bt1 = (Button)findViewById(R.id.goLogin);
//Activity에서 Button.OnClickListener를 상속 받앗기때문에 this 사용
bt1.setOnClickListener(this);
}
@Override
public void onClick(View view) {
//Dialog도 매개변수로 context 받기 때문에 this가 가능함
final Dialog login = new Dialog(this);
//커스텀 Dialog의 화면을 아래 layout으로 설정
login.setContentView(R.layout.login);
//Dialog 타이틀 설정
login.setTitle("로그인");
login.show();
//login layout에서 버튼값 가져오기
Button loginBt = login.findViewById(R.id.login_bt);
//login layout에 있는 editText 값 가져오기 위해서 final 설정
final EditText id = login.findViewById(R.id.id_container);
final EditText pwd = login.findViewById(R.id.pw_container);
//로그인 버튼 클릭했을때 진입
loginBt.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View view) {
//id 와 pwd가 모두 무언갈 입력했을때
if(id.getText().length()>0 && pwd.getText().length()>0){
Toast.makeText(getApplicationContext(),"로그인 성공",Toast.LENGTH_SHORT).show();
//Dialog 없앰
login.dismiss();
//키보드 없앰
InputMethodManager immhide = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
immhide.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
}else if(id.getText().length()<=0 ){ //id가 비어 있을때
Toast.makeText(getApplicationContext(),"id를 입력하지 않았습니다",Toast.LENGTH_SHORT).show();
//id 부분에 focus
id.requestFocus();
//키보든 보이게 하는 부분
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
}else if(pwd.getText().length()<=0 ){ //pwd가 비어 있을때
Toast.makeText(getApplicationContext(),"비밀번호를 입력하지 않았습니다",Toast.LENGTH_SHORT).show();
pwd.requestFocus();
//키보든 보이게 하는 부분
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
}
}
});
}
}
반응형
'코딩일기 > android studio' 카테고리의 다른 글
안드로이드 독학 20일 차 : Gradle 이란? (0) | 2021.07.06 |
---|---|
안드로이드 독학 19일차 : 알림(Notification) (6) | 2021.04.09 |
안드로이드 독학 18일차 : 상황에 따른 버튼 클릭 이벤트 처리 (0) | 2021.04.08 |
안드로이드 독학 17일차 : DatePickerDialog & TimePickerDialog (2) | 2021.04.01 |
안드로이드 독학 16일차 : Dialog(대화상자) (2) | 2021.03.31 |