Android隱私彈框功能的實現(xiàn)
編寫Android的APP進(jìn)去點擊的用戶隱私彈框
因為現(xiàn)在發(fā)布APP現(xiàn)在都需要在發(fā)布前生成一個用戶隱私彈框讓用戶點擊,所以手寫了一個用以使用
效果圖
java代碼
public class PrivateDialog { private static PrivateDialog instace; public PrivateDialog() { } public static PrivateDialog getInstace() { if (instace == null) { synchronized (PrivateDialog.class) { if (instace == null) { instace = new PrivateDialog(); } } } return instace; } private String title = "溫馨提示"; private String message; private String sure; private String cancle; private Dialog tipDialog; private float clickTiem = 0; /** * desc: 提示隱私協(xié)議框 */ public void showConnectDialog(Context mContext) { dismiss(); if ((SystemClock.elapsedRealtime() - clickTiem) < 500) { return; } tipDialog = new AlertDialog.Builder(mContext).create(); tipDialog.setCanceledOnTouchOutside(false); View view = LayoutInflater.from(mContext).inflate(R.layout.activity_private_dialog, null, false); TextView tvTitle = view.findViewById(R.id.tv_sava_dialog_title); TextView dialogTxt = view.findViewById(R.id.tv_sava_dialog_message); TextView tvcancle = view.findViewById(R.id.tv_sava_dialog_cancel); TextView tvsure = view.findViewById(R.id.tv_sava_dialog_confirg); SpannableStringBuilder tvProtocol = new SpannableStringBuilder(dialogTxt.getText().toString()); tvProtocol.setSpan(new CliclSpan(mContext,1),27,35,Spanned.SPAN_INCLUSIVE_EXCLUSIVE); tvProtocol.setSpan(new CliclSpan(mContext,2),36,42,Spanned.SPAN_INCLUSIVE_EXCLUSIVE); dialogTxt.setText(tvProtocol); dialogTxt.setMovementMethod(LinkMovementMethod.getInstance()); if (!this.title.isEmpty()) { tvTitle.setText(this.title); } if (!this.message.isEmpty()) { // tvMsg.setText(this.message); } if (!this.cancle.isEmpty()) { tvcancle.setText(this.cancle); } if (!this.sure.isEmpty()) { tvsure.setText(this.sure); } view.findViewById(R.id.tv_sava_dialog_cancel).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { clickTiem = SystemClock.elapsedRealtime(); tipDialog.dismiss(); if (listener != null) { listener.cancleClick(); } } }); tvsure.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { tipDialog.dismiss(); if (listener != null) { listener.sureClick(); } } }); tipDialog.setOnKeyListener(new DialogInterface.OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_SEARCH) { return true; } else { return false; //默認(rèn)返回 false } } }); tipDialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); tipDialog.show(); tipDialog.setCancelable(false); tipDialog.getWindow().setContentView(view); //tipDialog.getWindow().setWindowAnimations(R.style.DialogBottom); // 添加動畫 WindowManager windowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); Display display = windowManager.getDefaultDisplay(); WindowManager.LayoutParams params = tipDialog.getWindow().getAttributes(); params.width = (int) (display.getWidth() * 0.8); tipDialog.getWindow().setAttributes(params); } public void dismiss() { if (tipDialog != null) { if (tipDialog.isShowing()) { tipDialog.dismiss(); } tipDialog = null; } } public interface OnTipItemClickListener { void cancleClick(); void sureClick(); void userClick(); void termsClick(); } private OnTipItemClickListener listener; public PrivateDialog setOnTipItemClickListener(OnTipItemClickListener listener) { this.listener = listener; return this; } public PrivateDialog title(String title) { this.title = title; return this; } public PrivateDialog message(String message) { this.message = message; return this; } public PrivateDialog sure(String sure) { this.sure = sure; return this; } public PrivateDialog cancle(String cancle) { this.cancle = cancle; return this; } public void create(Context mContext) { showConnectDialog(mContext); } class CliclSpan extends ClickableSpan{ Context mContext; Integer mNum; public CliclSpan() { super(); } public CliclSpan(Context context,Integer num) { mContext = context; mNum = num; } @Override public void onClick(@NonNull View widget) { if (listener != null) { if(mNum == 1){ listener.userClick(); }else { listener.termsClick(); } } } @Override public void updateDrawState(@NonNull TextPaint ds) { ds.setColor(ContextCompat.getColor(mContext,R.color.red)); ds.setUnderlineText(false); } } }
xml布局界面
xml文件名:activity_private_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="wrap_content"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#fff" android:orientation="vertical"> <TextView android:id="@+id/tv_sava_dialog_title" android:layout_width="match_parent" android:layout_height="50dp" android:gravity="center" android:text="@string/tip_title" android:textColor="#bababa" android:textSize="17sp" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:id="@+id/ll_read_priavate" android:paddingLeft="@dimen/dp_20" android:paddingRight="@dimen/dp_20"> <TextView android:id="@+id/tv_sava_dialog_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="歡迎使用XXXXXXXXXX!在您使用前,請您認(rèn)真閱讀《用戶服務(wù)協(xié)議》和《隱私政策》,以了解我們的服務(wù)內(nèi)容和我們在收集和使用您相關(guān)個人信息時的處理規(guī)則" android:textColor="#bababa" android:layout_marginBottom="18dp" android:textSize="@dimen/sp_15" /> </LinearLayout> </RelativeLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:orientation="horizontal" > <TextView android:id="@+id/tv_sava_dialog_cancel" android:layout_width="0dp" android:layout_height="50dp" android:layout_marginTop="1dp" android:layout_weight="1" android:background="#a1a1a1" android:clickable="true" android:foreground="?android:selectableItemBackground" android:gravity="center" android:text="@string/cancel" android:textColor="#867575" android:textSize="15sp" /> <TextView android:id="@+id/tv_sava_dialog_confirg" android:layout_width="0dp" android:layout_height="50dp" android:layout_marginLeft="1dp" android:layout_marginTop="1dp" android:layout_weight="1" android:background="#a1a1a1" android:clickable="true" android:foreground="?android:selectableItemBackground" android:gravity="center" android:text="@string/confirm" android:textColor="#efebeb" android:textSize="15sp" /> </LinearLayout> </LinearLayout> </LinearLayout>
如何使用
服務(wù)協(xié)議與隱私政策的Activity我就不貼出來了,有需要可以找我要
PrivateDialog.getInstace().message("").sure("同意").cancle("退出應(yīng)用") .setOnTipItemClickListener(new PrivateDialog.OnTipItemClickListener() { @Override public void cancleClick() { finishAffinity(); } @Override public void sureClick() { //進(jìn)入app } @Override public void userClick() { //跳轉(zhuǎn)至用戶服務(wù)協(xié)議 toActivity(ProtocolActivity.class); } @Override public void termsClick() { //跳轉(zhuǎn)至隱私政策 toActivity(TermActivity.class); } }).create(this);
到此這篇關(guān)于Android隱私彈框的文章就介紹到這了,更多相關(guān)Android隱私彈框內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android關(guān)鍵字persistent詳細(xì)分析
這篇文章主要介紹了Android關(guān)鍵字persistent的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-04-04Android BroadcastReceiver接收收到短信的廣播
這篇文章主要為大家詳細(xì)介紹了Android BroadcastReceiver接收收到短信的廣播,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05Android應(yīng)用中實現(xiàn)手勢控制圖片縮放的完全攻略
這篇文章主要介紹了Android應(yīng)用中實現(xiàn)手勢控制圖片縮放的完全攻略,采用了Matrix矩陣的方法,實例講解了包括觸摸點設(shè)置與各種沖突的處理等方面,相當(dāng)全面,需要的朋友可以參考下2016-04-04Android基于Sensor感應(yīng)器獲取重力感應(yīng)加速度的方法
這篇文章主要介紹了Android基于Sensor感應(yīng)器獲取重力感應(yīng)加速度的方法,涉及Android使用Sensor類實現(xiàn)感應(yīng)重力變化的功能,需要的朋友可以參考下2015-12-12