분명히 잘됐는데 코드를 수정하다보니까 안된다.. 아래방법대로 하는게 아닌듯 뭐가 문제인거지
아래 화면은 필자가 만든 앱의 회원가입 화면이다.
아래 화면에서 비밀번호 확인을 눌러보겠다.
비밀번호 확인을 눌렀더니 아래 화면과 같이 가입하기 버튼이 사라져서 사용자가 키보드를 닫은 후에 가입하기 버튼을 클릭해야 하는 불편함이 생긴다.
하단에 코드를 넣겠지만, 필자는 ScrollView를 이용하였지만 자동으로 스크롤 되지 않았다.
그 이유는 무엇일까?
아래 코드는 위 회원가입 페이지의 XML 코드이다. 분명 ScrollView를 사용했음에도 자동으로 스크롤되지 않았다.
왜냐하면 ScrollView를 사용했지만 ScrollView의 크기가 작아 한 화면에 모두 담기기 때문에 자동으로 스크롤되지 않기때문이다.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">
<TextView
android:id="@+id/textView_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:layout_marginBottom="65dp"
android:text="회원가입"
android:textSize="30sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:gravity="center"
app:layout_constraintTop_toBottomOf="@+id/textView_title">
<ScrollView
android:id="@+id/scrollView_signUpInformation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintTop_toBottomOf="@+id/textView_title">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="80dp"
android:layout_height="match_parent"
android:gravity="center"
android:text="이름 *" />
<EditText
android:id="@+id/editText_Name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="이름"
android:inputType="textPersonName" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="80dp"
android:layout_height="match_parent"
android:gravity="center"
android:text="아이디 *" />
<EditText
android:id="@+id/editText_ID"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="아이디" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="80dp"
android:layout_height="match_parent"
android:gravity="center"
android:text="이메일 " />
<EditText
android:id="@+id/editText_Email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="이메일"
android:inputType="textEmailAddress" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="80dp"
android:layout_height="match_parent"
android:gravity="center"
android:text="휴대폰 번호" />
<EditText
android:id="@+id/editText_PhoneNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="휴대폰 번호"
android:inputType="phone"
android:maxLength="11" />
<Button
android:id="@+id/button_SendCertifyNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/customlayout_button_main"
android:text="인증번호 발송"
android:textColor="@color/white" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout_CertifyNumber"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
tools:visibility="visible">
<TextView
android:layout_width="80dp"
android:layout_height="match_parent"
android:gravity="center"
android:text="인증번호\n입력" />
<EditText
android:id="@+id/editText_InputCertifyNumber"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="인증번호 입력"
android:inputType="number"
android:maxLength="6" />
<CheckBox
android:id="@+id/checkbox_CertifyValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="false" />
<Button
android:id="@+id/button_CertifyNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/customlayout_button_sub"
android:text="인증번호 확인" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="80dp"
android:layout_height="match_parent"
android:gravity="center"
android:text="비밀번호 *" />
<EditText
android:id="@+id/editText_Password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="비밀번호"
android:inputType="textPassword" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="80dp"
android:layout_height="match_parent"
android:gravity="center"
android:text="비밀번호 \n확인 *" />
<EditText
android:id="@+id/editText_PasswordCheck"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="비밀번호 확인"
android:inputType="textPassword"
app:layout_constraintStart_toStartOf="@+id/join_password" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:gravity="center"
android:id="@+id/linearLayout_button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/join_pwck">
<Button
android:id="@+id/join_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/customlayout_button_main"
android:text="@string/action_sign_up"
android:textColor="@color/white" />
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
이때문에 사용자가 회원가입을 하기 위해 EditText를 누르면 자동으로 스크롤이 되도록 하기위해 필자는 linearLayout_button 레이아웃에 아래 옵션을 넣는 방법으로 자동으로 스크롤이 되도록 수정했다.
물론 다른 방법이 있을것같지만 이와같은 방법으로도 해결할수있다
android:layout_marginBottom="200dp"
manifest.xml에서 windowSoftInputMode를 수정해야하는듯하다
<activity
android:name=".ui.main.MainActivity"
android:windowSoftInputMode="adjustPan"/>
해당 블로그에 적힌 방법으로도 해결 할 수 있는 것 같지만 회원가입창을 Activity가 아닌 Dialog를 사용한 필자가 보기에는 그렇게 쉬운 방법도 아니고, 필자가 사용한 방법이 더 간편해보여서 필자가 포스팅한 방법을 사용하였다.
해당 방법을 사용하려면 Window를 사용하는데 액티비티가 아닌 Dialog에서 Dialog.window를 이용해 getWindow()를 하면 형식이 Window(null 불가능)가 아닌 Window?(null 가능)를 가져와서 해당 부분을 신경써야 하는것 같았다..ㅠ
액티비티에서 getWindow()를 사용하면 Window 형식으로 가져오는지는 모르겠다
아래 링크는 키보드가 올라올때 레이아웃이 어떻게 움직일지 옵션을 정리해놓은 좋은 글이 있길래 가져왔다.
키보드가 올라올때 레이아웃이 어떻게 보일지 설정하고 싶다면 아래 방법을 이용해 manifest.xml을 수정하길 바란다.
https://parkho79.tistory.com/59
'프로그래밍 > Android' 카테고리의 다른 글
[Android] 리사이클러뷰(어댑터) 합치기 ConcatAdapter (0) | 2022.07.31 |
---|---|
[Android] holder.getAdapterPosition의 Deprecated (0) | 2022.07.31 |
[Android] 내 컴퓨터 IP로 http연결시 주의할점 (0) | 2022.07.28 |
[Android] 한글만 입력할수있도록 하는 코드 (0) | 2022.07.28 |
[Android] 버튼 클릭시 색변경 (0) | 2022.07.28 |
댓글