android开发学习积累(四)
电话号码:
国际号码区号选择控件: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()
更多相关文章
- android 热更新之腾讯Bugly 及所遇问题的修改总结
- 【Android(安卓)Studio 4.0.0】高版本Android(安卓)Studio 打开
- 在移动端开发中,容易遇到的问题集合。
- Android版本更新历史总结(致那些年安卓开发打怪升级之路)
- android沉浸式状态栏的最简单实现
- Ubuntu Android(安卓)2.3的编译环境 Ubuntu 11.04 x64的版本
- Android仿照钉钉的人名头像
- eclipse+android开发logcat无法输出日志解决办法
- java.lang.UnsatisfiedLinkError: dlopen failed: "/data/app/li