Android 协议申明对话框

        1.对话框要求打开应用后自动弹出,点击取消关闭对话框,勾选复选框后才可以点击确定按钮,点击确定后关闭对话框,以后该对话框后不再弹出

        2.对话框文本内容部分需要加粗或者超链接

        实现效果如下图:

         UI布局都比较简单,主要是文本内容处理,存在俩种方式,第一种是使用HTML标签对需要加粗或者修改颜色的文字进行标记;第二种是通过SpannableString对需要处理的文本进行设置,本文使用的是SpannableString。

代码如下:

package com.example.demo;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.app.Dialog;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextPaint;
import android.text.method.LinkMovementMethod;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.ClickableSpan;
import android.text.style.StyleSpan;
import android.text.style.UnderlineSpan;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    SharedPreferences sharedPreferences;
    AlertDialog dialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d("OOO", "onResume");
        sharedPreferences = getSharedPreferences("demo_data", Context.MODE_PRIVATE);
        Boolean isfirstopen = sharedPreferences.getBoolean("isfirstopen", true);
        if (isfirstopen) {
            showDialog();
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (dialog != null && dialog.isShowing()) {
            dialog.dismiss();
        }
    }

    String str = "感谢您选择壁纸制作APP!我们非常重视您的个人信息和隐私保护。" +
            "为了更好地保障您的个人权益,在您使用我们的产品前," +
            "请务必审慎阅读《隐私政策》和《用户协议》内的所有条款," +
            "尤其是:\n1.我们对您的个人信息的收集/保存/使用/对外提供/保护等规则条款,以及您的用户权利等条款; " +
            "\n2. 约定我们的限制责任、免责条款; \n3.其他以颜色或加粗进行标识的重要条款。如您对以上协议有任何疑问," +
            "可通过人工客服或发邮件至 123456789@qq.com 与我们联系。您点击\"同意并继续”的行为即表示您已阅读完毕并同意以上协议的全部内容。" +
            "如您同意以上协议内容,请点击\"同意并继续”,开始使用我们的产品和服务!";

    public void showDialog() {
        View view = LayoutInflater.from(this).inflate(R.layout.dialog_layout, null, false);
        AlertDialog.Builder builders = new AlertDialog.Builder(this);
        builders.setView(view);
        dialog = builders.create();
        dialog.setCanceledOnTouchOutside(false);
        dialog.setCancelable(false);
        dialog.show();
        TextView contentview = (TextView) view.findViewById(R.id.content);

        SpannableString spannedString = new SpannableString(str);
        String clickstring1 = "《隐私政策》";
        String clickstring2 = "《用户协议》";

        String blodtring1 = "1.我们对您的个人信息的收集/保存/使用/对外提供/保护等规则条款,以及您的用户权利等条款; ";

        int index1 = str.indexOf(clickstring1);
        int index2 = str.indexOf(clickstring2);
        int index3 = str.indexOf(blodtring1);

        spannedString.setSpan(new UnderlineSpan() {
            @Override
            public void updateDrawState(@NonNull TextPaint ds) {
                super.updateDrawState(ds);
                ds.setUnderlineText(false);
            }
        }, index3, index3 + blodtring1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

        AbsoluteSizeSpan sizeSpan = new AbsoluteSizeSpan(25, true);
        spannedString.setSpan(sizeSpan, index2, index2 + clickstring2.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

        spannedString.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), index3, index3 + blodtring1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

        ClickableSpan clickableSpan1 = new ClickableSpan() {
            @Override
            public void onClick(@NonNull View widget) {

            }

            @Override
            public void updateDrawState(@NonNull TextPaint ds) {
                super.updateDrawState(ds);
                ds.setColor(Color.parseColor("#FF6200EE"));
                ds.setUnderlineText(false);
            }
        };
        spannedString.setSpan(clickableSpan1, index1, index1 + clickstring1.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

        ClickableSpan clickableSpan2 = new ClickableSpan() {
            @Override
            public void onClick(View view) {
                Log.d("OOO", "onClick");
            }

            @Override
            public void updateDrawState(TextPaint ds) {
                super.updateDrawState(ds);
                ds.setColor(Color.parseColor("#FF6200EE"));
                ds.setUnderlineText(false);
            }
        };
        spannedString.setSpan(clickableSpan2, index2, index2 + clickstring2.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

        contentview.setHighlightColor(Color.TRANSPARENT);
        contentview.setMovementMethod(LinkMovementMethod.getInstance());

        contentview.setText(spannedString);

        Button ok = (Button) view.findViewById(R.id.ok);
        ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.putBoolean("isfirstopen", false);
                editor.apply();
                dialog.dismiss();
            }
        });

        Button cancle = (Button) view.findViewById(R.id.cancle);
        cancle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (dialog.isShowing()) {
                    dialog.dismiss();
                    finish();
                }
            }
        });

        CheckBox checkBox = (CheckBox) view.findViewById(R.id.ischeck);
        checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    ok.setEnabled(true);
                } else {
                    ok.setEnabled(false);
                }
            }
        });

        setDgSize(dialog);
    }

    private void setDgSize(Dialog dg) {
        Window dialogWindow = dg.getWindow();
        WindowManager.LayoutParams lp = dialogWindow.getAttributes();
        dialogWindow.setGravity(Gravity.CENTER);
        int width = this.getResources().getDimensionPixelSize(R.dimen.dialog_width);
        int height = this.getResources().getDimensionPixelSize(R.dimen.dialog_height);
        lp.width = width;
        lp.height = height;
        dialogWindow.setAttributes(lp);
    }
}

   结尾附上demo下载地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值