所以我有一个EditText,第一次没有被键盘覆盖。然后当您关闭键盘并再次点击edittext时,它将覆盖edittext。
我花了几个小时研究这个问题并得出结论它与编辑文本的这两个属性有关。
android:inputType="number"
android:gravity="center"
如果我删除其中任何一个,adjustPan(如我的清单中所示)始终按照承诺运行。似乎是一个Android错误。但是我在编辑文本中需要这两行。解决这个问题的最佳方法是什么?
这是xml的稍微浓缩版本:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true">
<LinearLayout
android:id="@+id/buttons_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal"
android:weightSum="5">
<android.support.v7.widget.AppCompatButton
android:id="@+id/generate_button"
android:layout_width="match_parent"
android:layout_height="@dimen/button_height"
android:layout_marginBottom="@dimen/button_margin"
android:layout_marginEnd="0dp"
android:layout_marginLeft="@dimen/button_margin"
android:layout_marginRight="0dp"
android:layout_marginStart="@dimen/button_margin"
android:layout_marginTop="@dimen/button_margin"
android:layout_weight="1"
android:background="@color/buttonColor"
android:elevation="@dimen/button_elevation"
android:foreground="?attr/selectableItemBackground"
android:text="@string/generate"
android:textColor="@color/colorPrimary"
android:textSize="@dimen/generate_button_title_size"
android:textStyle="bold" />
<android.support.v7.widget.AppCompatImageButton
android:id="@+id/copy_button"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/button_margin"
android:layout_weight="4"
android:adjustViewBounds="true"
android:background="@color/buttonColor"
android:elevation="@dimen/button_elevation"
android:foreground="?attr/selectableItemBackground"
android:padding="@dimen/button_margin"
android:scaleType="fitCenter"
android:src="@drawable/ic_copy"
android:tint="@color/colorPrimary" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/buttons_layout"
android:orientation="vertical"
android:weightSum="10">
<GridLayout
android:id="@+id/grid_layout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_weight="6"
android:animateLayoutChanges="true">
</GridLayout>
<TextView
android:id="@+id/total_text_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:gravity="center"
android:text="11"
android:textSize="@dimen/toolbar_title_size"
android:textStyle="bold" />
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_weight="2"
android:textColorHint="@color/textColorHint">
<EditText
android:id="@+id/num_rolls_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:hint="@string/number_of_rolls"
android:inputType="number"
android:maxLength="@integer/edit_text_max_length"
android:maxLines="1"
android:text="4"
android:textColor="@color/textColor"
android:textSize="@dimen/edit_text_text_size"/>
</android.support.design.widget.TextInputLayout>
</LinearLayout>
这是目前第二次点击时的样子(键盘覆盖edittext)...
编辑:我发现使用Android 7.0时键盘工作正常。我不认为它适用于任何低于此值的东西。这是最近修复过的错误吗?
另外,我已经包含了android:windowSoftInputMode =&#34; adjustPan | stateHidden&#34;在我的应用程序和活动部分,我的清单,但似乎没有解决它。
答案 0 :(得分:4)
在您的清单中添加此活动。它工作正常
<activity android:name=".Views.UI.MainActivity"
android:windowSoftInputMode="stateHidden|adjustResize">
答案 1 :(得分:3)
尝试将adjustPan
更改为adjustResize
清单文件中的活动配置,正如document建议的那样。
这个(adjustPan)通常不如调整大小,因为用户可能需要关闭软键盘才能进入并与窗口的模糊部分进行交互。
修改强>
如果您不希望在打开键盘时压缩/调整视图,请向根ScrollView
添加RelativeLayout
。因此,当adjustResize
相应地滚动视图而不是“粉碎”它们时。
希望这有帮助!
答案 2 :(得分:2)
在你的第一个截图中,文字&#34; Dice&#34;切换,在第二个,editText被覆盖,&#34;骰子&#34;如图所示,请考虑删除标题editText&#34; Dice&#34;?
此外,我发现您使用了scrollView,并表示您可以使用d ={chr(i+97):x for i, x in enumerate(input().split())}
,是否可以将其替换为AlignParentBottom
?
答案 3 :(得分:1)
我认为你没有在XML中使用滚动视图,如果你做的比你需要制作一些代码android mainfeast。 <activity
android:name=".activity.ActivityProductDetail"
android:windowSoftInputMode="stateAlwaysHidden|adjustResize" />
答案 4 :(得分:1)
RelativeLayout
的 alignParentBottom
和多个观点总是有问题的,尤其是键盘。我建议使用scrollview
并在LinearLayout
内添加视图,其中按钮位于结尾处,但不一定位于视图的底部。
然后您甚至不需要使用adjustPan
。类似的东西:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- grid view + textview + textEdit + your buttons at the end -->
</LinearLayout>
答案 5 :(得分:1)
您可以将布局添加到ScrollView
并收听onGloablLayout()
回调。如果rootview和你的视图的高度差异大于100像素,它可能是键盘,你可以滚动到你的EditText
所以它不会被键盘阻挡。
final View layout = findViewById(R.id.layoutparentID);
layout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int heightDiff = layout.getRootView().getHeight() - layout.getHeight();
if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
final Runnable r = new Runnable() {
public void run() {
scrollView.smoothScrollTo(0, editText.getBottom());
}
};
activityRootView.getHandler().postDelayed(r, 100);
}
}
});
答案 6 :(得分:1)
检查此代码,隐藏软键盘
try {
View view = this.getCurrentFocus();
if (view != null) {
InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
} catch (Exception e) {
e.printStackTrace();
}