电话号码:

国际号码区号选择控件:CountryCodePicker  

电话格式验证(国际号码): libphonenumber

 

颜色渐变:

<?xml version="1.0" encoding="utf-8"?>    

[gradient] 声明该shape的属性-渐变色,除此外还有其他属性如corners、stroke、size等等 
[android:angle]渐变色的角度,举例来说,0代表从上至下颜色渐变;45代表从左至右颜色渐变;90代表从下至上颜色渐变… 
[android:startColor&android:endColor] 渐变开始的颜色和渐变结束时的颜色

 

 

Android沉浸式状态栏实现:

https://juejin.im/post/5989ded56fb9a03c3b6c8bde

 

 

android沉浸式状态栏蒙灰:

在setContentView()之前添加代码:

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //去除半透明状态栏

 

谷歌搜索:

在搜索内容后加 “ -关键词 ” 可以屏蔽相关的信息 例如 “love -YouTube” 就可以过滤掉来着YouTube的信息,这点可以在我们使用url拼接时起到过滤的作用,可用于爬数据

 

 

Android版本bug 8.0:

Android8.0不能同时把activity设置为强制竖屏和沉浸式,会导致闪退崩溃。

既不能在AndroidManifest同时设置

android:screenOrientation="portrait"android:theme="@style/translucent"  

 

 

弹窗第三方:

可以简单实现对弹窗位置的控制,点击事件,蒙层等。

https://github.com/razerdp/BasePopup

 

解析视频网站:

https://9xbuddy.com/

可以利用webview代码调用其,实现对多个网站视频来源的解析

示例代码:

 class InnerJSInterface {        @JavascriptInterface        public void parseSource(String source, String checkUrl, boolean second) {      //视频的来源url      List list = new ArrayList();            try {                Document document = Jsoup.parse("" + source + "");                boolean match = false;                for (Element element : document.getElementsByTag("div")) {                    if (element.classNames().contains("night-white") && element.classNames().contains("items-center") && element.classNames().contains("px-3")) {                        for (Element child : element.getElementsByTag("div")) {                            if (child.text().equalsIgnoreCase("mp4") && child.classNames().contains("w-24")) {                                match = true;                            }                        }                        if (!match) {                            continue;                        }                        for (Element child : element.getElementsByTag("div")) {                            if (child.classNames().contains("w-full") && child.classNames().contains("mt-6")) {                                String url = child.getElementsByTag("a").get(0).attr("href");                                list.add(url);                            }                        }                    }                }            } catch (Exception e) {            }        }    }--------------------------  private void query9xbuddy(String webUrl) {        WebView parseWebView = new WebView(this);        WebSettings settings = parseWebView.getSettings();        String userAgent = settings.getUserAgentString();        parseWebView.addJavascriptInterface(new InnerJSInterface(), "localInterface");        settings.setJavaScriptEnabled(true);        settings.setBlockNetworkImage(true);        settings.setCacheMode(WebSettings.LOAD_NO_CACHE);        parseWebView.setWebViewClient(new WebViewClient() {            @Override            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {                return true;            }            @Override            public void onPageStarted(WebView view, String url, Bitmap favicon) {                super.onPageStarted(view, url, favicon);            }            @Override            public void onPageFinished(WebView view, String url) {                super.onPageFinished(view, url);            }        });        parseWebView.setWebChromeClient(new WebChromeClient() {            boolean isOnec = true;            @Override            public void onProgressChanged(WebView view, int newProgress) {                if (newProgress >= 99 && ("https://9xbuddy.com/process?url=" + webUrl).equals(view.getOriginalUrl())) {                    if (isOnec) {                        view.evaluateJavascript("javascript:window.localInterface.parseSource("                                + "document.getElementsByTagName('html')[0].innerHTML,'" + webUrl + "',false);", null);                    }                    isOnec = false;                                 }            }        });        parseWebView.loadUrl("https://9xbuddy.com/process?url=" + webUrl);    }

 

 

  • 反编译apk

https://github.com/ufologist/onekey-decompile-apk

 

  • 方法数超过限制

implementation 'com.android.support:multidex:1.0.3'

 

  • 消息通知适配 

https://segmentfault.com/a/1190000017186150

 

 

  • 导入新的第三方库,或升级原有的库的版本时出错

可以试试把Android库升级到AndroidX,因为很多新的库或版本是依赖AndroidX进行开发的,在studio中可以一键升级,也建议都用AndroidX进行开发,毕竟谷歌做了很多的优化升级。 

在顶部工具栏: Refactor中找到 Migrate to AndroidX  (如果没有,可以升级studio的版本)

 

  • ScrollView嵌套RecyclerView

 https://www.jianshu.com/p/5ba68d088c60

 

  • 实现冷热启动指定先打开某一个页面,例如广告页面,加载页面等

https://www.jianshu.com/p/6482b89fe506

android:launchMode="singleTask"
                                             

可以通过对要求页面设置这些属性来实现 

 

  • 杀死自己应用的进程

android.os.Process.killProcess(android.os.Process.myPid());

 

  • 获取当前屏幕是熄屏还是显示(View的display的state方法)

mBottom.getDisplay().getState()

 

  • 获取当前APP的系统位置

高版本的安卓不允许在自己应用以外的位置创建新文件,所以需要在该目录下进行文件读写,不然创建文件时会一直返回false

MApp.getInstance().getApplicationContext().getFilesDir().getAbsolutePath()

 


 

更多相关文章

  1. android 热更新之腾讯Bugly 及所遇问题的修改总结
  2. 【Android(安卓)Studio 4.0.0】高版本Android(安卓)Studio 打开
  3. 在移动端开发中,容易遇到的问题集合。
  4. Android版本更新历史总结(致那些年安卓开发打怪升级之路)
  5. android沉浸式状态栏的最简单实现
  6. Ubuntu Android(安卓)2.3的编译环境 Ubuntu 11.04 x64的版本
  7. Android仿照钉钉的人名头像
  8. eclipse+android开发logcat无法输出日志解决办法
  9. java.lang.UnsatisfiedLinkError: dlopen failed: "/data/app/li

随机推荐

  1. [转]近百个Android优秀开源项目,覆盖Andro
  2. Android(安卓)SQLite教程:内部架构及SQLit
  3. Android Battery 开发(二)
  4. [置顶] JuheNews For aNdroid (改进版)
  5. Android(安卓)系统编译与调试
  6. Android中多个Activity间的数据共享
  7. Android(安卓)9.0 最完整的新特性列表
  8. 专题 - Web应用->Web应用中适配不同屏幕
  9. Android(安卓)HTTP实例 使用GET方法和POS
  10. 利用WebView通过javascript调用android j