メモ アプリケーションには、画面上に 2 つのフラグメントがあります。メモ フラグメントのリストと、選択したメモを 2 番目のフラグメントに表示するためのメモ詳細フラグメントです。入力テキスト フィールド ( android:inputType="textMultiLine"
) があります。キーボードを非表示にしてイベントを処理したいので、ユーザーがキーボードを閉じたときに行った変更を保存できます。誰でもこのタスクを実行する手がかりを教えてもらえますか?
2465 次
3 に答える
3
キーボードの問題に対する最善かつ普遍的な解決策は、レイアウトの変更時に 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;
}
于 2016-03-09T11:10:55.713 に答える
2
Note Detailフラグメントでそれを処理する方法は次のとおりです。
@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;
}
于 2012-10-25T06:39:06.317 に答える
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"
于 2014-06-14T16:38:20.187 に答える