/ / [タブレット] [断片]どのようにイベントソフトキーボードを隠すか - アンドロイド、入力、断片、タブレット、android-softkeyboard

[タブレット] [フラグメント]どのようにイベントソフトキーボードを隠すために - アンドロイド、入力、断片、タブレット、アンドロイドソフトキーボード

私のノートアプリケーションは画面上に2つの断片を持っています: 選択されたノートを第2のフラグメントに表示するためのノートフラグメントおよびノー​​ト詳細フラグメントのリストであり、入力テキストフィールド(android:inputType = "textMultiLine")を有する。私はイベントのキーボードを非表示にしたいので、ユーザーがキーボードを閉じるときに行った変更を保存することができます。誰も私にこの仕事をするための手がかりを与えることができますか?

回答:

回答№1は2

ここでは、私はノートの詳細の断片でそれをどう扱うのですか?

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
this.view = inflater.inflate(R.layout.fragment_note_detail_of_style_searching, container , false);

listviewFilter = (ListView) view.findViewById(R.id.listview_filter);
noteDetailView = view.findViewById(R.id.note_detail_of_style_view);
photoDetailView = view.findViewById(R.id.gv_note_detail_photo);

view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

@Override
public void onGlobalLayout() {
int heightDiff = view.getRootView().getHeight() - view.getHeight();
if (heightDiff > 200) {
isWatchingKeyboard = true;
photoDetailView.setVisibility(View.GONE);
return; //must exit now
}

if(isWatchingKeyboard){
isWatchingKeyboard = false;
viewForFocus.requestFocus();
photoDetailView.setVisibility(View.VISIBLE);
}
}
});

return this.view;
}

回答№2の場合は1

私はキーボードの問題のための最高の汎用ソリューションは、レイアウトの変更VisibleDisplayFrameを測定すると思う:

Rect visibleRect = new Rect();

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup mMain = (ViewGroup) inflater.inflate(R.layout.select_cover_album, container, false);

mMain.getWindowVisibleDisplayFrame(visibleRect);
mMain.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v,
int left,
int top,
int right,
int bottom,
int oldLeft,
int oldTop,
int oldRight,
int oldBottom) {

Rect r = new Rect();
mMain.getWindowVisibleDisplayFrame(r);

if(r.height() < visibleRect.height()){
//keyboard shown

}
if(r.height() == visibleRect.height()){
//keyboard hidden
}

}
});

return mMain;
}

回答№3の場合は0

私はそれをこのようにした:

private int prevBottom;

@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_status, container, false);
prevBottom = view.getBottom();

view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (view.getBottom() > prevBottom) {
view.requestFocus();
}
prevBottom = view.getBottom();
}
});

return view;
}

これを私が膨張させていたビューに加えました:

android:focusableInTouchMode="true"

これをAndroidManifest.xmlのアクティビティに追加します

android:windowSoftInputMode="adjustResize"