Dialog的show()方法会调用其onCreate()方法,ProgressBar是android系统类,
如果断点调试没有执行, 可能原因
- compileSdk版本和真机系统版本不一致,源码存在差异,无法正确断点。
- compileSdk版本和真机系统版本一致,可能厂商定制修改了该类,也会造成源码位置错乱,无法正确断点。
没有足够的数据
(゚∀゚ )
暂时没有任何数据
(゚∀゚ )
暂时没有任何数据
zjupure 回答了问题 · 2017-12-29
Dialog的show()方法会调用其onCreate()方法,ProgressBar是android系统类,
如果断点调试没有执行, 可能原因
Dialog的show()方法会调用其onCreate()方法,ProgressBar是android系统类,如果断点调试没有执行, 可能原因
关注 2 回答 1
zjupure 回答了问题 · 2017-12-29
这个需要修改View动画变换的基准点pivotX和pivotY,View默认的基准点是其中心,对于你的需求,保持底部不变,X和Y方向放大,需要将基准点设置为View底边的中点。
view.setPivotX(view.getWidth()/2); // X方向中点
view.setPivotY(view.getHeight()); // Y方向底边
AnimatorSet animatorSet = new AnimatorSet(); //组合动画
ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, "scaleX", 0f, 1.6f);
ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, "scaleY", 0f, 1.6f);
animatorSet.setDuration(2000); //动画时间
animatorSet.setInterpolator(new DecelerateInterpolator()); //设置插值器
animatorSet.play(scaleX).with(scaleY); //同时执行
animatorSet.start(); //启动动画
这个需要修改View动画变换的基准点pivotX和pivotY,View默认的基准点是其中心,对于你的需求,保持底部不变,X和Y方向放大,需要将基准点设置为View底边的中点。
关注 3 回答 2
zjupure 回答了问题 · 2017-12-25
APK是一个zip包,asset文件夹会原封不动的保留,不参与arsc和R文件的生成,可以直接解压替换该目录下任意文件,然后进行重新打包签名运行,只要apk没有在运行时做一些校验,就可以得到你想要的结果。
APK是一个zip包,asset文件夹会原封不动的保留,不参与arsc和R文件的生成,可以直接解压替换该目录下任意文件,然后进行重新打包签名运行,只要apk没有在运行时做一些校验,就可以得到你想要的结果。
关注 9 回答 7
zjupure 回答了问题 · 2017-12-20
在声明SYSTEM_ALERT_WINDOW 权限后,选择使用TYPE_SYSTEM_ALERT等来使弹窗显示在其他应用之上;在Android O系统上都将显示在TYPE_APPLICATION_OVERLAY类型的窗口之下。而targetSdkVersion为android O的应用直接使用TYPE_APPLICATION_OVERLAY显示Alter Window。这样你的弹框可能还是在别人的弹窗之下。
适配Android 8.0,请使用TYPE_APPLICATION_OVERLAY弹出悬浮窗,需要申请权限。
在声明SYSTEM_ALERT_WINDOW 权限后,选择使用TYPE_SYSTEM_ALERT等来使弹窗显示在其他应用之上;在Android O系统上都将显示在TYPE_APPLICATION_OVERLAY类型的窗口之下。而targetSdkVersion为android O的应用直接使用TYPE_APPLICATION_OVERLAY显示Alter Window。这样你...
关注 4 回答 3
zjupure 回答了问题 · 2017-12-15
回去翻了一下okio的源码,Segment的shared和owner属性是互斥的,当对Segment2进行split时,如果Segment2被share了,会创建一个新的Segment共享原来的Segment2,这个Segment是处于shared状态且owner不是自己,链变成了
Segment1[30%]--->Segment2N(shared)[20%]--->Segment2(old)[40%]--->Segment3[10%]
其中Segment2N和Segment2(old)内部持有的byte[]数组对象是同一个,只是pos和limit位置不同,这就是shared状态,而Segment1和Segment3不是share状态,内部都是有各自的byte[]数组。
当遍历到Segment2N时,发现Segment2N和它的prev Segment1满足compact条件,就会compact Segment1和Segment2,把Segment2N里的数据写入Segment1里,然后把自身从链表中移除。
Segment1[50%]--->Segment2(old)[40%]--->Segment3[10%]
当遍历到Segment2(old)时,发现Segment2(40%)和Segment1(50%)都没有超过一半,满足compact条件,又会把Segment2(old)的数据写入Segment1里,把自身移除,释放内存。
Segment1[90%]--->Segment3[10%]
当遍历到Segment3时,不满足compat条件,没有必要拷贝数据,do nothing。
回去翻了一下okio的源码,Segment的shared和owner属性是互斥的,当对Segment2进行split时,如果Segment2被share了,会创建一个新的Segment共享原来的Segment2,这个Segment是处于shared状态且owner不是自己,链变成了Segment1[30%]--->Segment2N(shared)[20%]---&...
关注 2 回答 1
zjupure 回答了问题 · 2017-12-11
Android不同版本so的拷贝策略不同,多个ABI下面的so不同,系统在安装app时可能会发生拷贝so缺失的现象,运行时会发生找不到so的崩溃,参考https://zhuanlan.zhihu.com/p/...。
建议有必要保留的ABI目录下的so数目保持一致。
Android不同版本so的拷贝策略不同,多个ABI下面的so不同,系统在安装app时可能会发生拷贝so缺失的现象,运行时会发生找不到so的崩溃,参考[链接]。建议有必要保留的ABI目录下的so数目保持一致。
关注 3 回答 2
zjupure 回答了问题 · 2017-12-11
这个问题由于targetSDKVersion升到26之后,在7.1.1机型上概率性出现。稳定复现的步骤是,在Toast.show()之后,UI线程做了耗时的操作阻塞了Handler message的处理,如使用Thread.sleep(5000),然后这个崩溃就出现了。原因是7.1.1系统对TYPE_TOAST的Window类型做了超时限制,绑定了Window Token,最长超时时间是3.5s,如果UI在这段时间内没有执行完,Toast.show()内部的handler message得不到执行,NotificationManageService那端会把这个Toast取消掉,同时把Toast对于的window token置为无效。等App端真正需要显示Toast时,因为window token已经失效,ViewRootImpl就抛出了上面的异常。
Android 8.0上面,google意识到这个bug,在Toast的内部加了try-catch保护。目前只有7.1.1上面的Toast存在这个问题,崩溃在系统源码里。APP层可以通过自定义Toast类,反射替换TN的内部成员变量mHandler,从而添加try-catch做到workaround,所有使用Toast的地方都使用这个自定义的,不要直接使用系统原生的。
这个问题由于targetSDKVersion升到26之后,在7.1.1机型上概率性出现。稳定复现的步骤是,在Toast.show()之后,UI线程做了耗时的操作阻塞了Handler message的处理,如使用Thread.sleep(5000),然后这个崩溃就出现了。原因是7.1.1系统对TYPE_TOAST的Window类型做了超时...
关注 7 回答 4
zjupure 关注了问题 · 2017-01-23
我在前面定义了一个类变量
public int arrBomb[][] = new int10;
然后给一个动态添加的按钮,绑定了点击方法
Button btn = new Button(this);
btn.setBackgroundResource(R.drawable.bg);
btn.setTag(R.id.row,row);
btn.setTag(R.id.col,col);
//点击事件
btn.setOnClickListener(clickListener);
grid.addView(btn, params);
接着,发现在clickListener方法里使用不了arrBomb这个变量,请问是怎么回事呢?
public View.OnClickListener clickListener = new View.OnClickListener() {
public void onClick(View v) {
GridLayout grid = (GridLayout)findViewById(R.id.main);
Button btn = (Button)v;
int row = (int)btn.getTag(R.id.row);
int col = (int)btn.getTag(R.id.col);
grid.removeView(btn);
Log.d("AAA",row + "===" + col);
}
};
应该要如何使用呢?谢谢,本人是安卓菜鸟。
关注 2 回答 1
zjupure 回答了问题 · 2017-01-23
arrBomb和clickListener只要在同一个类中声明,onClick()中是可以引用arrBomb的,所以并不清楚你具体的写法和上下文环境。
tips:
java中声明二维数组,一般把int[][]连在一起。
int[][] arrBomb = new int[10][];
你可以直接用Activity或Fragment实现View.onClickListener接口,没有必要申明一个变量。
arrBomb和clickListener只要在同一个类中声明,onClick()中是可以引用arrBomb的,所以并不清楚你具体的写法和上下文环境。tips:
关注 2 回答 1
zjupure 回答了问题 · 2017-01-22
按钮之间有margin,这是由系统Button默认的style引起的。Button默认的style的背景图是一个insetDrawable,四周有留白。为了解决留白问题,你可以自己给Button设置一个background,这样就可以消除间隙了。
GridLayout与GridView不同,它只负责子控件的位置摆放,不负责记录子控件的位置信息和点击事件的分发。这个需要你自己对每个子控件进行单独监听。
为了获取子控件在GridLayout中的位置,看你的代码是动态生成的,不是通过xml文件配置,你可以在生成子控件的时候通过View.setTag()把自身的位置信息绑定到控件上,在onClick()事件中通过View.getTag()获取位置信息。
希望对你有所帮助。
按钮之间有margin,这是由系统Button默认的style引起的。Button默认的style的背景图是一个insetDrawable,四周有留白。为了解决留白问题,你可以自己给Button设置一个background,这样就可以消除间隙了。
关注 4 回答 3
查看全部 个人动态 →
(゚∀゚ )
暂时没有
(゚∀゚ )
暂时没有
注册于 2016-10-30
个人主页被 586 人浏览
推荐关注