底视图在屏幕外,我该如何解决

时间:2019-10-31 04:37:50

标签: android xml android-studio android-layout kotlin

我当前正在构建一个聊天室布局,该布局在android studio上可以正确显示,但是在实际设备上运行时看起来却有所不同。关于如何解决屏幕外问题的任何建议?

当前将constraintlayout用于聊天室布局,尝试使用relativelayout,问题仍然存在。

这是聊天室的xml布局:

input_list

这是布局的屏幕截图:

Layout in Android Studio preview

Layout running in real devices

/ **更新** / 但是当键盘抬起并且输入后我将注意力集中在键盘上时,布局再次恢复正常

4 个答案:

答案 0 :(得分:1)

嗯...我自己运行此xml,在预览,仿真器和真实设备上看起来都不错,但是我想您是否将此布局用作片段或其他包含布局android:fitsSystemWindows="true"可能会导致这样的问题。

答案 1 :(得分:0)

我使用了RelativeLayout,并将EditTextButton放在了一个RelativeLayout中。然后将它们对齐到其父布局的底部。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:layout_height="match_parent">


    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:menu="@menu/menu_private_chat"
        app:navigationIcon="@drawable/ic_arrow_back_white_24dp"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/messages"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/text_input_wrapper"
        android:layout_below="@+id/toolbar"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        tools:listitem="@layout/animal_list_item" />

    <RelativeLayout
        android:id="@+id/text_input_wrapper"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true">

        <EditText
            android:id="@+id/enter_messages"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginBottom="8dp"
            android:layout_centerVertical="true" />

        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignEnd="@+id/enter_messages"
            android:layout_marginLeft="8dp"
            android:text="Send"
            android:layout_centerVertical="true" />
    </RelativeLayout>


</RelativeLayout>

答案 2 :(得分:0)

尝试删除偏见

<androidx.constraintlayout.widget.ConstraintLayout 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:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:ignote="MergeRootFrame">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:menu="@menu/menu_private_chat"
        app:navigationIcon="@drawable/ic_arrow_back_white_24dp"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/messages"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toTopOf="@+id/enter_messages"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/toolbar"
        tools:listitem="@layout/animal_list_item" />

    <EditText
        android:id="@+id/enter_messages"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/button"
        app:layout_constraintStart_toEndOf="@id/messages"
        app:layout_constraintStart_toStartOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:text="Send"
        app:layout_constraintBottom_toBottomOf="@+id/enter_messages"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/enter_messages"
        app:layout_constraintTop_toTopOf="@id/enter_messages" />


</androidx.constraintlayout.widget.ConstraintLayout>

答案 3 :(得分:0)

代替使用ConstraintLayout,而是使用RelativeLayout,如下所示:-

<RelativeLayout 
  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">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:ignote="MergeRootFrame">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

     <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/messages"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        />

     <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="@dimen/dp_22">
     <EditText
        android:id="@+id/enter_messages"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/button"
        android:layout_toStartOf="@+id/button" />

     <Button
        android:layout_alignParentRight="true"
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:text="Send"
        android:layout_marginRight="8dp"
        android:layout_alignParentEnd="true" />

     </RelativeLayout>
 </RelativeLayout>


</layout>

使用RelativeLayout在底部固定EditText和Button来尝试这种方法。

enter image description here