Giter Club home page Giter Club logo

dsappteam / panelswitchhelper Goto Github PK

View Code? Open in Web Editor NEW
2.3K 32.0 280.0 106.39 MB

:heavy_check_mark: A framework that helps the keyboard smoothly transition to the function panel 一个帮助键盘平稳过渡到功能面板的框架,支持动画无缝衔接,支持 activity/fragment/dialog/dialogFragment/popupWindow 容器,支持IM/直播/视频播放/信息流评论等场景,支持全屏模式。

License: Apache License 2.0

Java 52.25% Kotlin 47.75%
keybord keybordview panel switch

panelswitchhelper's Introduction

Language Language Version Size

README: 中文文档

Introduction to the framework

When developing a chat/video/live/information interface, users are expected to maintain a smooth transition between the input method and the function panel (such as the expression panel/more options panel, etc.). Investigate the mainstream app effects and implementation in the market, and realize a set of input panel switching framework compatible with multiple scenes. Currently the framework has been tested and used.

Framework advantages

  • Improve the traditional technical solution of using Weight+LinearLayout to dynamically change the layout height to suit the panel, and support multiple native ViewGroup containers
  • In pursuit of a smoother adaptation effect, when the input method dynamically adjusts the height or dynamically hides the navigation bar, the function panel can be adapted in real time
  • In pursuit of a smoother switching effect, the sliding mode is supported, the sliding will be smoother, and the fixed mode is also supported
  • Rich model adaptation, adapt to non-conventional Phone models such as full screen/bang screen/digging screen/Pad
  • Rich scene support, support Activity/Fragment/Dialog/PopupWindow, apply to chat/video/live broadcast/stream comment, etc.
  • Rich API support, customizable content container, business panel, flexible control panel hiding, flexible control of switching panel speed
  • Support full screen mode, and panel switching can also be handled in FullScreen mode

For more details, please refer to

Demo content is as follows

Download from QR code

The Androidx version runs by default. If you need to open non-Androidx, open the app in Settings.gradle and close the Androidx configuration in gradle.properties.

Instructions

  1. How to

1.1 Add library dependencies in module script build.gradle

allprojects {
    repositories {
        maven { url 'https://jitpack.io' }
    }
}

1.2 Add the dependency

