为什么我的布局不能通过“ adjustPan”向上移动?

时间:2019-02-06 01:43:32

标签: android android-edittext android-statusbar window-soft-input-mode adjustpan

我在应用中使用adjustPan时遇到了一些问题,因为它无法正常运行。其他一些用户也遇到了此问题,因此我认为分享此问题(Layout doesn't move up enough when clicking EditText)很重要。

注意:我正在使用Android Studio ,并且正在使用“即时应用”,因此文件的位置将有所不同。< / p>

当我在布局中使用adjustPan时,我的活动无法向上移动到EditText出现在软键盘上方的位置(有关详细信息,请参见图像)。无论在清单文件还是Java文件中使用相同结果,都仍然会出现。

不仅如此,最奇怪的部分是状态栏变为透明,而应该位于通知图标后面的深蓝色栏变为向下 (有关详细信息,请参见图像)。

Screenshot of issue

我已经尝试过尝试解决此问题的几种尝试,例如使用adjustResizesetOnTouchListener,但是我收到的这两个答案都不能解决此问题。

我仍然无法弄清楚这个问题的原因,因此,关于如何发现此问题发生原因的任何答案或评论也都可以。

这是我的一些代码:

清单文件:

<activity
        android:name=".Input_Activity"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="adjustPan" />

Java文件:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.WindowManager;

public class Input_Activity extends AppCompatActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_input__activity);

    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
   }
}

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"
tools:context=".Input_Activity">

<EditText
    android:layout_width="214dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginBottom="8dp"
    android:inputType="number|numberDecimal"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.585"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.725" />

所有反馈将不胜感激。

4 个答案:

答案 0 :(得分:3)

在类级别创建一个类似InputMethodManager methodManager的对象。
将这些行添加到您的onCreate()方法中,

methodManager = (InputMethodManager) this.getSystemService(this.INPUT_METHOD_SERVICE);
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

并在您的onClick()方法中,显示类似

的键盘
methodManager.toggleSoftInputFromWindow(
    your_view_name.getApplicationWindowToken(),
    InputMethodManager.SHOW_FORCED, 0);  

如果此词 getApplicationWindowToken 引发错误,则将其替换为 getWindowToken
希望对您有帮助。

答案 1 :(得分:0)

还需要在onTouch事件中添加以下代码,以便在出现软键盘时它会上升。示例:

 editText.setTransformationMethod(WordBreakUtil.getInstance());
 editText.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
            return false;
        }
    });

答案 2 :(得分:0)

我不确定答案。但尝试更换

<activity
    android:name=".Input_Activity"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustPan" />

使用

<activity
    android:name=".Input_Activity"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustResize" />

在您的Android清单中。 Read here

希望这会有所帮助!

答案 3 :(得分:0)

android:windowSoftInputMode

以上属性可用于指定活动内容会发生什么。

下面的图片可以进一步清除您的疑问enter image description here

  • adjustPan :活动的主窗口未调整大小以腾出空间 软键盘。而是,窗口的内容是 自动平移,以使当前焦点永远不会被遮挡 键盘和用户始终可以看到他们正在输入的内容。这是 通常不如调整大小理想,因为用户可能需要 关闭软键盘以接近并遮盖其中的部分 窗口。
  • adjustResize :始终会调整活动主窗口的大小以使其 屏幕上的软键盘的空间。

我认为不需要在您添加的代码下面添加

getWindow()。setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);