Android开发的一些记录

概览

  • FileObserver同一路径最后一次生效
  • 修改Activity透明度
  • 检查包名是否存在
  • 对URL进行编码
  • View测量的默认处理
  • 手势监听时,onFling没有回调。设置View.setLongClickable(true)
  • Kotlin常用包Anko;compile "org.jetbrains.anko:anko-sdk15:+"

  • FileObserver对同一个文件的监听,只有最后一次监听能收到onEvent.

  • 弹出PopWindow时想修改底层透明度(底层半透明的效果),可以使用以下方法
        /**
       * 设置添加屏幕的背景透明度
       *
       * @param pContext 上下文
       * @param bgAlpha  透明度 popwindow.show的时候backgroundAlpha(0.5f);popwindow.setOnDismissListener的时候backgroundAlpha(1f);
       * @return true修改成功false修改失败
       */
      public static boolean backgroundAlpha(Context pContext, float bgAlpha) {
          if (pContext instanceof Activity) {
              WindowManager.LayoutParams lp = ((Activity) pContext).getWindow().getAttributes();
              lp.alpha = bgAlpha; //0.0-1.0
              ((Activity) pContext).getWindow().setAttributes(lp);
              return true;
          } else {
              return false;
          }
      }
    

  • 查询应用是否存在:可能会有这种情况AppliactionInfo!=null但是PackageInfo==null。
    /**
     * 根据包名判断应用是否已经安装。
     *
     * @param context     上下文
     * @param packageName 包名
     * @return 如果应用已经安装,则返回true,否则返回false.
     */
    public static boolean isPackageExist(Context context, String packageName) {
        boolean isExist = false;
        try {
            isExist = (null != context.getPackageManager().getApplicationInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES))
                    && (null != context.getPackageManager().getPackageInfo(packageName, 0));
        } catch (NameNotFoundException e) {
        } finally {
            return isExist;
        }
    }

  • 对URL进入编码

Android 编码URL中文字符串;
我能想到的问题:中文字符和空格。重复编码也没问题。

public static String encodeUrl(String url) {
        return Uri.encode(url, "-![.:/,%?&=]");
    }

  • View测量的默认处理
    /***
     * 测量的默认处理
     * 1. EXACTLY返回定值
     * 2. UNSPECIFIED返回默认值
     * 3.AT_MOST返回最小值
     * @param measureSpace 值
     * @param default 默认值
     * @return 大小
     */
    private fun getMeasureSize(measureSpace: Int, default: Int): Int {
        var retuSize = 0
        val model = MeasureSpec.getMode(measureSpace)
        val size = MeasureSpec.getSize(measureSpace)
        when (model) {
            MeasureSpec.UNSPECIFIED -> retuSize = default
            MeasureSpec.AT_MOST -> retuSize = Math.min(default, size)
            MeasureSpec.EXACTLY -> retuSize = size
        }
        return retuSize
    }

  • 手势监听时,onFling没有回调。设置View.setLongClickable(true)

主要问题是滑动一会后,停住不滑动,过一会松手。就会出现onFling不回调。


  • Kotlin常用包Anko

引用初探Kotlin和anko进行Android开发

//anko
    compile "org.jetbrains.anko:anko-sdk15:+" // So here it's 15 too
    compile "org.jetbrains.anko:anko-appcompat-v7:+"
    compile "org.jetbrains.anko:anko-design:+"
    compile "org.jetbrains.anko:anko-recyclerview-v7:+"
  • BottomSheetDialogFragment
 @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        BottomSheetDialog dialog = (BottomSheetDialog) super.onCreateDialog(savedInstanceState);
        rootView = View.inflate(getContext(), R.layout.work_comment_fragment, null);
        initView();
        initData();
        dialog.setContentView(rootView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) (getContext().getResources().getDisplayMetrics().heightPixels * 0.5)));
        mBehavior = BottomSheetBehavior.from((View) rootView.getParent());
        return dialog;
    }

你可能感兴趣的:(Android开发的一些记录)