2

4 つの s (タブとして表示) を持つアプリがありFragment、それらすべてが同じ split を共有していますAction Bar。上部のバーにはタブのボタンがあり、下部のバーにはアクションのボタンがあります。上にがあり、下にFragmentがあるものがあります。 さて、このキーボードの問題は次のとおりです。 EditTextListView
Fragment

adjustPanキーボードが下部バーを覆うように使用すると、ListViewサイズが変更されないため、その要素の一部がキーボードで覆われ、スクロールして表示できません。

を使用するadjustResizeと、ListViewサイズが変更されますが、もちろん、下部のバーが押し上げられます。私はそれをしたくありません。

私が望むのは、下部のバーがキーボードで覆われ、ListViewサイズが変更されて、スクロールしてすべての要素が表示されるようにすることです。
とりあえず、adjustPanユーザーが をタッチするとキーボードが消えるように使用していきますが、ListView上記で説明したことを実現する方法を見つけたいと思います。

ListViewキーボードが表示されたときに(使用中に)プログラムでサイズを変更しようとするのは悪い考えadjustPanですか? setVisibility(View.GONE)または、使用中にボトムバーを(または何かで)非表示にする方法はありadjustResizeますか?最後に、キーボードがいつ表示され、その高さを取得するかを簡単に理解する方法はありますか?

助けてくれてありがとう。

PS私はすでにいくつかの同様の質問をすべて見つけましたが、どれも解決策がありません.

4

1 に答える 1

0

私が考えることができる1つのことは、softInputMethodModeをadjustResizeに設定し、キーボードが閉じて開いたときにボトムバーを表示または非表示にすることです。リッスンするキーボードの開閉イベントはありませんが、ウィンドウの高さの変化を観察することで検出できます。これを実現するには、グローバル レイアウト リスナーをメイン コンテンツ ビューのビュー ツリー オブザーバーに追加します。ビュー ツリー オブザーバーの使用に関する説明とコードについては、この投稿を参照してください。

編集

上記のリンクからコピーしたスニペットに関連する変更を加えたものを次に示します (これは試していませんが、アイデアを強調しています)。

View bottomBar = findViewById(R.id.your_bottom_bar);
final View activityRootView = findViewById(R.id.activityRoot);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();
        if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
            bottomBar.setVisibility(View.GONE);
        }else{
            bottomBar.setVisibility(View.VISIBLE);
        }
     }
});
于 2015-05-01T19:49:32.150 に答える