문제 설명:Activity 가 finish()방법 을 되 돌려 받 은 후에 인터페이스 가 소각 되 었 지만 소프트 키 보드 는 아직도 화면 에 남아 있 습 니 다.이것 은 현재 표시 되 고 있 는 Activity 가 입력 상자 가 없 는 것 을 볼 수 없고 심각 한 시각 적 영향 을 줍 니 다.
시도 방안:여러 가지 방법 을 찾 아 소프트 키 보드 를 숨 기 고 인터넷 에서 여러 가지 방법 을 찾는다.사고방식 은 이벤트 가 종 료 될 때 onDestroy 방법 으로 인 터 페 이 스 를 없 애 는 것 이다.이 방법 에서 인 터 페 이 스 를 숨 기 는 방법 을 생각하면 된다.아래 의 이런 방법 을 찾 았 지만 그래도 안 된다.기본 클래스 로 모든 editext 를 찾 아 초점 을 잃 게 하고 소프트 키 보드 를 숨 기 려 고 시도 했다.
InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(getCurrentFocus().getApplicationWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
솔 루 션:처음에 onDestroy()에서 소프트 키 보드 를 숨 기 는 방향 을 바 꾸 는 것 은 잘못된 것 입 니 다.onDestroy()전에 두 가지 생명 주기 방법 이 있 었 기 때 문 입 니 다.상기 소프트 키 보드 를 숨 기 는 방법 은 getCurrent Focus()가 있 었 습 니 다.onDestroy()전에 현재 초점 을 정확하게 얻 지 못 했 을 것 입 니 다.따라서 onPasue()방법 에 소프트 키 보드 를 숨 기 는 것 이 효과 적 이 며,onDestroy()방법 에 서 는 어떤 방법 도 사용 하지 않 는 것 이 무효 입 니 다.
주의 점:이 소프트 키 보드 를 숨 기 는 방법 으로 빈 판단 을 하 는 것 이 좋 습 니 다.그렇지 않 으 면 빈 포인터 의 이상 이 발생 할 수 있 습 니 다.예 를 들 어 현재 인터페이스 에 컨트롤 이 초점 을 얻 지 못 했 을 때 getCurrent Focus()라 는 방법 은 null 을 얻 었 습 니 다.
InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if(getCurrentFocus!=null)
im.hideSoftInputFromWindow(getCurrentFocus().getApplicationWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
소프트 키보드 가 레이아웃 문 제 를 차지 합 니 다.소프트 키 보드 는 때때로 일부 컨트롤 을 덮어 씁 니 다.이때 어떻게 전체 화면 을 위로 올 려 서 어떤 컨트롤 도 덮어 쓰 지 않 습 니까?두 단계 가 있 습 니 다.첫 번 째 는 activity 에 속성 을 설정 합 니 다.다음 과 같 습 니 다.두 번 째 단 계 는 레이아웃 에 scrollview 를 추가 하여 위 에 있 는 보 기 를 여기에 넣 고 소프트 키보드 가 표 시 될 때 scrollview 에서 스크롤 하여 공간 을 얻어 소프트 키 보드 를 표시 합 니 다.
<activity Android:windowSoftInputMode="adjustResize">2.merge 태그 주의 점
merge 라벨 은 루트 레이아웃 이 FrameLayout 일 때 만 유용 합 니 다.안 드 로 이 드 의 모든 인터페이스의 루트 레이아웃 이 FrameLayout 이기 때문에 merge 라벨 로 융합 할 수 있 습 니 다.
merge 탭 을 사용 하면 레이아웃 에 EditText 가 있어 도 자동 으로 초점 을 얻 을 수 없고 수 동 으로 초점 을 설정 하여 request Focus()방법 을 호출 할 수 있 습 니 다.또는 request Focus 로 XML 레이아웃 파일 에 있 습 니 다.
사용 후 루트 레이아웃 에 있 으 면 Layout Inflater 로 view 를 만 들 수 없습니다.그렇지 않 으 면 다음 과 같은 오 류 를 보고 할 수 있 습 니 다.listview 의 getview()에서 merge 가 있 는 레이아웃 을 사 용 했 기 때문에 무 너 졌 습 니 다.추가 적 으로 inflater()방법 에 attach root 를 true 로 설정 하면 충돌 하지 않 고 해석 할 수 있 습 니 다.
android.view.InflateException: Binary XML file line
#2: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true
Caused by: android.view.InflateException: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true
3.LinearLayout 주의 점
선형 레이아웃 은 기본적으로 수평 이 므 로 weight 를 잘 사용 하여 이 속성 을 중시 해 야 합 니 다.
매우 중요 한 점,방향 을 수평 으로 설정 하면 layotgravity 의 top 과 bottom 라벨 은 효과 가 없습니다.방향 을 수직 으로 설정 하면 left 와 right 는 효과 가 없습니다.이때 오른쪽 에 놓 으 려 면 space 라벨 을 사용 하여 폭 을 0dp 로 설정 하고 layoutweight 를 1 로 설정 하여 컨트롤 앞 에 놓 으 면 됩 니 다.
4.레이아웃 선택 FrameLayout 는 가장 간단 한 레이아웃 입 니 다.모든 안 드 로 이 드 인터페이스의 루트 레이아웃 은 FrameLayout 이 고 로드 속도 가 가장 빠 릅 니 다. LinearLayou 레이아웃 과 RelativeLayout 레이아웃 의 로드 속 도 는 더욱 깊이 연구 해 야 구체 적 인 결론 을 얻 을 수 있 습 니 다. 총결산 이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다: