我有一个从 MultiAutoCompleteTextView 扩展而来的自定义 View ,用于创建类似于 gmail 中的联系人的 fragment View 。当我接触到此 View 并且键盘被关闭时,它会导致堆栈溢出。它只发生在我的 Nexus 4 中,这是 logcat。
java.lang.StackOverflowError
at android.text.DynamicLayout.reflow(DynamicLayout.java:284)
at android.text.DynamicLayout.<init>(DynamicLayout.java:170)
at android.widget.TextView.makeSingleLayout(TextView.java:6134)
at android.widget.TextView.makeNewLayout(TextView.java:6032)
at android.widget.TextView.checkForRelayout(TextView.java:6571)
at android.widget.TextView.onRtlPropertiesChanged(TextView.java:8672)
at android.view.View.resolvePadding(View.java:12407)
at android.view.View.getPaddingLeft(View.java:15603)
at com.tokenautocomplete.TokenCompleteTextView.maxTextWidth(TokenCompleteTextView.java:260)
at com.tokenautocomplete.TokenCompleteTextView.access$1000(TokenCompleteTextView.java:54)
at com.tokenautocomplete.TokenCompleteTextView$ViewSpan.prepView(TokenCompleteTextView.java:822)
at com.tokenautocomplete.TokenCompleteTextView$ViewSpan.getSize(TokenCompleteTextView.java:841)
at com.tokenautocomplete.TokenCompleteTextView$TokenImageSpan.getSize(TokenCompleteTextView.java:885)
这是我的准备 View 代码
private void prepView() {
int widthSpec = MeasureSpec.makeMeasureSpec((int)maxTextWidth(), MeasureSpec.AT_MOST);
int heightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
view.measure(widthSpec, heightSpec);
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
}
这是 tokenCompleteTextView 的第 260 行
private float maxTextWidth() {
return getWidth() - getPaddingLeft() - getPaddingRight();
}
使用 TokenAutoComplete token View 的库。
这是我的布局
<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/gray"
android:clickable="true">
<LinearLayout
android:id="@+id/llsearch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:orientation="horizontal"
android:weightSum="4"
android:background="@color/listview_color"
android:layout_marginTop="@dimen/hdpi_4dp"
android:layout_marginBottom="@dimen/hdpi_4dp"
android:gravity="center_vertical">
<in.ispg.chipview.ConatctCompleteTextView
android:id="@+id/edtsearch"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/search"
android:layout_weight="1"
android:textSize="@dimen/textsize_edittext"
android:textColor="@color/black"
android:paddingLeft="@dimen/hdpi_4dp"
android:paddingRight="@dimen/hdpi_4dp"
android:layout_marginLeft="@dimen/hdpi_8dp"
android:layout_marginRight="@dimen/hdpi_8dp"
android:singleLine="false"
android:minLines="1"
android:maxLines="5"
>
<requestFocus />
</in.ispg.chipview.ConatctCompleteTextView>
<Button
android:id="@+id/btnsearch"
android:layout_width="fill_parent"
android:layout_height="@dimen/hdpi_33dp"
android:text="@string/done"
android:layout_weight="3"
android:background="@drawable/send_button"
android:layout_marginRight="@dimen/hdpi_8dp"
android:textColor="@color/white"
android:gravity="center"
/>
<in.ispg.utils.FontTextView
android:id="@android:id/empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:textSize="@dimen/textsize_edittext"
android:textColor="#595959"
android:textStyle="bold"
android:text="" />
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:indeterminate="true"
android:indeterminateDrawable ="@drawable/progress"
android:visibility="gone" />
注意
我知道如何关闭键盘。那不是我的问题。当我在特定 View 中执行此操作时,出现 stackoverflow 错误。
最佳答案
我使用此代码来隐藏软键盘
//关闭软键盘
InputMethodManager inputMethod = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethod.hideSoftInputFromWindow(getView().getWindowToken(), 0);
关于java - 键盘关闭时出现 StackOverflowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24799935/