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下载地址