在我的应用程序中的一个片段中,我有一个edittext,每当我点击它时,键盘就会出现,片段中的所有内容都会消失,包括edittext。我仍然可以在键盘上打字,按下后退按钮后,一切都会回来,我在编辑文本上显示的内容,但是如何阻止所有内容消失?
以下是片段及其布局的代码。
片段:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class PaymentsFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_payments, container, false);
}
}
布局:
<?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"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/editText2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="Enter Something"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toLeftOf="@+id/button2"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintBaseline_toBaselineOf="@+id/editText2"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toRightOf="@+id/editText2"
android:layout_marginLeft="0dp"
android:layout_marginRight="16dp" />
</android.support.constraint.ConstraintLayout>
答案 0 :(得分:2)
<强>机器人:windowSoftInputMode 强>
对活动的主窗口进行了调整 - 是否是 调整大小调整为软键盘腾出空间或是否为它 内容平移以使当前焦点在窗口的一部分可见 被软键盘覆盖。
<强> adjustResize 强>
活动的主窗口总是调整大小以便为软件腾出空间 键盘在屏幕上。
<强> adjustPan 强>
活动的主窗口未调整大小以便为软件腾出空间 键盘。相反,窗口的内容会自动平移 这样当前的焦点永远不会被键盘和用户遮挡 总能看到他们正在打字的东西。这通常不太理想 比调整大小,因为用户可能需要关闭软键盘 进入并与窗户的模糊部分互动。
在清单中使用这种方式:
<activity android:windowSoftInputMode="adjustResize"> </activity>
答案 1 :(得分:0)
即使在Android 8上,在“ ConstraintLayout中片段的Scrollview中的多行EditText中”的情况下,我仍然会重现它。使用SingleLine不会产生任何问题。
之所以发生这种情况,是因为EditText的动态高度在这种情况下不能很好地工作。 此解决方案有些破绽,但如果您有能力固定行数,它的确可以像魅力一样发挥作用:
<declare-styleable name="LabelEditView"> <attr name="label_edit_line_count" format="integer" /> </declare-styleable>
setLineCount(attributes.getInt(R.styleable.LabelEditView_label_edit_line_count,
1));
然后,最后是有趣的代码:
/**
* Set the number of visible lines. Does not support to switch between modes or font
*/
public void setLineCount(int lineCount) {
if (lineCount <= 1) {
setSingleLine(true);
} else {
setSingleLine(false);
setImeOptions(EditorInfo.IME_ACTION_DONE);
setRawInputType(InputType.TYPE_CLASS_TEXT);
// Fix around EditText in Scrollview in fragment in ConstraintLayout
Paint.FontMetrics fm = getPaint().getFontMetrics();
int textHeight = (int) ((fm.bottom - fm.top) * (lineCount + 0.5));
setMaxHeight(textHeight);
setHeight(textHeight);
}
}
答案 2 :(得分:-1)
放入AndroidManifest.xml(在您的活动中):
<activity android:name="(activity name)" android:windowSoftInputMode="adjustPan">