【问题标题】:layout reduce after opening the keyboard打开键盘后布局缩小
【发布时间】:2018-06-12 14:23:41
【问题描述】:

你好。我有一些问题。

我有一个布局,它由 EditText 和 RelativeLayout 组成,它们有一个固定的高度,以 % 为单位,还有 GridView,它位于它们之间匹配父项(匹配约束)。

一切都很好,虽然没有键盘。出现键盘时 % 不是从整个屏幕计算,而是从没有键盘的部分计算。我需要在键盘出现时改变GridView的大小,以%计算的剩余元素没有改变。

在此之前,我计算了屏幕高度的像素高度,并以编程方式设置它。但我想在布局级别做到这一点。真的是不可能做到的。

我尝试将 ConstraintLayout 与 guidline layout_constraintGuide_percent 和 PercentageRelativeLayout 一起使用,如根视图 - 无用。也改变 manifest 中的活动 windowSoftInputMode。

布局 xml

<android.support.constraint.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:context=".activity.ActivityAllApps">

<RelativeLayout
    android:id="@+id/rlTabTitleAllApps"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    app:layout_constraintBottom_toTopOf="@+id/qlTabTitle"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    tools:background="@drawable/background_action_bar9">

    <include layout="@layout/include_sortings"/>

    <Button
        android:id="@+id/bTest"
        android:layout_width="35dp"
        android:layout_height="35dp"
        android:layout_alignBottom="@+id/ibSettingsMenu"
        android:layout_marginStart="36dp"
        android:layout_toEndOf="@+id/rlSorts"
        android:onClick="onTestButton2Click"
        android:text="T"/>

    <ImageButton
        android:id="@+id/ibSettingsMenu"
        style="@style/MenuButtonSettings"
        android:layout_alignParentEnd="true"
        android:layout_centerVertical="true"
        android:onClick="onSettingsMenuClick"
        tools:background="@drawable/settings_menu_button"/>

</RelativeLayout>

<GridView
    android:id="@+id/gvAllApps"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:horizontalSpacing="2dp"
    android:numColumns="4"
    android:overScrollMode="never"
    android:padding="2dp"
    android:verticalSpacing="2dp"
    app:layout_constraintBottom_toTopOf="@+id/etSearch"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/rlTabTitleAllApps"/>

<EditText
    android:id="@+id/etSearch"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:hint="@string/search_app"
    android:textAlignment="center"
    android:textCursorDrawable="@drawable/cursor_edit_text9"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/qlSearch"
    tools:background="@drawable/search_app_background9"/>

<android.support.constraint.Guideline
    android:id="@+id/qlTabTitle"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    app:layout_constraintGuide_percent="@dimen/constraint_tab_top"/>

<android.support.constraint.Guideline
    android:id="@+id/qlSearch"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    app:layout_constraintGuide_percent="@dimen/constraint_all_search"/>

</android.support.constraint.ConstraintLayout>

对不起我的英语。

【问题讨论】:

    标签: android android-layout percentage android-constraintlayout


    【解决方案1】:

    获得所需内容的最简单方法是将页眉和页脚放在自定义视图中。在这些自定义视图中,覆盖它们的 onMeasure 以查看屏幕的大小并从中计算它们的高度。然后使用如下所示的布局:

    <RelativeLayout>
        <CustomHeaderView layout_alignParentTop="true"/>
        <FrameLayout layout_below="customHeaderView"  layout_above="customFooterView">
            //Your center here
        </FrameLayout>
        <CustomFooterView layout_alignParentBottom="true"/>
    </RelativeLayout>
    

    这将为您提供固定大小的顶部和底部,中间部分尽可能地贴合内部(我假设您在某处有一个滚动视图。

    将此与 softInputMode 调整大小一起使用。但是如果没有像这样的技巧,就没有简单的方法来获得你想要的行为,Android 本身并不支持它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-16
      • 2020-01-19
      • 2017-09-09
      • 2014-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多