//1.4.0 版本及后续,仅支持 Androidx
dependencies {
    implementation 'com.github.DSAppTeam:PanelSwitchHelper:v1.5.8'
}
  1. Use the container provided by the framework in the layout file Xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

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

		 <!-- Layout that does not need to be processed by the frame, can be arranged freely -->
        <RelativeLayout
            android:id="@+id/cus_title_bar"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:background="@color/colorPrimary"
            android:visibility="gone">

            <TextView
                android:id="@+id/title"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="left|center_vertical"
                android:paddingLeft="20dp"
                android:text="自定义标题栏"
                android:textColor="@android:color/white"
                android:textSize="20sp"
                android:textStyle="bold" />
        </RelativeLayout>

        <com.effective.android.panel.view.PanelSwitchLayout
            android:id="@+id/panel_switch_layout"
            android:layout_width="match_parent"
            app:animationSpeed="standard"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <!-- ContentContainer -->
            <!-- linear_edit_view, Specify an EditText for input, required-->
            <!-- linear_auto_reset_enable,Specifies whether the LinearContentContainer can accept Touch events and automatically hide the panel-->
            <!-- linear_auto_reset_area, Specifies whether the LinearContentContainer only accepts Touch events in a View area to customize the hidden panel-->
            <com.effective.android.panel.view.content.LinearContentContainer
                android:id="@+id/content_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                app:edit_view="@id/edit_text">

                <com.example.demo.scene.chat.view.HookActionUpRecyclerView
                    android:id="@+id/recycler_view"
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"/>

                <LinearLayout
                    android:id="@+id/bottom_action"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@drawable/shape_input_layout"
                    android:gravity="bottom"
                    android:minHeight="@dimen/dp_50"
                    android:orientation="horizontal"
                    android:paddingLeft="@dimen/dp_10"
                    android:paddingRight="@dimen/dp_10"
                    android:paddingBottom="@dimen/dp_7.5">

                    <!--More entrances -->
                    <ImageView
                        android:id="@+id/add_btn"
                        android:layout_width="@dimen/dp_35"
                        android:layout_height="@dimen/dp_35"
                        android:layout_marginRight="@dimen/dp_10"
                        android:src="@drawable/icon_add" />

                    <!-- Input entrances -->
                    <EditText
                        android:id="@+id/edit_text"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_marginEnd="@dimen/dp_10"
                        android:layout_marginRight="@dimen/dp_10"
                        android:layout_weight="1"
                        android:background="@drawable/selector_edit_focus"
                        android:imeOptions="actionSearch"
                        android:maxLines="5"
                        android:minHeight="@dimen/dp_35"
                        android:paddingLeft="@dimen/dp_3"
                        android:paddingTop="@dimen/dp_7.5"
                        android:paddingRight="@dimen/dp_3"
                        android:paddingBottom="@dimen/dp_3"
                        android:textCursorDrawable="@drawable/shape_edit_cursor"
                        android:textSize="@dimen/sp_16" />

                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="@dimen/dp_35"
                        android:orientation="horizontal">

                        <!-- Emotion entrances -->
                        <ImageView
                            android:id="@+id/emotion_btn"
                            android:layout_width="@dimen/dp_35"
                            android:layout_height="@dimen/dp_35"
                            android:layout_marginEnd="@dimen/dp_10"
                            android:layout_marginRight="@dimen/dp_10"
                            android:src="@drawable/selector_emotion_btn" />

                        <TextView
                            android:id="@+id/send"
                            android:layout_width="@dimen/dp_50"
                            android:layout_height="@dimen/dp_35"
                            android:background="@drawable/selector_send_btn"
                            android:gravity="center"
                            android:text="@string/send"
                            android:textColor="@color/color_send_btn"
                            android:textSize="@dimen/sp_15" />
                    </LinearLayout>

                </LinearLayout>

            </com.effective.android.panel.view.content.LinearContentContainer>


            <!--Panel Container, can only contain PanelView-->
            <com.effective.android.panel.view.panel.PanelContainer
                android:id="@+id/panel_container"
                android:layout_width="match_parent"
                android:background="@color/common_page_bg_color"
                android:layout_height="wrap_content">

                <!-- Each panel -->
                <!-- panel_layout,Used to specify the layout corresponding to the ID of the panel, required-->
                <!-- panel_trigger, Used to switch to this panel when the user clicks the View corresponding to this ID -->
                <!-- panel_toggle ,When the panel is displayed, if the user clicks the View corresponding to panel_trigger again, whether to switch back to the input method-->
                <com.effective.android.panel.view.panel.PanelView
                    android:id="@+id/panel_emotion"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    app:panel_layout="@layout/panel_emotion_layout"
                    app:panel_trigger="@id/emotion_btn" />

                <!-- In addition to using the PanelView provided by the framework, you can also use a custom Panel -->
                <com.example.demo.scene.api.CusPanelView
                    android:id="@+id/panel_addition"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    app:cus_panel_trigger="@id/add_btn"
                    app:cus_panel_toggle="true"/>

            </com.effective.android.panel.view.panel.PanelContainer>
        </com.effective.android.panel.view.PanelSwitchLayout>

    </LinearLayout>
</layout>
  1. Initialize the PanelSwitchHelper object, and the framework will automatically collect layout information. At the same time, intercept the processing when the return key is adjusted.
	//Activity scene, initialized in onStart method, others such as Fragment/Dialog/PopupWindow refer to Demo
   private PanelSwitchHelper mHelper;

   @Override
   protected void onStart() {
        super.onStart();
        if (mHelper == null) {
            mHelper = new PanelSwitchHelper.Builder(this)
                   .addKeyboardStateListener {
                        onKeyboardChange {
                            //Optional implementation, monitor input method changes
                        }
                    }
                    .addEditTextFocusChangeListener {
                        onFocusChange { _, hasFocus ->
							 //Optional implementation, monitor input box focus changes
                        }
                    }
                    .addViewClickListener {
                        onClickBefore {
 							//Optional implementation, listen for trigger clicks
                        }
                    }
                    .addPanelChangeListener {
                        onKeyboard {
 								//Optional implementation, input method display callback
                        }
                        onNone {
 								//Optional implementation, default state callback
                        }
                        onPanel {
 								//Optional implementation, panel display callback
                        }
                        onPanelSizeChange { panelView, _, _, _, width, height ->
 								//Optional implementation, dynamic callback of panel height change caused by input method dynamic adjustment
                        }
                    }
                    .addContentScrollMeasurer { //Optional, in sliding mode, the sliding distance can be customized for the view in the content panel, the default sliding distance is defaultDistance
                        getScrollDistance { defaultDistance -> defaultDistance - 200 }
                        getScrollViewId { R.id.recycler_view }
                    }
                    .addPanelHeightMeasurer {   //Optional It is used to set the height of the front panel without obtaining the height of the input method. If it is not set, the height within the frame is the default
                        synchronizeKeyboardHeight { false } 
                        getTargetPanelDefaultHeight { DisplayUtils.dip2px(this@DefaultHeightPanelActivity,400f)}
                        getPanelTriggerId { R.id.add_btn }
                    }  
                    .logTrack(true)                   //Optional, default false, whether to enable log information output
                    .build(true)			          //Optional, default false, whether to open the input method by default
        }
    }


   @Override
   public void onBackPressed() {
   		 //When the user presses the return key, if the panel is displayed, it needs to be hidden
        if (mHelper != null && mHelper.hookSystemBackForHindPanel()) {
            return;
        }
        super.onBackPressed();
   }

