app注册协议做法和注意事项

前言

第一次制作app协议(我简称霸王条款 O(∩_∩)O哈哈~),坑感觉有很多,但是一一解决了,这个就很开心了。小白使用的android版本是8.1,总共有两种实现实现方式。下面一一记录:

实现方式一: app端使用ScrollView+ AlertDialog实现

直接上代码:

String str = "这个可以做特殊字体的操作";
ScrollView sc=new ScrollView(this);
sc.setBackgroundColor(getResources().getColor(R.color.white));
TextView tv = new TextView(this);
tv.setTextSize(20);
tv.setText("这里面是协议内容")//SpannableStringBuilder这个类我没有很多研究  可以理解它是一个类似stringbuffer这样一个类
//主要操作内容样式 如果需要详解可以参考链接:[link](https://www.jianshu.com/p/a157cd9297b5).
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(tv.getText());
ClickableSpan clickableSpan = new ClickableSpan() {
           @Override
            public void onClick(View widget) {
                Log.e(TAG, "onClick: " );
            }
            @Override
            public void updateDrawState(TextPaint ds) {
              	    super.updateDrawState(ds);
             	    ds.setColor(getResources().getColor(android.R.color.holo_red_dark));
            	    ds.setUnderlineText(false);
           	   	    ds.clearShadowLayer();
           }
        };
spannableStringBuilder.setSpan(clickableSpan, 0, str.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(spannableStringBuilder );
sc.addView(tv);

注意:tv协议内容,可能是一连串,不是我们想要的word文档格式,解决方法是:使用Notepad++ 打开
1.点击视图
2.显示符号
3.显示行尾符,显示缩进参考线,显示换行符
然后复制到在这里插入图片描述
别急 还有最后一步 先上代码

 AlertDialog.Builder builder = new  AlertDialog.Builder(this);
 builder .setTitle("注册协议");
 builder.setView(sc);
 builder.setPositiveButton("我已阅读该协议", (dialog, which) -> ivLoginHoldPwdEd.setVisibility(View.VISIBLE));
 builder.show();

效果图效果图
这是第一套方法 当然字体样式 包括标题 以及按钮样式 这个就需要自己去调试了 (协议红色部分)就是我在测试SpannableStringBuilder的作用

实现方式二:WebView+ScrollView+H5文档

第一步 :协议内容实现(作为一个曾经使用H5写过某商城的首页,自信感觉这个不在话下,打开HBuilder,写好了上中下,发现学了android之后,不会写了~~~)哈哈,不过还是有解决的方案的。由于人手不够,我直接在网上将word文档转html文档了,方便快捷效率高。
第二步 scrollview.xml 布局
注意 我第一次使用的布局是直接和当前页面放在同一个布局里面,但最好不要这样做,因为有很多意外。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="horizontal">

   <ScrollView
       android:id="@+id/sv"
       android:layout_width="match_parent"
       android:layout_height="match_parent">

       <LinearLayout
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:orientation="vertical"
           android:descendantFocusability="blocksDescendants"/>

           <WebView
               android:id="@+id/wv"
               android:layout_width="match_parent"
               android:layout_marginRight="10dp"
               android:layout_marginLeft="10dp"
               android:layout_height="wrap_content"/>

       </LinearLayout>
   </ScrollView>
</LinearLayout>

第三步: 核心代码

AlertDialog.Builder builder = new  AlertDialog.Builder(this);
       View view = getLayoutInflater().inflate(R.layout.scrollview, null);
       ScrollView sc =view. findViewById(R.id.sv);
       sc.setBackgroundColor(getResources().getColor(R.color.white));
       String url = "http://192.168.10.4:8080/agreement.html";
       WebView wv = view.findViewById(R.id.wv);
       //设置WebView属性,能够执行Javascript脚本
       wv.getSettings().setJavaScriptEnabled(true);
       wv.loadUrl(url);
       //此方法可以在webview中打开链接而不会跳转到外部浏览器
       //用于控制WebView本身的行为,通过此类对象,可以获取网页相关事件,例如,想在用户单击网页中的超链接,网页加载的开始/结束等时机进行控制;
       wv.setWebViewClient(new WebViewClient() {
           @Override
           public void onPageStarted(WebView view, String url, Bitmap favicon) {
               super.onPageStarted(view, url, favicon);
           }
          @SuppressWarnings("deprecation")
           @Override
          public boolean shouldOverrideUrlLoading(WebView view, String url) {
               return false;
           }

           @TargetApi(Build.VERSION_CODES.N)
           @Override
           public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
               view.loadUrl(request.getUrl().toString());
               return true;
           }
       });
       builder .setTitle("注册协议");
       builder.setView(view);
       builder.setPositiveButton("我已阅读该协议", (dialog, which) -> ivLoginHoldPwdEd.setVisibility(View.VISIBLE));
       builder.show();

注意事项:
webView的加载要在alert前,在后加载会出现空白现象
webView和scrollView都有聚焦事件,会冲突。
所以需要加载xml中的 LinearLayoutandroid:descendantFocusability=“blocksDescendants”

效果图如下 :
效果图

总结

第二种方案样式操作方便。可以灵活的调整样式。(webView有缓存机制,很牛皮!)
第一种比较难受吧,但是加载速度肯定要强过第二种的。各有各的好处。

结语

如果有更好的方案欢迎大家留言,一起学习进步。
一入android深似海,从此web是路人。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值