Flutter 가 빈 키 보드 를 누 르 면 전체 방법 을 숨 깁 니 다.
Android 의 구현 방식 은 기본 Activity 에서 이벤트 배 포 를 실현 하고 터치 위치 가 입력 상자 안에 있 는 지 판단 하 는 것 이다.
/**
*
*/
@CallSuper
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.MotionEvent ) {
View view = getCurrentFocus();
if (isShouldHideKeyBord(view, ev)) {
hideSoftInput(view.getWindowToken());
}
}
return super.dispatchTouchEvent(ev);
}
/**
*
*/
protected boolean isShouldHideKeyBord(View v, MotionEvent ev) {
if (v != null && (v instanceof EditText)) {
int[] l = {0, 0};
v.getLocationInWindow(l);
int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left + v.getWidth();
return !(ev.getX() > left && ev.getX() < right && ev.getY() > top && ev.getY() < bottom);
}
return false;
}
/**
*
*/
private void hideSoftInput(IBinder token) {
if (token != null) {
InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
manager.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
}
}
그렇다면 플 루 터 에 서 는 어떻게 이 루어 질 까?많은 글 의 방법 은 다음 과 같 습 니 다.TextField 를 포함 한 화면 마다 Gesture Detector 를 감 싸 고 Focus 를 수 동 으로 제어 합 니 다.초점 을 잃 으 면 키 보드 를 닫 아 달라 고 요청 합 니 다.이것 은 임시 해결 방안 으로 오류 가 발생 하기 쉬 우 며 대량의 코드 를 생 성 한다.
GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: () {
//
FocusScope.of(context).requestFocus(FocusNode());
},
child: *******
}
일반적으로 이러한 수 요 는 전체 app 에 대응 하 는 것 입 니 다.한 번 고생 하면 영원히 편안 해 지 는 방법 이 있 습 니까?물론 있 습 니 다.MaterialApp 의 builder 방법 을 통 해 Navigator 위 에 있 지만 다른 작은 위 젯 아래 에 작은 위 젯 을 삽입 할 수 있 습 니 다.'전역'Gesture Detector 만 추가 하면 키보드 가 닫 힙 니 다.
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
builder: (context, child) => Scaffold(
// Global GestureDetector that will dismiss the keyboard
body: GestureDetector(
onTap: () {
hideKeyboard(context);
},
child: child,
),
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
void hideKeyboard(BuildContext context) {
FocusScopeNode currentFocus = FocusScope.of(context);
if (!currentFocus.hasPrimaryFocus && currentFocus.focusedChild != null) {
FocusManager.instance.primaryFocus.unfocus();
}
}
}
물론 아래 의 이 방법 으로 키 보드 를 닫 을 수도 있다.
SystemChannels.textInput.invokeMethod('TextInput.hide');
이렇게 하면 전체 국면 이 통제 되 고 더 이상 모든 페이지 에 쓸 필요 가 없다.여기 서 Flutter 가 공백 을 누 르 면 키 보드 를 숨 기 는 전체적인 방법 에 대한 자세 한 내용 을 소개 합 니 다.더 많은 Flutter 가 공백 을 누 르 면 키보드 내용 을 숨 깁 니 다.예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Flutter】DateTime 전월의 일수를 취득한다달의 일수를 취득할 필요가 있어, 의외로 수요 있을까라고 생각했으므로 비망록 정도에 남겨 둡니다. DateTime 날짜에 0을 입력하면 전월 DateTime이 됩니다. 2021년 3월 0일 = 2021년 2월 28일...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.