Expectations

The project was written only to improve the efficiency of daily development and focus on processing business. If you have better practices or suggestions, please write to [email protected].

Or search WeChat "lym_llllll" and add WeChat for feedback.

If the framework is helpful to you, Amway can give the partners around you, and every star is an affirmation of the framework.

panelswitchhelper's People

Contributors

chihung93 avatar heroz-dodge avatar krishnakant avatar yummylau avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

panelswitchhelper's Issues

在CoordinatorLayout应该怎么使用呢?

比如说下面这种情况, 底部有一个Edittext, 中间是CoordinatorLayout

<androidx.coordinatorlayout.widget.CoordinatorLayout layout_weight=1>
<com.google.android.material.appbar.AppBarLayout>
<com.google.android.material.appbar.CollapsingToolbarLayout>
.......
</com.google.android.material.appbar.CollapsingToolbarLayout>
</<com.google.android.material.appbar.AppBarLayout>


</androidx.coordinatorlayout.widget.CoordinatorLayout>

键盘高度计算错误

机器型号 LENOVO Lenovo TB-X605F
在Pad上横屏键盘高度计算错误,竖屏下正常
2020-05-20 15:55:26.937 10345-10345 D/LogTracker: PanelUtil#setKeyBoardHeight => filter wrong data : 297 -> 792
2020-05-20 15:55:26.937 10345-10345 D/LogTracker: PanelSwitchLayout#onGlobalLayout => setKeyBoardHeight is : 792

2020-05-20 15:55:26.935 10345-10345 D/LogTracker: PanelSwitchLayout#onLayout => 刘海高度 :0
2020-05-20 15:55:26.935 10345-10345 D/LogTracker: PanelSwitchLayout#onLayout => ContentView高度 :1128
2020-05-20 15:55:26.935 10345-10345 D/LogTracker: PanelSwitchLayout#onLayout => toolbar高度 :0
2020-05-20 15:55:26.935 10345-10345 D/LogTracker: PanelSwitchLayout#onLayout => SystemUI高度 :36
2020-05-20 15:55:26.935 10345-10345 D/LogTracker: PanelSwitchLayout#onLayout => StatusBar高度 :36
2020-05-20 15:55:26.935 10345-10345 D/LogTracker: PanelSwitchLayout#onLayout => NavigationBar高度 :72
2020-05-20 15:55:26.935 10345-10345 D/LogTracker: PanelSwitchLayout#onLayout => NavigationBar是否显示 :true
2020-05-20 15:55:26.935 10345-10345 D/LogTracker: PanelSwitchLayout#onLayout => PanelSwitchLayout 绘制起点 :(0,36)
2020-05-20 15:55:26.935 10345-10345 D/LogTracker: PanelSwitchLayout#onLayout => PanelSwitchLayout paddingTop :0
2020-05-20 15:55:26.935 10345-10345 D/LogTracker: PanelSwitchLayout#onLayout => 输入法高度 :72
2020-05-20 15:55:26.935 10345-10345 D/LogTracker: PanelSwitchLayout#onLayout => 内容容器 top :-72
2020-05-20 15:55:26.935 10345-10345 D/LogTracker: PanelSwitchLayout#onLayout => 内容容器 高度 :1164
2020-05-20 15:55:26.935 10345-10345 D/LogTracker: PanelSwitchLayout#onLayout => 面板容器 top :1092
2020-05-20 15:55:26.935 10345-10345 D/LogTracker: PanelSwitchLayout#onLayout => 面板容器 高度 72
2020-05-20 15:55:26.935 10345-10345 D/LogTracker: PanelSwitchLayout#onLayout => layout参数 contentContainer : height - 1164
2020-05-20 15:55:26.935 10345-10345 D/LogTracker: PanelSwitchLayout#onLayout => layout参数 contentContainer : l : 0 t : -72 r : 1920 b : 1092
2020-05-20 15:55:26.935 10345-10345 D/LogTracker: PanelSwitchLayout#onLayout => layout参数 panelContainerTop : height - 72
2020-05-20 15:55:26.935 10345-10345 D/LogTracker: PanelSwitchLayout#onLayout => layout参数 panelContainer : l : 0 : 1092 r : 1920 b : 1164

