我在Google控制台收到了这份崩溃报告,我自己从未体验过。
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的空间,这样下拉列表就不会覆盖我的广告底部。
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的模拟器上,我没有经历过这种崩溃。
这是预期的效果:

发布于 2018-04-01 11:23:47
目前,我添加了一些代码来检查downHeight > 0是否可以防止这种崩溃。
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();
}https://stackoverflow.com/questions/49406773
复制相似问题