国际号码区号选择控件:CountryCodePicker
电话格式验证(国际号码): libphonenumber
[gradient] 声明该shape的属性-渐变色,除此外还有其他属性如corners、stroke、size等等
[android:angle]渐变色的角度,举例来说,0代表从上至下颜色渐变;45代表从左至右颜色渐变;90代表从下至上颜色渐变…
[android:startColor&android:endColor] 渐变开始的颜色和渐变结束时的颜色
https://juejin.im/post/5989ded56fb9a03c3b6c8bde
在setContentView()之前添加代码:
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //去除半透明状态栏
在搜索内容后加 “ -关键词 ” 可以屏蔽相关的信息 例如 “love -YouTube” 就可以过滤掉来着YouTube的信息,这点可以在我们使用url拼接时起到过滤的作用,可用于爬数据
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);
}
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的版本)
https://www.jianshu.com/p/5ba68d088c60
https://www.jianshu.com/p/6482b89fe506
android:launchMode="singleTask"
可以通过对要求页面设置这些属性来实现
android.os.Process.killProcess(android.os.Process.myPid());
mBottom.getDisplay().getState()
高版本的安卓不允许在自己应用以外的位置创建新文件,所以需要在该目录下进行文件读写,不然创建文件时会一直返回false
MApp.getInstance().getApplicationContext().getFilesDir().getAbsolutePath()