panelView设置panel_trigger的viewID在另一个pannelView的布局里面,导致第一个panelView无法切换!

        <com.effective.android.panel.view.PanelContainer
            android:id="@+id/panel_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <com.effective.android.panel.view.PanelView
                android:id="@+id/panel_useful_words"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:panel_layout="@layout/pannel_chat_useful_words_layout"
                app:panel_toggle="true"
                app:panel_trigger="@id/tv_useful_words" />

            <com.effective.android.panel.view.PanelView
                android:id="@+id/panel_edit_words"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:panel_layout="@layout/panel__app_chat_edit_words_layout"
                app:panel_toggle="true"
                app:panel_trigger="@id/tv_add" />
        </com.effective.android.panel.view.PanelContainer>

代码如上图所示,第二个PanelView中的tv_add的view是在第一个pannelView中的布局文件layout/pannel_chat_useful_words_layout中。

Fragment中键盘弹出输入框位置不正确

`


<com.effective.android.panel.view.PanelSwitchLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/panel_switch_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<com.effective.android.panel.view.ContentContainer
    android:id="@+id/content_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:empty_view="@id/empty_view"
    app:edit_view="@id/message_input_et">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/message_rv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></androidx.recyclerview.widget.RecyclerView>


        <com.effective.android.panel.view.EmptyView
            android:id="@+id/empty_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </FrameLayout>

    <LinearLayout
        android:id="@+id/message_bottom_ll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="50dp"
        android:layout_gravity="bottom">

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@drawable/message_input_bg"
            android:orientation="horizontal">

            <EditText
                android:id="@+id/message_input_et"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:background="@null"
                android:textSize="10sp"></EditText>

        </LinearLayout>

        <TextView
            android:id="@+id/send_tv"
            android:layout_width="50dp"
            android:layout_height="match_parent"
            android:layout_marginLeft="8dp"
            android:background="@drawable/message_send_bg"
            android:gravity="center"
            android:text="发送"
            android:textColor="@color/white"
            android:textSize="12sp"></TextView>
    </LinearLayout>

</com.effective.android.panel.view.ContentContainer>

<com.effective.android.panel.view.PanelContainer
    android:id="@+id/panel_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">


</com.effective.android.panel.view.PanelContainer>

</com.effective.android.panel.view.PanelSwitchLayout>

`
image
image

手机品牌:一加6T
系统:Android 10.0

请问下在Fragment中使用的时候键盘弹出会导致输入框往上多顶一些距离,没有办法像demo中展示的一样呢。请问是什么原因呢?

dialogFragment高度变化,布局会错乱是怎么回事

具体表现为布局增加内容后,按理说高度会变化,但实际上高度不变,并且布局最下方的内容有一部分不可见,就是新增加的内容将已有内容挤下去了,高度不变。该问题出现在打开了表情面板之后,若从未打开面板不会出现这个问题。
布局中有一个recyclerview(横向),recyclerview初始没有高度,添加item后,整个dialog高度不变,但下方内容(表情按钮等)被挤掉

适配问题

不知道大佬有没有做适配,
场景1: 开始没有显示过软键盘:下面输入框显示不全,有一点被遮住了,如果有虚拟按键,虚拟按键就会遮挡输入框
场景2:显示软键盘:输入框距离下面有一段空白距离,如果有虚拟按键,虚拟按键和输入框有一段距离

键盘隐藏消失切换时 聊天列表闪烁 内容错位

机型 xiaomi note7 pro
版本1.2.3

PanelSwitchHelper.Builder(this)
.logTrack(false)
.contentCanScrollOutside(false)

为了聊天列表不向上移动导致title消失,设置了contentCanScrollOutside = false,但是出现了
键盘隐藏消失切换时 聊天列表闪烁 内容错误的bug

收起软键盘后,列表无法滑动

收起软键盘,第一次滑动列表,列表无法滑动,事件被某个empty_view吃掉了?松开手指,再进行滑动才能触发聊天列表滑动

无法布局预览

PanelSwitchLayout 中 deviceRuntime 由 PanelSwitchHelper 初始化。 xml 预览时没有初始化报错

kotlin.UninitializedPropertyAccessException: lateinit property deviceRuntime has not been initialized   
at 
com.effective.android.panel.view.PanelSwitchLayout.onLayout_Original(PanelSwitchLayout.kt:295)

提俩小建议

  1. 默认的panel高度可给高一点尽量接近键盘的高度,按目前的默认高度,我首次展开panel,如果是表情面板的话,就会被压缩的很惨,显示效果很差。我看现在给的默认高度是198dp,在我的手机上这样的高度是远远不够的,目前我设置的是2/5屏幕高度,感觉还可以。

  2. 在从panel面板切换到键盘的时候,面板的消失速度可以稍微延迟一点,比如300ms,而不是点击按钮就立刻消失,然后键盘再弹上来。这样会有一个键盘上来盖在panel上的效果,视觉效果更好一点。

DialogFragment出错

是不支持dialogfragment么

java.lang.IllegalArgumentException: PanelSwitchHelper$Builder#build : not found PanelSwitchLayout by id(2131230921)
at com.effective.android.panel.PanelSwitchHelper$Builder.build(PanelSwitchHelper.java:599)
at com.effective.android.panel.PanelSwitchHelper$Builder.build(PanelSwitchHelper.java:621)

会把整个布局全部抬起。。。我是希望上面的toolbar不抬起,不知道是我自己设置的问题还是框架的问题,

<tracyeminem.com.peipei.ui.chat.JChat.ChatView 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:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
android:id="@+id/chat_view"
android:fitsSystemWindows="true"
android:background="@drawable/theme_backgrand"
tools:context=".ui.chat.ChattingActivity">

<androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

<include layout="@layout/item_toolbar"
        android:id="@+id/toolbar"
        />

<ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/icon_more"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="@id/toolbar"
        app:layout_constraintBottom_toBottomOf="@id/toolbar"
        android:layout_marginRight="@dimen/margin"
        android:id="@+id/iv_more"
        />


