Android开发问题集锦3

一些显而易见的问题记录下

  • 问题1:java工程解析apk的apkinfo需要用到sdk/build-tools/sdk版本号/aapt以及AXmlResourceParser.jar包,在使用aapt工具的时候报错:

    1
    Cannot run program "FxRhAssets/datas/aapt": error=13, Permission denied

    出现这个问题是因为本地的aapt权限不够,命令行到本地aapt路径执行:sudo chmod 777 aapt

  • 问题2:同上,使用aapt文件也需要适配不同来源,mac版本的aapt不能再win下使用,同理,win版本的appt不能在mac下使用

  • 问题3:小米机器在android studio抓不到错误的情况下会报如下的错误,在本项目是因为webview.loadurl(url,header);header没有初始化完全导致,在加载的时候加了一个延迟加载.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    W/WindowAnimator: Failed to dispatch window animation state change.
    android.os.DeadObjectException
    at android.os.BinderProxy.transactNative(Native Method)
    at android.os.BinderProxy.transact(Binder.java:506)
    at android.view.IWindow$Stub$Proxy.onAnimationStopped(IWindow.java:534)
    at com.android.server.wm.WindowAnimator.updateWindowsLocked(WindowAnimator.java:289)
    at com.android.server.wm.WindowAnimator.animateLocked(WindowAnimator.java:681)
    at com.android.server.wm.WindowAnimator.access$000(WindowAnimator.java:53)
    at com.android.server.wm.WindowAnimator$1.doFrame(WindowAnimator.java:123)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
    at android.view.Choreographer.doCallbacks(Choreographer.java:672)
    at android.view.Choreographer.doFrame(Choreographer.java:605)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:846)
    at android.os.Handler.handleCallback(Handler.java:742)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.os.HandlerThread.run(HandlerThread.java:61)
    at com.android.server.ServiceThread.run(ServiceThread.java:46)
    I/Timeline: Timeline: Activity_windows_visible id: ActivityRecord{12cbc5c u0 com.miui.home/.launcher.Launcher t5755}
  • 问题4:实例化popupwindow后,调用方法showAtLocation()会传参来定位popupwindow显示在哪个布局之上,如果想超出该布局,setClippingEnabled(false);

  • 问题5:WindowManager控制弹悬浮窗的时候,一般使用 这个属性:LAYOUT_PARAMS.type = WindowManager.LayoutParams.TYPE_PHONE;部分小米和魅族的机型会不显示。

    1
    2
    //noinspection WrongConstant
    LAYOUT_PARAMS.type = WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;

    加上注释编译不会报错,注意一定使用的是getContext()而不是getAaplicationContext()获取WindowManager。

  • 问题6:拖动浮标至某处隐藏,若想浮标在上,隐藏的图标在下,隐藏图标建议WindowManager的TYPE为TYPE_APPLICATION_PANEL,浮标建议WindowManager的Type为LAST_APPLICATION_WINDOW,如果位置特殊需要考虑虚拟键盘对位置的影响。

  • 问题7:WebView的弹窗有时候内嵌页自己的弹窗会显示不正常,首先可以断定的是因为主题style的样式问题导致,如果可以选择修改样式,就修改样式。否则的话重载onJsAlert()方法。

    1
    2
    3
    4
    5
    6
    7
    8
    @Override
    public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
    if (!TextUtils.isEmpty(message)) {
    ToastUtil.getInstance(mContext).makeText(message);
    }
    result.cancel();//不添加可能导致界面卡顿
    return true;
    }
  • 问题8:SurfaceView 只能创建一个正方形的自定义View,不能创建一个全屏的长方形的自定义View,使用SurfaceView在其添加传统控件的时候,如果用setZOrderOnTop(true),SurfaceView会置于最顶层遮盖住原生控件,setZOrderOnTop(true)之后调用了setZOrderMediaOverlay(true),可能会解决遮罩问题。否则建议使用原生View来解决.。

  • 问题9: 经常使用到自定义view组合方式解耦,使用自定义view的时候一定要使用构造方法的context,不要使用getContext(),否则界面不会显示,也不会报错,写快了经常用getContext()

  • 问题10:创建悬浮窗报错,Unable to add window – token null is not for an application,自定义悬浮窗一般不会出问题,初始化的windowmanager的方法要保证使用activity:

    1
    WindowManager windowManager = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE);
  • 问题11: TextView.setText(Html.fromHtml(text))与实际的HTML不符合,可能是不支持的标签。

  • 问题12: JS 与 WebView互相调用不成功,可能JS方法前是否要通过Window属性来进行调用

  • 问题13:Error inflating xml。导致这个问题除了构造方法和包名类名路径的完整,也有可能是你自定义view里面某一层的自定义view的包名类名路径的完整性不对。

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器