簡體   English   中英

如何防止底部導航欄被推到顯示的鍵盤上

[英]How to keep a bottom nav bar from being pushed up on keyboard shown

當軟鍵盤彈出時,如何創建一個不會隨視圖移動的粘性頁腳?

下面是我當前設置的圖像示例以及我想要實現的目標。 我有一個包含我的頁面內容的scrollview和一個與作為導航欄的父底部對齊的linearlayout。

我想要它的例子

問題是當鍵盤彈出時,它會推動我的整個視圖,包括底部導航部分。 我不想禁用自動推送視圖(通過設置android:windowSoftInputMode="adjustPan" )而是排除單個元素被推高 ,我的底部導航欄。

我測試了windowSoftInputMode修復,但它隱藏了鍵盤后面的頁面內容。 有沒有辦法讓它繼續推高滾動視圖而不是底部導航? 我的另一個選擇是設置visibility:gone在鍵盤上移動,然后在鍵盤上重新顯示它,但這看起來過於復雜,並且從我閱讀的內容來看並不總是可靠的。

如果有人有任何例子或建議,我會全力以赴。 謝謝。

將其添加為滾動條的XML屬性

機器人:isScrollContainer = “假”

或者在Manifest中的Activity的標簽中添加它

機器人:windowSoftInputMode = “adjustPan”

只需在onCreate添加此行,當此選項設置窗口不會針對顯示的輸入方法進行調整。

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

我在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>

我遇到了一個非常相似的問題,其中的差異是a)我最初沒有使用ScrollView而b)我不想移動的項目是一個簡單的TextView。

這是我找到的答案: 點擊

我做了什么來解決它:

  • 使用adjustResize
  • 使用4個布局:周圍的一個,1個用於標題,ScrollView和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下方獲得的所有空間。 如果您不想這樣,例如因為您的“底部導航”具有不同的顏色,您不希望顯示太多,請嘗試為“底部導航”創建一個周圍的RelativeLayout,並在其中創建另一個可以推動“底部導航”導航“向下。 ;)

我很晚才回答,但我最近遇到了同樣的情況。 我采用另一種方法來解決這個問題,而不是使用RelativeLayoutLinearLayout ,使用CoordinatorLayout並將行為應用於BottomNavigtaionView以顯示/隱藏它,滾動到頂部或底部(與我們看到CollapsingToolBar或AppBarLayout的方式相同)。

用於BottomNavigationView的內置行為是app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"

您可以從我的另一個答案中詳細閱讀所有步驟。

PS我發布它作為答案而不是評論,因為有時我們只是尋找答案而忽略評論,我相信它可能是解決這個問題的好方法,所以你不應該忽略它並給它一次讀。 謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM