Bottom Navigation bar moves up with keyboard(底部导航栏使用键盘向上移动)
本文介绍了底部导航栏使用键盘向上移动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在片段中使用滚动视图,但当键盘按应有的方式显示时,屏幕不会向上滚动。 以下是场景: 我有mainActivity,它有底部导航栏,外加一个框架布局,作为活动的容器。 代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".MainActivity"
>
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true" />
<android.support.design.widget.BottomNavigationView
android:background="@color/clear_white"
android:id="@+id/navigation"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_alignParentBottom="true"
app:itemIconTint="@color/blue_navbar_icon"
app:itemTextColor="@color/blue_navbar_icon"
app:menu="@menu/navigation" />
</RelativeLayout>
片段屏幕有一些输入字段和按钮,这些输入字段和按钮包装在受限布局中,然后在scllView中包装约束布局,以便在键盘处于活动状态时可以向上滚动。 以下是片段XML文件的代码:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<include
android:id="@+id/app_bar_new"
layout="@layout/app_bar_new"
app:layout_constraintBottom_toTopOf="@+id/btn_get_location"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn_get_location"
style="@style/btn_style"
android:layout_width="match_parent"
android:layout_height="43dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="11dp"
android:layout_marginLeft="11dp"
android:layout_marginRight="11dp"
android:layout_marginStart="11dp"
android:layout_marginTop="12dp"
android:text="@string/get_location_btn_str"
app:layout_constraintBottom_toTopOf="@+id/tv_long"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/app_bar_new" />
<EditText
android:id="@+id/et_name_of_attr"
style="@style/input_field_style"
android:layout_width="0dp"
android:layout_height="47dp"
android:layout_marginBottom="7dp"
android:layout_marginEnd="11dp"
android:layout_marginLeft="11dp"
android:layout_marginRight="11dp"
android:layout_marginStart="11dp"
android:layout_marginTop="7dp"
android:background="@drawable/input_field_design"
android:ems="10"
android:hint="@string/loc_name"
android:inputType="textPersonName"
app:layout_constraintBottom_toTopOf="@+id/et_description"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_long" />
<Button
android:id="@+id/btn_save"
style="@style/btn_style"
android:layout_width="90dp"
android:layout_height="42dp"
android:layout_marginBottom="25dp"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="7dp"
android:padding="10dp"
android:text="@string/btn_save"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/rg_access" />
<EditText
android:id="@+id/et_cam_img_title"
style="@style/input_field_style"
android:layout_width="0dp"
android:layout_height="47dp"
android:layout_marginBottom="7dp"
android:layout_marginEnd="11dp"
android:layout_marginLeft="11dp"
android:layout_marginRight="11dp"
android:layout_marginStart="11dp"
android:layout_marginTop="7dp"
android:ems="10"
android:hint="@string/loc_img_title"
android:inputType="textMultiLine"
app:layout_constraintBottom_toTopOf="@+id/additional_imgs"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_description" />
<EditText
android:id="@+id/et_description"
style="@style/input_field_style"
android:layout_width="0dp"
android:layout_height="47dp"
android:layout_marginBottom="7dp"
android:layout_marginEnd="11dp"
android:layout_marginLeft="11dp"
android:layout_marginRight="11dp"
android:layout_marginStart="11dp"
android:layout_marginTop="7dp"
android:ems="10"
android:hint="@string/loc_desc"
android:inputType="textMultiLine"
app:layout_constraintBottom_toTopOf="@+id/et_cam_img_title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_name_of_attr" />
<TextView
android:id="@+id/tv_long"
android:layout_width="170dp"
android:layout_height="35dp"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
android:background="@drawable/long_lat_bg"
android:ems="10"
android:inputType="numberDecimal"
android:padding="5dp"
android:text="@string/loc_long"
app:layout_constraintBottom_toTopOf="@+id/location_name_text"
app:layout_constraintEnd_toStartOf="@+id/tv_lat"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btn_get_location" />
<TextView
android:id="@+id/tv_lat"
android:layout_width="170dp"
android:layout_height="35dp"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
android:background="@drawable/long_lat_bg"
android:ems="10"
android:inputType="textPersonName"
android:padding="5dp"
android:text="@string/loc_lat"
app:layout_constraintBottom_toTopOf="@+id/location_name_text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/tv_long"
app:layout_constraintTop_toBottomOf="@+id/btn_get_location" />
<RelativeLayout
android:id="@+id/additional_imgs"
style="@style/input_field_style"
android:layout_width="0dp"
android:layout_height="47dp"
android:layout_marginBottom="7dp"
android:layout_marginEnd="11dp"
android:layout_marginLeft="11dp"
android:layout_marginRight="11dp"
android:layout_marginStart="11dp"
android:layout_marginTop="7dp"
android:orientation="horizontal"
app:layout_constraintBottom_toTopOf="@+id/relativeLayout2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_cam_img_title">
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_marginStart="13dp"
android:layout_weight="1"
android:text="@string/loc_additional_imgs"
android:layout_alignParentLeft="true"
android:layout_marginLeft="13dp" />
<ImageView
android:id="@+id/btn_add_imgs"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:src="QGRyYXdhYmxlL2ljX2FjdGlvbl9hZGRfYmx1ZQ==" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/relativeLayout2"
style="@style/input_field_style"
android:layout_width="0dp"
android:layout_height="47dp"
android:layout_marginBottom="7dp"
android:layout_marginEnd="11dp"
android:layout_marginLeft="11dp"
android:layout_marginRight="11dp"
android:layout_marginStart="11dp"
android:layout_marginTop="7dp"
android:orientation="horizontal"
app:layout_constraintBottom_toTopOf="@+id/rg_access"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/additional_imgs">
<ImageView
android:id="@+id/icon_drop_down_img"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:src="QGRyYXdhYmxlL2ljX2Ryb3BfZG93bg==" />
<Spinner
android:id="@+id/spin_classification"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent" />
</RelativeLayout>
<TextView
android:textSize="16sp"
android:textColor="@color/blue"
android:id="@+id/tv_desc_access"
android:layout_width="wrap_content"
android:layout_height="32dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_marginBottom="7dp"
android:layout_marginEnd="8dp"
android:layout_marginLeft="11dp"
android:layout_marginRight="8dp"
android:layout_marginStart="11dp"
android:layout_marginTop="7dp"
android:text="@string/loc_acess"
app:layout_constraintBottom_toTopOf="@+id/btn_save"
app:layout_constraintEnd_toStartOf="@+id/rg_access"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/relativeLayout2" />
<RadioGroup
android:id="@+id/rg_access"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="7dp"
android:layout_marginEnd="21dp"
android:layout_marginRight="21dp"
android:layout_marginTop="7dp"
android:gravity="center"
android:orientation="horizontal"
app:layout_constraintBottom_toTopOf="@+id/btn_save"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/relativeLayout2">
<RadioButton
android:id="@+id/rb_car"
android:background="@drawable/rb_car"
android:button="@android:color/transparent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" />
<RadioButton
android:id="@+id/rb_jeep"
android:background="@drawable/rb_jeep"
android:button="@android:color/transparent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" />
<RadioButton
android:id="@+id/rb_track"
android:background="@drawable/rb_hike"
android:button="@android:color/transparent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="10dp"/>
</RadioGroup>
</android.support.constraint.ConstraintLayout>
</ScrollView>
这里还有我的清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.eapple.tripdatacollection">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".Main2Activity"
android:windowSoftInputMode="adjustResize"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ViewSavedLocations" />
<activity android:name=".fireBaseUpdates" />
<activity android:name=".SignInActivity" />
<activity android:name=".ForgotPasswordActivity" />
<activity android:name=".UploadDataActivity" />
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main2" />
</application>
</manifest>
但它不能按预期方式工作。 1)底部导航栏随键盘弹出,如下图所示:Screenshot
我希望底部导航栏保持在底部,或者在键盘处于活动状态时消失。
推荐答案
解决方案如下,我使用此接口解决问题:https://github.com/yshrsmz/KeyboardVisibilityEvent。
步骤:
1)在androidManifest文件中:
Add the following tag: android:windowSoftInputMode="adjustResize"
就像我在这里做的:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.eapple.tripdatacollection">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".Main2Activity"
android:windowSoftInputMode="adjustResize"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ViewSavedLocations" />
<activity android:name=".fireBaseUpdates" />
<activity android:name=".SignInActivity" />
<activity android:name=".ForgotPasswordActivity" />
<activity android:name=".UploadDataActivity" />
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main2" />
</application>
</manifest>
2)在build.grade文件(App)中添加以下依赖项
依赖项{ 实施‘net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:2.1.0’ )
3)将以下代码添加到Activity onCreate方法中:
KeyboardVisibilityEvent.setEventListener(
getActivity(),
new KeyboardVisibilityEventListener() {
@Override
public void onVisibilityChanged(boolean isOpen) {
// some code depending on keyboard visiblity status
}
});
这是我的Java文件:
package com.example.eapple.tripdatacollection;
import android.annotation.SuppressLint;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import net.yslibrary.android.keyboardvisibilityevent.KeyboardVisibilityEvent;
import net.yslibrary.android.keyboardvisibilityevent.KeyboardVisibilityEventListener;
public class Main2Activity extends AppCompatActivity {
private static AddLocationFragment addLocationFragment;
private static ProfileFragment profileFragment;
private static SavedLocationsFragment savedLocationsFragment;
private View rootView;
private final String TAG = "Main2Activity";
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_profile:
loadFragment(profileFragment);
return true;
case R.id.navigation_saved_locations:
loadFragment(savedLocationsFragment);
return true;
case R.id.navigation_add_location:
loadFragment(addLocationFragment);
return true;
}
return false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
addLocationFragment = new AddLocationFragment();
savedLocationsFragment = new SavedLocationsFragment();
profileFragment = new ProfileFragment();
rootView = findViewById(R.id.root_view);
final BottomNavigationView navigation = findViewById(R.id.navBar);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
navigation.setSelectedItemId(R.id.navigation_add_location);
loadFragment(addLocationFragment);
KeyboardVisibilityEvent.setEventListener(
this,
new KeyboardVisibilityEventListener() {
@Override
public void onVisibilityChanged(boolean isOpen) {
Log.d(TAG,"onVisibilityChanged: Keyboard visibility changed");
if(isOpen){
Log.d(TAG, "onVisibilityChanged: Keyboard is open");
navigation.setVisibility(View.INVISIBLE);
Log.d(TAG, "onVisibilityChanged: NavBar got Invisible");
}else{
Log.d(TAG, "onVisibilityChanged: Keyboard is closed");
navigation.setVisibility(View.VISIBLE);
Log.d(TAG, "onVisibilityChanged: NavBar got Visible");
}
}
});
}
private void loadFragment(android.support.v4.app.Fragment fragment) {
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
}
这篇关于底部导航栏使用键盘向上移动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:底部导航栏使用键盘向上移动
猜你喜欢
- MalformedJsonException:在第1行第1列路径中使用JsonReader.setLenient(True)接受格式错误的JSON 2022-01-01
- 如何检查发送到 Android 应用程序的 Firebase 消息的传递状态? 2022-01-01
- 在测试浓缩咖啡时,Android设备不会在屏幕上启动活动 2022-01-01
- android 4中的android RadioButton问题 2022-01-01
- 用 Swift 实现 UITextFieldDelegate 2022-01-01
- Android - 拆分 Drawable 2022-01-01
- 使用自定义动画时在 iOS9 上忽略 edgesForExtendedLayout 2022-01-01
- 想使用ViewPager,无法识别android.support.*? 2022-01-01
- Android - 我如何找出用户有多少未读电子邮件? 2022-01-01
- Android viewpager检测滑动超出范围 2022-01-01