话不多说先上图:

    

apk下载:百度网盘下载   提取码:l8ry

用到知识点:

1.WebView布局,并引入html代码让拿到的数据里面的标签生效。

由于刚拿到的数据全是<p>所以显示在WebView布局会乱掉,要想标签生效、首行缩进就要引入html代码了,用法如下:

首先定义html代码:

private static final String WEBVIEW_CONTENT_NIGHT = "<html><head></head><body style=\"text-align:justify;margin:10;text-indent:2em; background: #313639;\">%s</body></html>";
private static final String WEBVIEW_CONTENT_LIGHT = "<html><head></head><body style=\"text-align:justify;margin:10;text-indent:2em; background: #ffffff;\">%s</body></html>";

然后拿到数据并渲染:

wv.loadDataWithBaseURL(null, String.format(WEBVIEW_CONTENT_NIGHT, obj2.getString("content")), "text/html", "utf-8", null);

2.上滑WebView隐藏多余布局。为节省阅读空间在上滑的时候我想要隐藏作者和字数,所以这里就要用OnScrollChangeListener,首先实现OnScrollChangeListener:

然后获取控件并实现监听:

wv = findViewById(R.id.wv);
wv.setOnScrollChangeListener(this);

最后在方法中设置纵向滑动多上距离隐藏布局:

@Override
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {if (scrollY > 100) {rl.setVisibility(View.GONE);//隐藏作者} else if (scrollY == 0) {rl.setVisibility(View.VISIBLE);//显示作者}}

3.点击两次返回键退出程序。为防止误触,所以设置点击一次返回键提示再按一次退出程序,两次间隔时间两秒。方法如下:

private boolean mBackKeyPressed = false;//记录是否有首次按键//点击两次退出程序
public void onBackPressed() {if (!mBackKeyPressed) {Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();mBackKeyPressed = true;new Timer().schedule(new TimerTask() {//延时两秒,如果超出则清除第一次记录@Overridepublic void run() {mBackKeyPressed = false;}}, 2000);} else {//结束Activityfinish();}}

4.还有一个是比较常用的全屏显示隐藏状态栏。(一定要加在setContentView()之上)

//去掉Activity上面的状态栏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);

5.底部弹窗并保存ToggleButton的按钮状态(这里用了0和1判断开和关也可用true和flase)根据状态判断是否为夜间模式。

  dialog = new Dialog(this, R.style.ActionSheetDialogStyle);//填充对话框的布局inflate = LayoutInflater.from(this).inflate(R.layout.dialog, null);//获取控件tb = inflate.findViewById(R.id.tb);//夜间//获取监听tb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {if (isChecked) {try {wv.loadDataWithBaseURL(null, String.format(WEBVIEW_CONTENT_NIGHT, obj2.getString("content")), "text/html", "utf-8", null);sprfMain = getSharedPreferences("counter", Context.MODE_PRIVATE);editorMain = sprfMain.edit();editorMain.putInt("bg", 0);editorMain.commit();ll.setBackgroundResource(R.color.colorNight);v_x.setBackgroundResource(R.color.colorNight);} catch (JSONException e) {e.printStackTrace();}} else {try {wv.loadDataWithBaseURL(null, String.format(WEBVIEW_CONTENT_LIGHT, obj2.getString("content")), "text/html", "utf-8", null);sprfMain = getSharedPreferences("counter", Context.MODE_PRIVATE);editorMain = sprfMain.edit();editorMain.putInt("bg", 1);editorMain.commit();ll.setBackgroundResource(R.color.colorWhite);v_x.setBackgroundResource(R.color.colorLightGray);} catch (JSONException e) {e.printStackTrace();}}}});//取出保存的值sprfMain = getSharedPreferences("counter", Context.MODE_PRIVATE);bg = sprfMain.getInt("bg", 1);if (bg == 0) {tb.setChecked(true);} else if (bg == 1) {tb.setChecked(false);}//将布局设置给Dialogdialog.setContentView(inflate);//获取当前Activity所在的窗体Window dialogWindow = dialog.getWindow();//设置Dialog从窗体底部弹出dialogWindow.setGravity(Gravity.BOTTOM);//获得窗体的属性WindowManager.LayoutParams lp = dialogWindow.getAttributes();lp.y = 0;//设置Dialog距离底部的距离//宽度填满lp.width = WindowManager.LayoutParams.MATCH_PARENT;//将属性设置给窗体dialogWindow.setAttributes(lp);dialog.show();//显示对话框
ActionSheetDialogStyle样式文件和弹出动画:
<style name="ActionSheetDialogStyle" parent="@android:style/Theme.Dialog"><!-- 背景透明 --><item name="android:windowBackground">@android:color/transparent</item><item name="android:windowContentOverlay">@null</item><!-- 浮于Activity之上 --><item name="android:windowIsFloating">true</item><!-- 边框 --><item name="android:windowFrame">@null</item><!-- Dialog以外的区域模糊效果 --><item name="android:backgroundDimEnabled">false</item><!-- 无标题 --><item name="android:windowNoTitle">true</item><!-- 半透明 --><item name="android:windowIsTranslucent">true</item><!-- Dialog进入及退出动画 --><item name="android:windowAnimationStyle">@style/ActionSheetDialogAnimation</item></style><!-- ActionSheet进出动画 --><style name="ActionSheetDialogAnimation" parent="@android:style/Animation.Dialog"><item name="android:windowEnterAnimation">@anim/actionsheet_dialog_in</item><item name="android:windowExitAnimation">@anim/actionsheet_dialog_out</item></style>
actionsheet_dialog_in:
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"android:duration="200"android:fromYDelta="100%"android:toYDelta="0" />
actionsheet_dialog_out:
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"android:duration="200"android:fromYDelta="0"android:toYDelta="100%" />
还有dialog布局:(根据自己的布局修改)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/colorWhite"android:orientation="vertical"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:layout_marginTop="20dp"android:layout_marginRight="10dp"android:layout_marginBottom="30dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="60dp"android:gravity="center"android:text="夜间" /><ToggleButtonandroid:id="@+id/tb"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_gravity="center"android:background="@android:color/transparent"android:button="@drawable/btn_backgrounds"android:textOff="关"android:textOn="开" /></RelativeLayout>
</LinearLayout>

最后根据保存的数据判断并显示是否为夜间模式:

//取出保存的值sprfMain = getSharedPreferences("counter", Context.MODE_PRIVATE);bg = sprfMain.getInt("bg", 1);if (bg == 0) {wv.loadDataWithBaseURL(null, String.format(WEBVIEW_CONTENT_NIGHT, obj2.getString("content")), "text/html", "utf-8", null);ll.setBackgroundResource(R.color.colorNight);v_x.setBackgroundResource(R.color.colorNight);} else if (bg == 1) {wv.loadDataWithBaseURL(null, String.format(WEBVIEW_CONTENT_LIGHT, obj2.getString("content")), "text/html", "utf-8", null);ll.setBackgroundResource(R.color.colorWhite);v_x.setBackgroundResource(R.color.colorLightGray);}

详细代码请到GitHub:GitHub - cuiwenju2017/EveryDayIs: 每日一文

Android每日一文相关推荐

  1. 《Android 应用 之路》 每日一文简单版Kotlin

    1. 简介 前段时间学习Kotlin,准备找个东西下手,复杂的内容暂时也处理不了,所以选了"每日一文"的接口作为测试,主要是为了熟悉Kotlin的语法和anko中的数据库操作. 2 ...

  2. 每日一文APP实现(网页json解析)

    hello,又是我鑫鑫 今天给大家带来每日一文APP的实现,从中会用到网页json解析,这里懂的都懂啊,这篇文章多多少少对你也有点启发,那么话不多说,直接看代码吧 -MainActivity.java ...

  3. 使用android SDk帮助文档(英文) 下载中文SDK帮助文档(中文)

    2019独角兽企业重金招聘Python工程师标准>>> 其实android sdk本身里面包含了很多开发帮助文档(英文版).具体的使用步骤如下 1.打开sdk下载帮助文档目录 我的安 ...

  4. android 英文帮助文档地址,使用android SDk帮助文档(英文) 下载中文SDK帮助文档(中文)...

    其实android sdk本身里面包含了很多开发帮助文档(英文版).具体的使用步骤如下 1.打开sdk下载帮助文档目录 我的安装目录在 C:\Program Files\Android\android ...

  5. android Word 显示文档结构图

    今天,简单讲讲android里浏览Word文档时,如何显示文档的文档结构图. 这个其实也很简单,之前我把自己用WPS写成的文档发送给领导查看,他用的是Word查看的文档,所以没有显示我在WPS上设置的 ...

  6. CTS(16 )---Android 兼容性定义文档

    Android 兼容性定义文档 欢迎阅读 Android 兼容性定义文档 (CDD).本文档列举了设备需要满足哪些要求才能与最新的 Android 版本兼容.为了与 Android 兼容,设备实现必须 ...

  7. android 每日构建_Android构建类型和产品风味

    android 每日构建 In this tutorial, we'll be discussing Android Build Types and Product Flavors. We'll se ...

  8. 发布了每日一文应用,每日一文,每天阅读,简单生活。每天精选一篇不同的文章,也可以随机阅读往日精选文章...

    每日一文是一个简单的中文阅读应用,每天精选一篇不同的文章给读者,同时也可以随机阅读往日精选文章. 每天花10分钟阅读一篇文章, 一个月可以有大约50000字的阅读量, 一年有近60万字的阅读量, 专注 ...

  9. 微博Android平台SDK文档

    博Android平台SDK文档 编号:WEIBO_ANDROID_SDK 版本:WEIBO_ANDROID_SDK V3.1.2 修订记录: 时间 文档版本 修订人 备注 2012/7/20 2.0. ...

最新文章

  1. opencv-mediapipe手部关键点识别
  2. python自学路线-各个阶段的python学习路线?
  3. 登录 googlecloud,链接数据库
  4. 新论文推荐:Auto-Keras:自动搜索深度学习模型的网络架构和超参数
  5. go 语言系列(二)基本数据类型和操作符
  6. matlab激光散斑散射半径测量,激光散斑测量2011412225741
  7. 三星Galaxy Note10配件图曝光:红蓝配色成焦点
  8. 程序员入门c语言还是java,先学java还是c语言?入门学哪种语言?
  9. mysql中distinct删除_MySQL distinct查询返回具有重复信息的行,需要重复数据删除
  10. winxp下安装虚拟机,并安装linux操作系统
  11. Java的结构之美【2】——销毁对象
  12. PC-红警联机问题与下载
  13. 浏览器自动化操作(Web Browser Automation)(一)
  14. 区分统一社会信用代码、组织机构代码、注册号
  15. poj1637(混合图判欧拉回路)
  16. 保姆式学习,解决夜神模拟器ADB版本不一致问题
  17. wind金融数据接口python_python使用用Wind接口获取全部A股历史交易数据
  18. 固实压缩文件容易损坏_你不知道的压缩软件小技巧1
  19. 变量的作用域和生存期:_生存分析简介:
  20. 偶然获得京东内推,四面之后成功拿下offer

热门文章

  1. 如果将计算机网络划分为,计算机网络:如果将192.12.66.128/25划分为三个子网,其中子网1可以容纳50台计算机,...
  2. 免疫佐剂CpG ODN说明——艾美捷CpG ODN 方案
  3. java实现看门狗_Watchdog看门狗分析
  4. 程序员该考虑什么时候辞职?
  5. 微博登录记录pythonurllib_Python使用cookielib和urllib2模拟登陆新浪微博并抓取数据...
  6. 程序员最恐怖的噩梦是什么?
  7. java8 新特性精心整理(全)——新 Date/Time API
  8. Ensp仿真实验 一会通 一会不通
  9. html中什么是功能链接,链接是什么?(链接的意思与功能)
  10. 路径遍历(目录遍历)