<com.effective.android.panel.view.PanelSwitchLayout
        android:id="@+id/panel_switch_layout"
        android:layout_width="match_parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_height="0dp"
        android:orientation="vertical"
        app:layout_constraintTop_toBottomOf="@id/toolbar"

        >

    <com.effective.android.panel.view.ContentContainer
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="vertical"
            app:empty_view="@id/empty_view"
            app:edit_view="@id/et_message"
            android:id="@+id/content_view"
            >

        <androidx.constraintlayout.widget.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                >

            <tracyeminem.com.peipei.ui.chat.JChat.DropDownListView
                    android:id="@+id/lv_chat"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:cacheColorHint="#00000000"
                    android:divider="@null"
                    android:fadingEdge="none"
                    android:fitsSystemWindows="true"
                    android:listSelector="#00000000"
                    android:scrollbarStyle="outsideOverlay"
                    android:scrollingCache="false"
                    android:smoothScrollbar="true"
                    android:transcriptMode="normal"/>
            <com.effective.android.panel.view.EmptyView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:id="@+id/empty_view"
                    />

            <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:background="@drawable/icon_gift"
                    app:layout_constraintRight_toRightOf="parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    android:layout_margin="@dimen/margin"
                    android:id="@+id/iv_gift"
                    />

        </androidx.constraintlayout.widget.ConstraintLayout>


        <androidx.constraintlayout.widget.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:minHeight="44dp"
                android:gravity="bottom"
                >
            <View
                    android:layout_width="match_parent"
                    android:layout_height="1dp"
                    app:layout_constraintLeft_toLeftOf="parent"
                    app:layout_constraintRight_toRightOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    android:background="@color/fifty_percent_white"
                    android:id="@+id/v_line"
                    />

            <ImageView
                    android:layout_width="23dp"
                    android:layout_height="23dp"
                    app:layout_constraintRight_toRightOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    android:id="@+id/iv_func"
                    android:layout_marginRight="@dimen/margin"
                    android:background="@drawable/icon_keyboard_add"
                    />

            <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="@color/white"
                    android:textSize="@dimen/little_text"
                    android:text="发送"
                    android:id="@+id/tv_send"
                    app:layout_constraintRight_toRightOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    android:layout_marginRight="10dp"
                    android:background="@drawable/shape_20white_rectangle_background"
                    android:paddingLeft="5dp"
                    android:paddingRight="5dp"
                    android:paddingTop="5dp"
                    android:paddingBottom="5dp"
                    android:gravity="center"
                    android:visibility="invisible"
                    />

            <ImageView
                    android:layout_width="23dp"
                    android:layout_height="23dp"
                    app:layout_constraintRight_toLeftOf="@id/iv_func"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    android:layout_marginRight="12dp"
                    android:id="@+id/iv_voice"
                    android:background="@drawable/icon_keyboard_voice"
                    />

            <ImageView
                    android:layout_width="23dp"
                    android:layout_height="23dp"
                    app:layout_constraintRight_toLeftOf="@id/iv_func"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    android:layout_marginRight="12dp"
                    android:id="@+id/iv_keyboard"
                    android:visibility="invisible"
                    android:background="@drawable/icon_keyboard"
                    />


            <tracyeminem.com.peipei.ui.chat.JChat.RecordVoiceButton
                    android:layout_width="0dp"
                    android:layout_height="0dp"
                    app:layout_constraintLeft_toLeftOf="parent"
                    app:layout_constraintRight_toLeftOf="@id/iv_keyboard"
                    android:layout_marginRight="11dp"
                    android:layout_marginLeft="@dimen/margin"
                    android:background="@drawable/shape_20white_rectangle_background"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintBottom_toBottomOf="parent"
                    android:layout_marginTop="7dp"
                    android:layout_marginBottom="7dp"
                    android:textColor="@color/white"
                    android:textSize="@dimen/little_text"
                    android:text="按住发语音"
                    android:id="@+id/tv_send_voice"
                    android:gravity="center"
                    android:visibility="invisible"
                    />

            <EditText
                    android:id="@+id/et_message"
                    android:layout_width="0dp"
                    android:layout_height="40dp"
                    android:layout_marginLeft="@dimen/margin"
                    android:layout_marginTop="7dp"
                    android:layout_marginRight="11dp"
                    android:paddingBottom="10dp"
                    android:background="@null"
                    android:hint="发消息"
                    android:maxLines="4"
                    android:minHeight="35dp"
                    android:textColor="@color/fifty_percent_white"
                    android:textColorHint="@color/fifty_percent_white"
                    android:textSize="@dimen/little_text"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintHorizontal_bias="0.0"
                    app:layout_constraintLeft_toLeftOf="parent"
                    app:layout_constraintRight_toLeftOf="@id/iv_keyboard"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintVertical_bias="0.0" />


        </androidx.constraintlayout.widget.ConstraintLayout>


    </com.effective.android.panel.view.ContentContainer>

    <!-- 面板区域,仅能包含PanelView-->
    <com.effective.android.panel.view.PanelContainer
            android:id="@+id/panel_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

        <!-- 每一项面板 -->
        <!-- panel_layout 用于指定面板该 ID 对应的布局 ,必须项-->
        <!-- panel_trigger 用于用户点击该 ID 对应的 View 时切换到该面板 -->
        <!-- panel_toggle  用于当该面板显示时 ,用户再次点击 panel_trigger 对应的 View 时是否回切输入法-->
        <!--            <com.effective.android.panel.view.PanelView-->
        <!--                    android:id="@+id/panel_emotion"-->
        <!--                    android:layout_width="match_parent"-->
        <!--                    android:layout_height="match_parent"-->
        <!--                    app:panel_layout="@layout/panel_emotion_layout"-->
        <!--                    app:panel_trigger="@id/emotion_btn" />-->

        <com.effective.android.panel.view.PanelView
                android:id="@+id/panel_addition"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:panel_layout="@layout/view_keyboard_funclayout"
                app:panel_trigger="@id/iv_func" />

    </com.effective.android.panel.view.PanelContainer>
</com.effective.android.panel.view.PanelSwitchLayout>




</androidx.constraintlayout.widget.ConstraintLayout>

</tracyeminem.com.peipei.ui.chat.JChat.ChatView>

AndroidX oppo FindX 不显示面板

