首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IllegalArgumentException in AutoCompleteTextView showDropDown

IllegalArgumentException in AutoCompleteTextView showDropDown
EN

Stack Overflow用户
提问于 2018-03-21 12:49:32
回答 2查看 339关注 0票数 8

我在Google控制台收到了这份崩溃报告,我自己从未体验过。

代码语言:javascript
复制
java.lang.IllegalArgumentException: 
  at android.widget.ListPopupWindow.setHeight (ListPopupWindow.java:541)
  at android.widget.AutoCompleteTextView.setDropDownHeight (AutoCompleteTextView.java:414)
  at .MyEditText.showDropDown (MyEditText.java:44)
  at android.widget.AutoCompleteTextView.updateDropDownForFilter (AutoCompleteTextView.java:1086)
  at android.widget.AutoCompleteTextView.onFilterComplete (AutoCompleteTextView.java:1068)
  at android.widget.Filter$ResultsHandler.handleMessage (Filter.java:285)
  at android.os.Handler.dispatchMessage (Handler.java:105)
  at android.os.Looper.loop (Looper.java:172)
  at android.app.ActivityThread.main (ActivityThread.java:6637)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:240)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:767)

我使用这个showDropDown方法从屏幕底部留出50 dp的空间,这样下拉列表就不会覆盖我的广告底部。

代码语言:javascript
复制
public void showDropDown() {
    Rect displayFrame = new Rect();
    getWindowVisibleDisplayFrame(displayFrame);

    int[] locationOnScreen = new int[2];
    getLocationOnScreen(locationOnScreen);

    int bottom = locationOnScreen[1] + getHeight();
    int availableHeightBelow = displayFrame.bottom - bottom;
    Resources r = getResources();
    int bannerHeight = Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, r.getDisplayMetrics()));
    int downHeight = availableHeightBelow - bannerHeight;
    setDropDownHeight(downHeight);

    super.showDropDown();
}

在Google控制台上,这次崩溃只影响到运行Android8.0的Mi A1和Mate 10 Pro。在运行Android8.0的模拟器上,我没有经历过这种崩溃。

这是预期的效果:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-01 11:23:47

目前,我添加了一些代码来检查downHeight > 0是否可以防止这种崩溃。

代码语言:javascript
复制
public void showDropDown() {
        Rect displayFrame = new Rect();
        getWindowVisibleDisplayFrame(displayFrame);

        int[] locationOnScreen = new int[2];
        getLocationOnScreen(locationOnScreen);

        int bottom = locationOnScreen[1] + getHeight();
        int availableHeightBelow = displayFrame.bottom - bottom;
        Resources r = getResources();
        int bannerHeight = Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, r.getDisplayMetrics()));
        int downHeight = availableHeightBelow - bannerHeight;
        if (downHeight > 0) {
            setDropDownHeight(downHeight);
        } else {
            setDropDownHeight(300);
        }

        super.showDropDown();
    }
票数 4
EN

Stack Overflow用户

发布于 2018-03-26 15:54:37

看起来IllegalArgumentException被抛出了这里。如果您跟踪早期版本的Android (N和更早版本),则不存在防御性代码。根据你的计算,高度可能是负的。我认为你需要一种不同的方法来达到预期的效果。你的布局是什么样子?

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49406773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档