根据键盘高度使用偏移移动视图[约束布局]

时间:2018-05-16 07:52:35

标签: android android-constraintlayout

我正在制作一个应用程序,我决定使用Constraint布局。在提议的设计中,右下角有一个按钮,如图所示,它需要随键盘向上移动:

enter image description here

我可以通过编程设置垂直偏差来移动按钮:

ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(constraintLayout);
constraintSet.setVerticalBias(buttonNext.getId(), (float) 0);
constraintSet.applyTo(constraintLayout);

但我想将按钮移到键盘正上方,如上图所示。在搜索时,我找到了一些解决方案来找到键盘的高度。但我不知道偏置和键盘高度之间我应该做什么计算。我不确定用于偏置的单位(百分比可能?因为在编辑器中它的值是1 - 100)并且键盘高度将是dps。

如果有人可以帮助我修改逻辑或提出其他解决方案来创建上面显示的布局,那么我们将非常感激。

2 个答案:

答案 0 :(得分:1)

我设法通过在android:windowSoftInputMode="adjustResize"文件中设置activity标记的AndroidManifest.xml属性来实现这种行为:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <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=".MainActivity"
            android:windowSoftInputMode="adjustResize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

示例'activity_main.xml'布局(使用ConstraintLayout-1.1.0):

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context=".MainActivity">

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageView
        android:src="@android:drawable/btn_star"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

</android.support.constraint.ConstraintLayout>

结果:

keyboard_off keybooard_on

答案 1 :(得分:0)

android:windowSoftInputMode="adjustResize"

在活动代码

中添加此内容