2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => onLayout(changed : false , l : 0 , t : 127 , r : 1080 , b : 2244) ===================&&&&=================
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => 切换模式 :固定模式
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => 当前状态 :显示面板输入
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => 是否是全屏 :false
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => 是否是pad机型 :false
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => 是否显示导航栏 :false
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => 是否是竖屏 :true
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => 界面高度(包含系统UI) :2340
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => 界面高度(不包含系统UI,无论导航栏显示与否) :2340
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => 界面高度(不包含系统UI,动态计算) :2244
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => 刘海高度 : + 0
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => toolbar高度 :0
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => StatusBar高度 :92
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => NavigationBar高度 :127
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => PanelSwitchLayout 绘制起点 :(0,223)
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => PanelSwitchLayout paddingTop :0
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => 输入法高度 :4
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => 内容容器 top :0
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => 内容容器 高度 :2113
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => 面板容器 top :2113
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => 面板容器 高度 4
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => layout参数 contentContainer : height - 2113
2020-06-11 18:30:36.861 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => layout参数 contentContainer : l : 0 t : 0 r : 1080 b : 2113
2020-06-11 18:30:36.862 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => layout参数 panelContainerTop : height - 4
2020-06-11 18:30:36.862 4292-4292/com.hxz.shoes.android D/LogTracker: PanelSwitchLayout#onLayout => layout参数 panelContainer : l : 0 : 2113 r : 1080 b : 2117
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: java.lang.ClassNotFoundException: Didn't find class "com.huawei.android.util.HwNotchSizeUtil" on path: DexPathList[[zip file "/data/app/com.hxz.shoes.android-t0k9TBsWhnZjc_R3Pnxyqw==/base.apk"],nativeLibraryDirectories=[/data/app/com.hxz.shoes.android-t0k9TBsWhnZjc_R3Pnxyqw==/lib/arm, /data/app/com.hxz.shoes.android-t0k9TBsWhnZjc_R3Pnxyqw==/base.apk!/lib/armeabi-v7a, /system/lib, /system/product/lib]]
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at com.effective.android.panel.utils.cutShort.HuaweiCutShort.hasCutShort(HuaweiCutShort.kt:18)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at com.effective.android.panel.utils.CusShortUtil.getDeviceCutShortHeight(CusShortUtil.kt:24)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at com.effective.android.panel.device.DeviceRuntime.getDeviceInfoByOrientation(DeviceRuntime.kt:45)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at com.effective.android.panel.device.DeviceRuntime.getDeviceInfoByOrientation$default(DeviceRuntime.kt:30)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at com.effective.android.panel.view.PanelSwitchLayout.onLayout(PanelSwitchLayout.kt:295)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.View.layout(View.java:22189)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:6368)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1845)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.View.layout(View.java:22189)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:6368)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1103)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.View.layout(View.java:22189)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:6368)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1845)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.View.layout(View.java:22189)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:6368)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.View.layout(View.java:22189)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:6368)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1845)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.View.layout(View.java:22189)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:6368)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.View.layout(View.java:22189)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:6368)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1845)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.View.layout(View.java:22189)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:6368)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at com.android.internal.policy.DecorView.onLayout(DecorView.java:843)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.View.layout(View.java:22189)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:6368)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3471)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2891)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1996)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8231)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1086)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.Choreographer.doCallbacks(Choreographer.java:909)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.Choreographer.doFrame(Choreographer.java:836)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1071)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.os.Handler.handleCallback(Handler.java:883)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.os.Handler.dispatchMessage(Handler.java:100)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.os.Looper.loop(Looper.java:227)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at android.app.ActivityThread.main(ActivityThread.java:7799)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at java.lang.reflect.Method.invoke(Native Method)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
2020-06-11 18:30:36.864 4292-4292/com.hxz.shoes.android W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:970)
2020-06-11 18:30:36.865 4292-4292/com.hxz.shoes.android W/System.err: java.lang.ClassNotFoundException: Didn't find class "android.util.FtFeature" on path: DexPathList[[zip file "/data/app/com.hxz.shoes.android-t0k9TBsWhnZjc_R3Pnxyqw==/base.apk"],nativeLibraryDirectories=[/data/app/com.hxz.shoes.android-t0k9TBsWhnZjc_R3Pnxyqw==/lib/arm, /data/app/com.hxz.shoes.android-t0k9TBsWhnZjc_R3Pnxyqw==/base.apk!/lib/armeabi-v7a, /system/lib, /system/product/lib]]
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at com.effective.android.panel.utils.cutShort.ViVoCutShort.hasCutShort(ViVoCutShort.kt:27)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at com.effective.android.panel.utils.CusShortUtil.getDeviceCutShortHeight(CusShortUtil.kt:30)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at com.effective.android.panel.device.DeviceRuntime.getDeviceInfoByOrientation(DeviceRuntime.kt:45)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at com.effective.android.panel.device.DeviceRuntime.getDeviceInfoByOrientation$default(DeviceRuntime.kt:30)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at com.effective.android.panel.view.PanelSwitchLayout.onLayout(PanelSwitchLayout.kt:295)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.View.layout(View.java:22189)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:6368)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1845)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.View.layout(View.java:22189)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:6368)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1103)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.View.layout(View.java:22189)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:6368)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1845)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.View.layout(View.java:22189)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:6368)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.View.layout(View.java:22189)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:6368)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1845)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.View.layout(View.java:22189)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:6368)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.View.layout(View.java:22189)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:6368)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1845)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.View.layout(View.java:22189)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:6368)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at com.android.internal.policy.DecorView.onLayout(DecorView.java:843)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.View.layout(View.java:22189)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewGroup.layout(ViewGroup.java:6368)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3471)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2891)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1996)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8231)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1086)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.Choreographer.doCallbacks(Choreographer.java:909)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.Choreographer.doFrame(Choreographer.java:836)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1071)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.os.Handler.handleCallback(Handler.java:883)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.os.Handler.dispatchMessage(Handler.java:100)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.os.Looper.loop(Looper.java:227)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at android.app.ActivityThread.main(ActivityThread.java:7799)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at java.lang.reflect.Method.invoke(Native Method)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
2020-06-11 18:30:36.866 4292-4292/com.hxz.shoes.android W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:970)

