Android 진급의 길 - 자주 사용하는 작은 기능

아래의 모든 작은 기능은 제가 프로젝트의 장기적인 개발에서 사용한 것입니다. 모든 앱의 개발을 편리하게 하기 위해 여기에 기록을 해서 당신과 저를 편리하게 합니다.
기우편
  • 안드로이드 진급로 - 상용 가젯
  • 안드로이드 프로젝트 요약 - 일반적인 문제 및 해결 방법
  • 기능 목록
  • 두 번 되돌아오기, 응용 프로그램 종료
  • 컨텐트 복사, 붙여넣기
  • 화면 너비 확보
  • 소프트 키보드 높이 획득
  • 자동 플로피 키보드
  • 소프트 키보드 숨기기
  • 소프트 키보드 상태 감지(팝업 회수)
  • 폭력 방지 클릭 방법
  • 폭력 방지 클릭 방법(자신이 클릭 간격을 설정)
  • 입력한 소문자가 대문자로 자동 변환
  • 진동 애니메이션
  • Layout 외부 거리 설정
  • 같은 컨트롤 아래 서로 다른 텍스트의 전시 효과(html 방법)
  • 현재 프로젝트의 그림의 구체적인 저장 위치 가져오기
  • 핸드폰에 위챗, QQ, 알리페이, 웨이보
  • 설치 여부를 검사한다.
  • 깨우기 앱
  • URL을 통해 대응하는 삼자 앱 메인(내 사용 장면: 웹뷰 삼자 결제 시 로컬 앱 불러일으키기)
  • Show Time ~
    두 번 되돌아오기, 응용 프로그램 종료
      /**
         *         
         */
        long exitTime = 0;
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
                if ((System.currentTimeMillis() - exitTime) > 2000) {
                    toast("        ");
                    exitTime = System.currentTimeMillis();
                } else {
                    finish();
                    System.exit(0);
                }
                return true;
            }
            return super.onKeyDown(keyCode, event);
        }
    

    컨텐트 복사, 붙여넣기
    //     
    //   -    
    ClipboardManager cbm=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
    cbm.setText("        ");
    
    //   -   
    ClipboardManager cbm=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
    edit1.setText(cbm.getText());
    

    화면 너비 가져오기
        /**
         *     
         * */
        public static int getScreenWith(Context context) {
            WindowManager manager = (WindowManager) context
                    .getSystemService(Context.WINDOW_SERVICE);
            Display display = manager.getDefaultDisplay();
            return display.getWidth();
        }
    
        /**
         *     
         * */
        public static int getScreenHeight(Context context) {
            WindowManager manager = (WindowManager) context
                    .getSystemService(Context.WINDOW_SERVICE);
            Display display = manager.getDefaultDisplay();
            return display.getHeight();
        }
    

    소프트 키보드 높이 가져오기
         et.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener(){
                //                 。
                @Override
                public void onGlobalLayout() {
                    Rect r = new Rect();
                    //          
                    MainActivity.this.getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
                    //       
                    int screenHeight =  MainActivity.this.getWindow().getDecorView().getRootView().getHeight();
                    //              ,                0             
                    int heightDifference = screenHeight - r.bottom;
                    Log.d("Keyboard Size", "Size: " + heightDifference);
                } 
    	 });
    

    자동 플로피 키보드 팝업
    /**
    *         ,       ,      ~
    */
    private void showKeyboard(){
            InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            inputMethodManager.showSoftInput(editText, 0);
        }
    

    소프트 키보드 숨기기
    방법 1:
       /**
        *     
        */
        void hintKeyboard() {
            InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            if (inputMethodManager.isActive()) {
                inputMethodManager.hideSoftInputFromWindow(MainActivity.this.getCurrentFocus().getWindowToken(), 0);
            }
        }
    

    방법 2:
      /**
         * des:     ,       activity
         */
        public static void hideInputForce(Activity activity) {
            if (activity == null || activity.getCurrentFocus() == null) {
                return;
            }
            InputMethodManager imm = (InputMethodManager) activity.getSystemService(INPUT_METHOD_SERVICE);
            if (imm != null) {
                imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
            }
        }
    

    소프트 키보드 상태 수신(팝업 롤백)
    안드로이드에서 개발한 감청 소프트 키보드 상태(팝업 회수)
  • 사용자 정의 감청 클래스KeyboardStateObserver(직접 Copy 사용 가능)
  • package         
    /**
     * @author MrLiu
     * @date 2019/9/12
     * desc
     */
    import android.app.Activity;
    import android.graphics.Rect;
    import android.util.Log;
    import android.view.View;
    import android.view.ViewTreeObserver;
    import android.widget.FrameLayout;
    
    public class KeyboardStateObserver {
    
        private static final String TAG = KeyboardStateObserver.class.getSimpleName();
    
        public static KeyboardStateObserver getKeyboardStateObserver(Activity activity) {
            return new KeyboardStateObserver(activity);
        }
    
        private View mChildOfContent;
        private int usableHeightPrevious;
        private OnKeyboardVisibilityListener listener;
    
        public void setKeyboardVisibilityListener(OnKeyboardVisibilityListener listener) {
            this.listener = listener;
        }
    
        private KeyboardStateObserver(Activity activity) {
            FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content);
            mChildOfContent = content.getChildAt(0);
            mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                public void onGlobalLayout() {
                    possiblyResizeChildOfContent();
                }
            });
        }
    
        private void possiblyResizeChildOfContent() {
            int usableHeightNow = computeUsableHeight();
            if (usableHeightNow != usableHeightPrevious) {
                int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();
                int heightDifference = usableHeightSansKeyboard - usableHeightNow;
                if (heightDifference > (usableHeightSansKeyboard / 4)) {
                    if (listener != null) {
                        listener.onKeyboardShow();
                    }
                } else {
                    if (listener != null) {
                        listener.onKeyboardHide();
                    }
                }
                usableHeightPrevious = usableHeightNow;
                Log.d(TAG,"usableHeightNow: " + usableHeightNow + " | usableHeightSansKeyboard:" + usableHeightSansKeyboard + " | heightDifference:" + heightDifference);
            }
        }
    
        private int computeUsableHeight() {
            Rect r = new Rect();
            mChildOfContent.getWindowVisibleDisplayFrame(r);
    
            Log.d(TAG,"rec bottom>" + r.bottom + " | rec top>" + r.top);
            return (r.bottom - r.top);//      : return r.bottom
        }
    
        public interface OnKeyboardVisibilityListener {
            void onKeyboardShow();
    
            void onKeyboardHide();
        }
    }
    
    
  • 사용 방법
  • 주의: 이 방식은 키보드를 팝업할 때 페이지의 원래 레이아웃을 변동시켜야 하기 때문에 작동하지 않으면 안드로이드 매니페스트에서 시도해 보십시오.xml 파일에 android 설정: window Soft Input Mode = "adjust Resize | state Hidden"
    @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
    
         KeyboardStateObserver.getKeyboardStateObserver(this).
                 setKeyboardVisibilityListener(new KeyboardStateObserver.OnKeyboardVisibilityListener() {
             @Override
             public void onKeyboardShow() {
                 Toast.makeText(MainActivity.this,"    ",Toast.LENGTH_SHORT).show();
             }
    
             @Override
             public void onKeyboardHide() {
                 Toast.makeText(MainActivity.this,"    ",Toast.LENGTH_SHORT).show();
             }
         });
     }
    
    

    폭력 방지 클릭 방법
        /**
         *        
         * lastClickTime = 0
         */
        public static Boolean noDoubleClick() {
            long currentTimeMillis = System.currentTimeMillis();
            if (currentTimeMillis - lastClickTime > 300) {
                lastClickTime = currentTimeMillis;
                //    
                return true;
            }
            return false;
        }
    

    폭력 방지 클릭 방법(스스로 클릭 간격을 설정)
       /**
         *        
         * @param spaceTime     (ms)
         *  lastClickTime = 0
         */
        public static Boolean noDoubleClick(long spaceTime) {
            long currentTimeMillis = System.currentTimeMillis();
            if (currentTimeMillis - lastClickTime > spaceTime) {
                lastClickTime = currentTimeMillis;
                //    
                return true;
            }
            return false;
        }
    

    입력한 소문자가 자동으로 대문자로 변환됨
    public class A2AChange extends ReplacementTransformationMethod {
        @Override
        protected char[] getOriginal() {
            char[] aa = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z' };
            return aa;
        }
    
        @Override
        protected char[] getReplacement() {
            char[] cc = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' };
            return cc;
        }
    }
    

    사용 방법
    textView.setTransformationMethod(new A2AChange());
    

    진동 애니메이션
     private void setMsgAnimator() {
       ObjectAnimator a = ObjectAnimator.ofFloat(rlMsgCenter, "translationX", 0, 10);
            a.setInterpolator(new LinearInterpolator());
            a.setDuration(40);
            a.setRepeatCount(20);
            a.setRepeatMode(ObjectAnimator.REVERSE);
            a.start();
     }
    

    Layout 외부 여백 설정
     public void margin(View v, int l, int t, int r, int b) {
            if (v.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
                ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
                p.setMargins(l, t, r, b);
                v.requestLayout();
            }
        }
    

    같은 컨트롤 아래 서로 다른 텍스트의 디스플레이 효과 설정하기(html 방법)
    //    
     Html.fromHtml("       " + "" + "       (   )" + "")
    
    //    (      ,              ~)
     mContext.setText(Html.fromHtml("  " + "" + "      " + ""));
    
    //    
              
                 
    

    현재 프로젝트의 그림의 구체적인 저장 위치를 가져옵니다
    /**R.mipmap.ic_status_add       */
    String resourcePackageName = getResources().getResourcePackageName(R.mipmap.ic_status_add);
    String resourceTypeName = getResources().getResourceTypeName(R.mipmap.ic_status_add);
    String resourceEntryName = getResources().getResourceEntryName(R.mipmap.ic_status_add);
    String urlPhoto = resourcePackageName + "/" + resourceTypeName + "/" + resourceEntryName;
    

    핸드폰에 위챗, QQ, 알리페이, 웨이보를 설치했는지 검사하다
    public class JudgeApplicationIsExistUtils {
        /**
         *         
         */
        public static boolean isWeixinAvilible(Context context) {
            final PackageManager packageManager = context.getPackageManager();//   packagemanager
            List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);//              
            if (pinfo != null) {
                for (int i = 0; i < pinfo.size(); i++) {
                    String pn = pinfo.get(i).packageName;
                    if (pn.equals("com.tencent.mm")) {
                        return true;
                    }
                }
            }
            return false;
        }
        
        /**
         *               S7
         */
         private static IWXAPI api; //     ,   SDK     
    	 public static boolean isWeChatAppInstalled(Context context) {
            api = WXAPIFactory.createWXAPI(context, "Your WeChat AppId");
            if (api.isWXAppInstalled() && api.isWXAppSupportAPI()) {
                return true;
            } else {
                final PackageManager packageManager = context.getPackageManager();//   packagemanager
                List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);//              
                if (pinfo != null) {
                    for (int i = 0; i < pinfo.size(); i++) {
                        String pn = pinfo.get(i).packageName;
                        if (pn.equalsIgnoreCase("com.tencent.mm")) {
                            return true;
                        }
                    }
                }
                return false;
            }
        }
        
       /**
         *          
         *
         * @param context
         * @return
         */
        public static boolean isAliPayInstalled(Context context) {
            Uri uri = Uri.parse("alipays://platformapi/startApp");
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            ComponentName componentName = intent.resolveActivity(context.getPackageManager());
            return componentName != null;
        }
        
        /**
         *   qq    
         */
        public static boolean isQQClientAvailable(Context context) {
            final PackageManager packageManager = context.getPackageManager();
            List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);
            if (pinfo != null) {
                for (int i = 0; i < pinfo.size(); i++) {
                    String pn = pinfo.get(i).packageName;
                    if (pn.equals("com.tencent.mobileqq")) {
                        return true;
                    }
                }
            }
            return false;
        }
     
        /**
         *     
         */
        public static boolean isWeiboIAvilible(Context context) {
            PackageManager pm;
            if ((pm = context.getApplicationContext().getPackageManager()) == null) {
                return false;
            }
            List<PackageInfo> packages = pm.getInstalledPackages(0);
            for (PackageInfo info : packages) {
                String name = info.packageName.toLowerCase(Locale.ENGLISH);
                if ("com.sina.weibo".equals(name)) {
                    return true;
                }
            }
            return false;
        }
    }
    

    사용 방법
     if (JudgeApplicationIsExistUtils.isQQClientAvailable(LoginActivity.this)){
    //             ,         
     }else {
            Toast.makeText(LoginActivity.this,"          QQ!",Toast.LENGTH_SHORT).show();
    }
    

    깨우다
    깨우기에 실패하면, 여기 제 8조를 보십시오--~
    PackageManager packageManager = getPackageManager();
    Intent intent=new Intent();
    //pageage Name        !
    intent = packageManager.getLaunchIntentForPackage("package Name");
    startActivity(intent);
    

    특수 장면: 현재 핸드폰에 우리가 깨울 앱이 없으면
    Intent view = new Intent ("android.intent.action.VIEW",Uri.parse("    "));
    startActivity(viewIntent);
    

    주의:uri가 움직일 때, 액션 설정과category 설정이 없어서는 안 됩니다.category 설정이 고정되어 있음;아래와 같다
    <category android:name="android.intent.category.DEFAULT" />
    

    URL을 통해 대응하는 삼자 app 메인 부품을 전환(내 사용 장면: 웹뷰 삼자 결제 시 로컬 app 불러일으키기)
     //loadurl :        url
     Intent intent = new Intent();
     intent.setAction(Intent.ACTION_VIEW);
     intent.setData(Uri.parse(loadUrl));
     startActivity(intent);
    

    좋은 웹페이지 즐겨찾기