web-dev-qa-db-ja.com

表示されているキーボードで下部ナビゲーションバーが押し上げられないようにする方法

ソフトキーキーボードがポップアップしたときにビューとともに移動しないスティッキーフッターを作成するにはどうすればよいですか?

以下は、現在のセットアップのイメージ例と、達成したいことです。ページコンテンツを含むscrollviewと、ナビゲーションバーとして機能する親の下部に配置されるlinearlayoutがあります。

Example of what i want it to do

問題は、キーボードがポップアップすると、下部のナビゲーションセクションを含むビュー全体が押し上げられることです。 無効にしたくないビューの自動プッシュアップ(Android:windowSoftInputMode="adjustPan"の設定による)ではなく、単一の要素をプッシュから除外するup、私の下部のナビゲーションバー。

私はwindowSoftInputModeの修正をテストしましたが、ページのコンテンツをキーボードの後ろに隠しています。それがスクロールビューを押し上げ続けるが底部のナビゲーションは押し続ける方法はありますか?私の他のオプションは、キーボードを上にvisibility:goneを設定してから、キーボードを下にして再表示することでしたが、それは過度に複雑に見え、私が読んだものから常に信頼できるとは限りません。

誰かが例や提案があれば、私はすべて耳です。ありがとう。

29
Thomas Stein

これをスクロールバーのXML属性として追加するか、

Android:isScrollContainer = "false"

またはマニフェストのアクティビティのタグにこれを追加します

Android:windowSoftInputMode = "adjustPan"

13
JiratPasuksmit

この行をonCreateに追加するだけです。このオプションを設定すると、ウィンドウは表示された入力方法に合わせて調整されません。 :

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
3
ucMedia

私はSOで見つかった多くの解決策を試し、Android:windowSoftInputMode = "adjustNothing"のみをマニフェストに追加して、私のために働いたアクティビティを試しました:

<activity
    Android:name=".MainActivity"
    Android:windowSoftInputMode="adjustNothing">

関連するレイアウト:

  <RelativeLayout
     ...
        <Android.support.v4.widget.NestedScrollView
           ...
        </Android.support.v4.widget.NestedScrollView>
        <Android.support.design.widget.BottomNavigationView
             ...
            design:menu="@menu/navigation"/>
    </RelativeLayout>
2
saswanb

私は答えるのがとても遅いですが、最近同じ状況に遭遇しました。私はこの問題を解決するために別のアプローチに従いましたが、それはRelativeLayoutまたはLinearLayoutを使用するのではなく、CoordinatorLayoutを使用し、BottomNavigtaionViewに動作を適用して表示/非表示にしました上部または下部にスクロールして(CollapsingToolBarまたはAppBarLayoutと同じように)。

BottomNavigationViewに使用される組み込みの動作はapp:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"

すべての手順の詳細については、私の 別の回答 を参照してください。

追伸コメントではなく回答として投稿しました。時々、回答を探してコメントを無視することがあり、この問題を解決するための良いアプローチになると信じているので、無視して一度読んではいけません。ありがとう。

0
gprathour

A)最初はScrollViewを使用していなかった、b)移動したくないアイテムは単純なTextViewであるという違いでかなり似た問題に遭遇しました。

これが私が見つけた答えです: クリック

それを修正するために私がしたこと:

  • adjustResizeを使用
  • 4つのレイアウトを使用:周囲のレイアウト、ヘッダー用に1つ、スクロールビュー用に1つ、「下部ナビゲーション」用に1つ
  • Android:layout_alignParentBottom="true"だけに頼らないでください。これにより、ナビゲーションバーが画面の下部に移動しますが、「adjustResize」のためにキーボードが上に移動できることも意味します
  • さらにAndroid:layout_height="wrap_content"Android:layout_below="@id/MyScrollView"と組み合わせて使用​​し(ScrollViewと画面の下部の間にあるすべてのスペースをレイアウトが使用するため)、Android:gravity="bottom"を使用して、レイアウトの下部。
  • Android:layout_height="match_parent"Android:layout_alignParentBottom="true"の代わりにAndroid:layout_height="wrap_content"を使用することもできますが、私はそのように完全にテストしていません。
  • 私が言ったように、これは「下ナビゲーション」レイアウトがScrollViewの下に得ることができるすべてのスペースを使い果たすようにします。あなたがそれを望まないなら、例えば「bottom nav」にはあまり表示したくない別の色があるため、「bottom nav」の周囲のRelativeLayoutと、「bottom nav」を下に押すことができる別の空のレイアウトを作成してみてください。 ;)
0
Neph