java - 键盘关闭时出现 StackOverflowError

标签 java android

我有一个从 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/

相关文章:

java - 使用函数引用等将代码转换为 Java 8 方法

java - 无法从类中获取枚举值

android - 如何删除日期范围不匹配的Android sqlite中的行

android - 如何消除我的适配器行布局上的间隙

android - 将现有应用程序转换为使用选项卡

java - Sprite 的对角线运动

java - Hibernate 外键标准过滤器

android - FFmpeg:如何使输出视频与输入视频具有相同的宽度、高度和 SAR

Android将布局划分为部分并为其分配计数器

java - 在非交互式脚本中安装 jre