去了recycler_view 项目就不能运行

<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" /> 这个视图换成其他的就报错

empty_view设置可见时,首次进入列表无法滑动

1、empty_view设置可见时,首次进入列表无法滑动
2、软键盘出现时,滑动聊天列表,这个时候事件被empty_view吃掉了,没法滑动,离开屏幕,软键盘收起来。体验有点不舒服。微信体验是:软键盘出现时,不影响列表滑动,列表滑动自动收起软键盘。

能否提供一个收起面板和软键盘的方法...

不会用啊

一定要用dataBinding吗?还有PanelSwitchLayout只能这么布局,不能改?感觉限定的太死了,onStart里面一定要传入这几个布局

=> 提 Issues 前阅读须知 <= (功能讨论前往隔壁 Discussions)

针对 API 的使用疑惑统一使用以下模版:

  • 场景: 比如 “在直播间使用评论功能”,必要时可提供贴图等
  • 问题: 比如 “如何使用xxxx/ 为什么xxxx / 等等”,必要时可提供代码等
  • 期望: 比如 “希望能够能后像抖音一样的场景”,必要时可提供贴图等

针对 Bug 的反馈:

  • Androidx版本:是/否
  • PanelSwitchHelper版本:v1.3.2
  • 手机型号: 小米5x
  • 手机系统版本: Android 5.0
  • 问题描述:比如 “在xxx场景下输入法无法顶起底部布局”,必要时可提供代码,贴图等。
  • Log提供:过滤 PanelSwitchLayout,提供异常场景下的 log 信息

由于机型反馈的问题很多都是机型兼容/开发者API使用不当导致的,定位问题比较难。
希望反馈者能针对上述要求提供对应信息,否则很难帮助您定位到具体问题,望理解。

update 2022/01/19 :
大家的问题反馈多数是文字表达,框架接入业务之后出现的缺陷希望能够附带缺陷场景视频及业务实现逻辑,以方便协助定位问题。

几个问题请大佬帮忙看下

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1">
                <com.example.demo.chat.CusRecyclerView
                    android:id="@+id/recycler_view"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"/>
            </FrameLayout>

1.demo 里面CusRecyclerView 外层如果被个frameLayout包裹后 设置contentCanScrollOutside(false) 列表就撑不上不去了

  1. 还有个就是insert新消息的时候效果不同步,就如新增的item覆盖在上一条消息上,然后上一条消息在往上移,具体情况请用frameLayout包裹CusRecyclerView 然后设置contentCanScrollOutside(true) 看看

感谢大佬!

内容已经不放在PanelSwitchLayout内了,但是键盘上移的时候,还是挤压

是tablayout+viewpage的使用

fragment的
布局大致是这样

<TextView
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_centerVertical="true"
    android:gravity="center"
    android:text="测试挤压" />


<com.effective.android.panel.view.PanelSwitchLayout
    android:id="@+id/panel_switch_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:animationSpeed="standard">

在代码里面设置了contentCanScrollOutside
因为希望在收到礼物的时候,礼物是固定不动的,键盘可以盖上去

你好,我是在viewpage中的fragment使用,布局被顶上去

activity有一块是要固定的 activity的布局是 固定高度的约束ConstraintLayout+viewpage(多个fragment)

需要输入的fragment内容布局是recyclerview,但是键盘升起来的时候recyclerview全部被顶上去了,会被activity的布局盖住一部分

Mi 9 SE 水滴屏手机不兼容

微信图片_20200327185258
怀疑
int screenWithoutNavigationIHeight = PanelHelper.getScreenHeightWithoutNavigationBar(getContext()); 获取的高度在Mi 9 SE上,不包括状态栏高度,造成
int[] localLocation = PanelHelper.getLocationOnScreen(this);
allHeight -= localLocation[1]; 这里又减去一次状态栏高度。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.