【问题标题】:Bottom Navigation Bar (Layout) is Moved up by Keyboard底部导航栏(布局)被键盘向上移动
【发布时间】:2019-06-13 08:33:39
【问题描述】:

我正在使用LinearLayout 自定义底部导航栏。所以每当我专注于编辑文本字段时,底部视图都会与键盘一起出现。

我已尝试更改清单中的 android:windowSoftInputMode="adjustPan"android:windowSoftInputMode="adjustResize"。它可以工作,但使用它时滚动不起作用。

以键盘为焦点:

没有键盘焦点:

 <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.sns.lovelike.activity.user.UserActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <FrameLayout
            android:id="@+id/fragment_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayout2"
        android:layout_width="match_parent"
        android:layout_height="@dimen/_50sdp"
        android:layout_alignParentBottom="true"
        android:layout_gravity="end|bottom"
        android:background="@color/colorPrimaryDark"
        android:orientation="horizontal"
        android:padding="@dimen/_5sdp"
        android:weightSum="5">


        <LinearLayout
            android:id="@+id/home"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/home_iv"
                android:layout_width="@dimen/_18sdp"
                android:layout_height="@dimen/_18sdp"
                android:layout_gravity="center"
                android:src="@drawable/home_icon_normal" />

            <TextView
                android:id="@+id/home_tv"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="@string/user_home"
                android:textColor="@color/colorLightGray"
                android:textSize="@dimen/_10sdp" />

            <View
                android:id="@+id/hv"
                android:layout_width="@dimen/_32sdp"
                android:layout_height="@dimen/_1sdp"
                android:layout_gravity="center"
                android:layout_marginTop="@dimen/_1sdp"
                android:background="@color/colorWhite"
                android:backgroundTint="@color/colorRed"
                android:visibility="invisible"
                tools:visibility="visible" />

        </LinearLayout>

        <LinearLayout
            android:id="@+id/love"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/love_iv"
                android:layout_width="@dimen/_18sdp"
                android:layout_height="@dimen/_18sdp"
                android:layout_gravity="center"
                android:src="@drawable/heart_icon_normal" />

            <TextView
                android:id="@+id/love_tv"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="@string/user_in_love"
                android:textColor="@color/colorLightGray"
                android:textSize="@dimen/_10sdp" />

            <View
                android:id="@+id/iv"
                android:layout_width="@dimen/_42sdp"
                android:layout_height="@dimen/_1sdp"
                android:layout_gravity="center"
                android:layout_marginTop="@dimen/_1sdp"
                android:background="@color/colorWhite"
                android:backgroundTint="@color/colorRed"
                android:visibility="invisible"
                tools:visibility="visible" />

        </LinearLayout>

        <View
            android:layout_width="0dp"
            android:layout_height="@dimen/_60sdp"
            android:layout_marginBottom="@dimen/_20sdp"
            android:layout_weight="1"
            android:elevation="15dp"
            android:src="@drawable/search_icon_bottom" />

        <LinearLayout
            android:id="@+id/love_coin"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/coin_iv"
                android:layout_width="@dimen/_18sdp"
                android:layout_height="@dimen/_18sdp"
                android:layout_gravity="center"
                android:src="@drawable/ilove_coin_normal" />

            <TextView
                android:id="@+id/coin_tv"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="@string/user_lov_coins"
                android:textColor="@color/colorLightGray"
                android:textSize="@dimen/_10sdp" />

            <View
                android:id="@+id/cv"
                android:layout_width="@dimen/_50sdp"
                android:layout_height="@dimen/_1sdp"
                android:layout_gravity="center"
                android:layout_marginTop="@dimen/_1sdp"
                android:background="@color/colorWhite"
                android:backgroundTint="@color/colorRed"
                android:visibility="invisible"
                tools:visibility="visible" />

        </LinearLayout>

        <LinearLayout
            android:id="@+id/pager"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/pager_iv"
                android:layout_width="@dimen/_18sdp"
                android:layout_height="@dimen/_18sdp"
                android:layout_gravity="center"
                android:src="@drawable/pager_normal" />

            <TextView
                android:id="@+id/pager_tv"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="@string/user_pay"
                android:textColor="@color/colorLightGray"
                android:textSize="@dimen/_10sdp" />

            <View
                android:id="@+id/pv"
                android:layout_width="@dimen/_40sdp"
                android:layout_height="@dimen/_1sdp"
                android:layout_gravity="center"
                android:layout_marginTop="@dimen/_1sdp"
                android:background="@color/colorWhite"
                android:backgroundTint="@color/colorRed"
                android:visibility="invisible"
                tools:visibility="visible" />

        </LinearLayout>


    </LinearLayout>

    <ImageView
        android:id="@+id/search_iv"
        android:layout_width="@dimen/_50sdp"
        android:layout_height="@dimen/_50sdp"
        android:layout_alignParentBottom="true"
        android:layout_centerInParent="true"
        android:layout_marginBottom="@dimen/_20sdp"
        android:src="@drawable/search_icon_bottom"
        app:layout_anchor="@+id/linearLayout2"
        app:layout_anchorGravity="top|center" />

