"adjustPan" 为什么我的布局不够向上移动?
Why doesn't my layout move up enough with "adjustPan"?
我在我的应用程序中使用 adjustPan
时遇到了一些问题,因为它无法正常工作。其他一些用户也遇到了这个问题,所以我认为分享这个问题很重要 (Layout doesn't move up enough when clicking EditText)。
注意:我使用的是Android Studio 和我使用的是"Instant App",所以文件的位置会有所不同。
当我在我的布局中使用 adjustPan
时,我的 activity 没有向上移动到 EditText
出现在软键盘上方的位置(有关详细信息,请参见图片)。无论您在 Manifest 文件还是 Java 文件中使用它,仍然会出现相同的结果。
不仅如此,最奇怪的是状态栏变得 透明 并且应该位于通知图标后面的深蓝色条 向下 一点点(详见图片)。
我曾多次尝试解决这个问题,比如使用 adjustResize
和 setOnTouchListener
,但我收到的这两个答案都没有解决这个问题。
我仍然无法弄清楚这个问题的原因,所以任何关于如何发现这个问题发生的原因的答案或评论也很好。
这是我的一些代码:
清单文件:
<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" />
我们将不胜感激所有反馈。
还需要在你的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;
}
});
在 class 级别创建一个像 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
替换它
希望对你有帮助。
我不确定答案。但尝试替换
<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
希望对您有所帮助!
android:windowSoftInputMode
以上属性可用于指定 activity 内容发生的情况。
下图更能解开你的疑惑
- adjustPan:activity 的主要 window 未调整大小以为
软键盘。相反,window 的内容是
自动平移,以便当前焦点永远不会被
键盘和用户始终可以看到他们正在输入的内容。这是
通常不如调整大小可取,因为用户可能需要
关闭软键盘以获取并与被遮挡的部分进行交互
window.
- adjustResize:activity 的主要 window 总是调整大小,使
屏幕上的软键盘空间。
我认为没有必要添加下面你添加的代码。
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
我在我的应用程序中使用 adjustPan
时遇到了一些问题,因为它无法正常工作。其他一些用户也遇到了这个问题,所以我认为分享这个问题很重要 (Layout doesn't move up enough when clicking EditText)。
注意:我使用的是Android Studio 和我使用的是"Instant App",所以文件的位置会有所不同。
当我在我的布局中使用 adjustPan
时,我的 activity 没有向上移动到 EditText
出现在软键盘上方的位置(有关详细信息,请参见图片)。无论您在 Manifest 文件还是 Java 文件中使用它,仍然会出现相同的结果。
不仅如此,最奇怪的是状态栏变得 透明 并且应该位于通知图标后面的深蓝色条 向下 一点点(详见图片)。
我曾多次尝试解决这个问题,比如使用 adjustResize
和 setOnTouchListener
,但我收到的这两个答案都没有解决这个问题。
我仍然无法弄清楚这个问题的原因,所以任何关于如何发现这个问题发生的原因的答案或评论也很好。
这是我的一些代码:
清单文件:
<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" />
我们将不胜感激所有反馈。
还需要在你的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;
}
});
在 class 级别创建一个像 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
替换它
希望对你有帮助。
我不确定答案。但尝试替换
<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
希望对您有所帮助!
android:windowSoftInputMode
以上属性可用于指定 activity 内容发生的情况。
下图更能解开你的疑惑
- adjustPan:activity 的主要 window 未调整大小以为 软键盘。相反,window 的内容是 自动平移,以便当前焦点永远不会被 键盘和用户始终可以看到他们正在输入的内容。这是 通常不如调整大小可取,因为用户可能需要 关闭软键盘以获取并与被遮挡的部分进行交互 window.
- adjustResize:activity 的主要 window 总是调整大小,使 屏幕上的软键盘空间。
我认为没有必要添加下面你添加的代码。
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);