Android 소프트 키보드 팝 업 덮어 쓰기 h5 페이지 입력 상자 문제 해결
시스템:Android
조건:입력 상자 가 시각 영역 아래쪽 이나 비 뚤 어 진 위치 에 있 을 때
트리거 조건:입력 상자 에서 초점 가 져 오기,소프트 키보드 팝 업
표현:소프트 키보드 가 h5 페이지 의 입력 상 자 를 덮어 씁 니 다.
문제 분석:
1.문제 발견:현재 페이지 의 box 는 flex 레이아웃 이 고 내용 은 상하 고정 이 높 으 며 중간 적응(중간 구역 의 내용 이 너무 많 으 면 스크롤 바 가 나타 날 수 있 습 니 다.input 상 자 는 wrapper 의 아래쪽 에 있 습 니 다),input 은 초점 을 얻 고 핸드폰 키보드 가 팝 업 되 며 input 은 시각 영역 으로 올 라 가지 않 아 flex 레이아웃 으로 인 한 것 으로 의심 합 니 다.
h5 페이지 테스트 코드 는 다음 과 같 습 니 다.
<html lang="en">
<head> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <meta http-equiv="Content-type" content="text/html; charset=utf-8"/> <style> html,body{
width:100%;
height:100%;
margin:0;
padding:0;
} .box{
display:flex;
flex-direction:column;
width:100%;
height:100%;
} .header{
height:50px;
width:100%;
background:#368CDA;
text-align:center;
line-height:50px;
font-size:20px;
color:#fff;
} .wrapper{
flex:1;
overflow:auto;
width:100%;
} .content {
margin:0;
padding:0;
} .content li{
margin:0;
padding:0;
list-style:none;
height:150px;
background:#FFCC99;
text-align:center;
line-height:150px;
font-size:20px;
color:#fff;
} .content li:nth-child(2n){
background:#CC99CC
}
.t-input{
width:300px;
height:50px;
border:1px solid #FF0000;
} .footer{
width:100%;
height:48px;
background: #368CDA;
text-align:center;
line-height:48px;
font-size:18px;
color:#fff;
}
</style>
</head>
<body>
<div class="box">
<div class="header"> </div>
<div class="wrapper">
<ul class="content">
<li> </li>
<li> </li>
<li> </li>
<li> </li>
<li> </li>
</ul>
<input type="text" class="t-input" placeholder=" ">
</div>
<div class="footer"> </div>
</div>
</body>
</html>
2.레이아웃 수정:box 의 flex 레이아웃 을 제거 하고 wrapper,footer 를 position:absolute 방식 으로 페이지 에 위치 시 킨 결과 input 가 여전히 위로 이동 하지 않 고 flex 레이아웃 과 무관 하 다 고 판단 합 니 다.코드 수정 은 다음 과 같 습 니 다.
<style>
.box{ /*display:flex; flex-direction:column;*/
width:100%;
height:100%;
position:relative; }
.wrapper{/*flex:1; */
overflow:auto;
width:100%;
// top、bototm, wrapper, header footer
position:absolute;
top:50px;
bottom:48px;
}
.footer{ width:100%; height:48px; background: #368CDA; text-align:center; line-height:48px; font-size:18px; color:#fff; position:absolute; bottom:0; }
</style>
3.팩시밀리 시 뮬 레이 션:팩시밀리 와 컴퓨터 연결 디 버 깅 을 하고 크롬 을 켜 는chrome://inspect(아래 그림 에서 보 듯 이)키보드 가 꺼 지지 않 았 을 때 html 높이 는 512 px 이 고 키보드 가 꺼 진 후 html 높이 는 288 px(줄 어 든 구역 은 소프트 키보드 구역)입 니 다.html,body 가 height:100%의 자가 적응 구 조 를 설정 한 후에화면 높이 에 따라 높이 가 바 뀌 어서 생 긴 것 입 니 다.4.코드 디 버 깅:body 의 height:100%를 제거 하고 body 에 소프트 키보드 가 튀 어 나 와 입력 상 자 를 가 릴 수 있 는 높이 를 추가 합 니 다.body 높이=288(소프트 키보드 가 나타 난 후 html 높이)+50(입력 상자 높이)+48(버튼 높이 저장)키보드 팝 업 이 input 를 가 리 는 것 을 발견 하면 input 상 자 는 자동 으로 시각 영역 으로 올 라 가 문제 포 지 셔 닝 에 성공 합 니 다.
해결 방안:
프로젝트 1 페이지 렌 더 링 이 완 료 된 후 JS 동적 으로 화면 시각 영역 높이 를 가 져 옵 니 다(주:화면 이 회전 하면 화면 높이 를 다시 가 져 오고 값 을 부여 해 야 합 니 다).그리고 이 를 body 의 height 에 할당 합 니 다.그러면 body 의 높이 는 화면의 높이 입 니 다.소프트 키보드 가 꺼 지면 body 를 위로 밀어 줍 니 다(body 가 고정 높이 가 있 기 때문에 html 의 자가 적응 높이 를 계승 하지 않 습 니 다).입력 상 자 를 시각 영역 에 설치 합 니 다.코드 는 다음 과 같 습 니 다.
document.body.style.height = window.screen.availHeight +'px';
방안 2 우 리 는 요소 의 scrollIntoViewIfNeeded()
방법 을 빌 릴 수 있 습 니 다.이 방법 을 실행 한 후에 현재 요소 가 시각 영역 에서 보이 지 않 으 면 브 라 우 저 창 이나 용기 요 소 를 스크롤 하여 최종 적 으로 볼 수 있 습 니 다.만약 에 현재 요소 가 시각 영역 에 있다 면 이 방법 은 아무것도 하지 않 습 니 다.코드 는 다음 과 같 습 니 다.
window.addEventListener('resize', () => {
if (document.activeElement.tagName == 'INPUT') {
// Android window.setTimeout(() => {
document.activeElement.scrollIntoViewIfNeeded();
}, 100);
} });
총결산위 에서 말 한 것 은 안 드 로 이 드 소프트 키보드 팝 업 이 h5 페이지 입력 상 자 를 덮어 쓰 는 문 제 를 해결 하 는 데 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.