</android.support.design.widget.CoordinatorLayout>

下面是java代码,这是底部导航的点击动作。与其他三项类似。

private void homeClickAction() {
    //if (!homeIsActive) {
    fragment = new HomeFragment();
    homeIV.setColorFilter(getResources().getColor(R.color.colorWhite));
    homeTV.setTextColor(getResources().getColor(R.color.colorWhite));
    loveIV.setColorFilter(null);
    loveTV.setTextColor(getResources().getColor(R.color.colorLightGray));
    coinsIV.setColorFilter(null);
    coinsTV.setTextColor(getResources().getColor(R.color.colorLightGray));
    pagerIV.setColorFilter(null);
    pagerTV.setTextColor(getResources().getColor(R.color.colorLightGray));
    v1.setVisibility(View.VISIBLE);
    v2.setVisibility(View.INVISIBLE);
    v3.setVisibility(View.INVISIBLE);
    v4.setVisibility(View.INVISIBLE);
    homeClicked = true;

}

【问题讨论】:

  • 您能否分享您的布局截图来描述问题,以及您希望它的外观。
  • 你能解释一下吗?我的意思是你的问题是什么,你希望它是什么样子。
  • @Asad Ali Choudry:我现在已经附加了布局截图。
  • @JDevoloper 底部视图与键盘一起出现。当键盘可见时,我需要阻止/隐藏底部视图。

标签: java android


【解决方案1】:

如果您希望该键盘不应该向上推底栏并且应该保留在键盘后面,那么只需在您的活动中添加这个标签

android:windowSoftInputMode="adjustNothing"

否则,您可以通过某种方式执行此操作,添加键盘可见/隐藏事件,并相应地显示/隐藏您的底栏。喜欢

mainLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        if (mainLayout != null) {
            int heightDiff = mainLayout.getRootView().getHeight() - mainLayout.getHeight();
            if (heightDiff > 200) { 
               //keyboard is open, hide layout
            } else {
               //keyboard is hidden, show layout
            }
        }
    }
});

【讨论】:

  • 是的,我也在清单中尝试了上面的代码。它的工作正是我需要的,但无法滚动(如果我有滚动视图)。
  • 然后尝试我的其他自定义解决方案,检测键盘显示/隐藏事件,并相应地显示/隐藏您的底部布局。
  • 好的,我会尝试第二个选项。你能告诉我dpToPx。我应该用什么来代替 dpToPx?
  • 不需要,我已经删除了。只是为了精确而使用,但没有它也可以工作。
  • 你也可以从这篇文章中获得帮助,stackoverflow.com/a/25681196/5701085。但我为你简化了。
猜你喜欢
  • 2019-02-22
  • 1970-01-01
  • 2018-09-27
  • 2023-03-07
  • 1970-01-01
  • 2021-03-03
  • 1970-01-01
  • 2021-04-18
  • 1970-01-01
相关资源
最近更新 更多