android UI设计中遇到的坑

超、凢脫俗 2023-01-04 14:39 247阅读 0赞

前言

  1. android开发中,总有些异想天开的想法,投入实现的时候,发现android并不如我想的那么强大,我的想法难以得到实现,获取将来会有所改变,在我得知改变之前,我是不会再尝试了。

1. toast弹出框不支持点击

toast 弹出框不支持点击,看了源码,设置了WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,使用了反射的机制取mTN,也无法奏效

  1. TN(String packageName, @Nullable Looper looper) {
  2. // XXX This should be changed to use a Dialog, with a Theme.Toast
  3. // defined that sets up the layout params appropriately.
  4. final WindowManager.LayoutParams params = mParams;
  5. params.height = WindowManager.LayoutParams.WRAP_CONTENT;
  6. params.width = WindowManager.LayoutParams.WRAP_CONTENT;
  7. params.format = PixelFormat.TRANSLUCENT;
  8. params.windowAnimations = com.android.internal.R.style.Animation_Toast;
  9. params.type = WindowManager.LayoutParams.TYPE_TOAST;
  10. params.setTitle("Toast");
  11. params.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
  12. | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
  13. | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
  14. mPackageName = packageName;
  15. if (looper == null) {
  16. // Use Looper.myLooper() if looper is not specified.
  17. looper = Looper.myLooper();
  18. if (looper == null) {
  19. throw new RuntimeException(
  20. "Can't toast on a thread that has not called Looper.prepare()");
  21. }
  22. }

2. toast弹出框不支持时间自定义

toast 弹出框要么是2500ms或者是3500ms,修改为其他时间无法奏效,即便是通过反射获取mTN来修改也同样无法奏效。因此估计android是非常不愿意开发者动toast时间的。

  1. TN(String packageName, @Nullable Looper looper) {
  2. // XXX This should be changed to use a Dialog, with a Theme.Toast
  3. // defined that sets up the layout params appropriately.
  4. final WindowManager.LayoutParams params = mParams;
  5. params.height = WindowManager.LayoutParams.WRAP_CONTENT;
  6. params.width = WindowManager.LayoutParams.WRAP_CONTENT;
  7. params.format = PixelFormat.TRANSLUCENT;
  8. params.windowAnimations = com.android.internal.R.style.Animation_Toast;
  9. params.type = WindowManager.LayoutParams.TYPE_TOAST;
  10. params.setTitle("Toast");
  11. params.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
  12. | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
  13. | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
  14. mPackageName = packageName;
  15. if (looper == null) {
  16. // Use Looper.myLooper() if looper is not specified.
  17. looper = Looper.myLooper();
  18. if (looper == null) {
  19. throw new RuntimeException(
  20. "Can't toast on a thread that has not called Looper.prepare()");
  21. }
  22. }

3. 自定义控件内部控件id冲突,导致无法点击

  1. 当有两个自定义控件时,点击id冲突的控件时,点击事件无法触发。
  2. 由于项目紧急,我没有深究。

发表评论

表情:
评论列表 (有 0 条评论,247人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Muse UI遇到

    写在前面:我只是一个前端小白,文章中的提到可能会有不足之处,仅提供一个参考。若有不完善的地方,欢迎各位大佬指出,希望对你有帮助! 故事背景是这样的,最近做一个Vue项目,使用

    相关 Disruptor遇到

    经朋友推荐,我在项目采用lmax的disruptor无锁队列框架来实现异步记录监控统计信息。disruptor体积很小,功能强大,一路配置下来,很容易上手,而且经过测试发现确实