這篇文章給大家分享的是有關(guān)Android Dialog如何實(shí)現(xiàn)仿ios9中的UIAlertController控件的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
你所需要的網(wǎng)站建設(shè)服務(wù),我們均能行業(yè)靠前的水平為你提供.標(biāo)準(zhǔn)是產(chǎn)品質(zhì)量的保證,主要從事做網(wǎng)站、成都做網(wǎng)站、企業(yè)網(wǎng)站建設(shè)、手機(jī)網(wǎng)站制作設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)制作、做網(wǎng)站、建網(wǎng)站。創(chuàng)新互聯(lián)公司擁有實(shí)力堅(jiān)強(qiáng)的技術(shù)研發(fā)團(tuán)隊(duì)及素養(yǎng)的視覺(jué)設(shè)計(jì)專(zhuān)才。
效果:
如圖所示,當(dāng)我封裝的Dialog被觸發(fā)時(shí),從底部彈出,點(diǎn)擊取消鍵整個(gè)彈框會(huì)消失,當(dāng)點(diǎn)擊不同的TextView會(huì)有相應(yīng)的點(diǎn)擊事件發(fā)生,目前只寫(xiě)了三個(gè)能被點(diǎn)擊的TextView(以后會(huì)改為可以動(dòng)態(tài)添加個(gè)數(shù))。
以下代碼是我封裝的BottomDialog:
public class BottomDialog extends Dialog { private TextView mTitleTv; private TextView mOneTv; private TextView mTwoTv; private TextView mCancelTv; private Dialog myDialog; private ClickListenerInterface clickListenerInterface; public interface ClickListenerInterface { void onTitleClick();//點(diǎn)擊標(biāo)題TextView void onOneClick();//點(diǎn)擊第一個(gè)TextView void onTwoClick();//點(diǎn)擊第二個(gè)TextView } public BottomDialog(@NonNull Context context) { super(context); init(); } public BottomDialog(@NonNull Context context, @StyleRes int themeResId) { super(context, themeResId); init(); } protected BottomDialog(@NonNull Context context, boolean cancelable, @Nullable OnCancelListener cancelListener) { super(context, cancelable, cancelListener); init(); } private void init() { myDialog = new Dialog(getContext(), R.style.BottomDialogStyle); //填充對(duì)話(huà)框的布局 View view = LayoutInflater.from(getContext()).inflate(R.layout.dialog_bottom, null); //初始化控件 mTitleTv = (TextView) view.findViewById(R.id.tv_dialog_title); mOneTv = (TextView) view.findViewById(R.id.tv_dialog_one); mTwoTv = (TextView) view.findViewById(R.id.tv_dialog_two); mCancelTv = (TextView) view.findViewById(R.id.tv_dialog_cancel); mTitleTv.setOnClickListener(new DialogClickListener()); mOneTv.setOnClickListener(new DialogClickListener()); mTwoTv.setOnClickListener(new DialogClickListener()); mCancelTv.setOnClickListener(new DialogClickListener()); //將布局設(shè)置給Dialog myDialog.setContentView(view); //獲取當(dāng)前Activity所在的窗體 Window dialogWindow = myDialog.getWindow(); //設(shè)置Dialog從窗體底部彈出 dialogWindow.setGravity(Gravity.BOTTOM); //獲得窗體的屬性 WindowManager.LayoutParams lp = dialogWindow.getAttributes(); lp.width = (int) (dialogWindow.getWindowManager().getDefaultDisplay().getWidth() * 0.95); lp.y = 20; //設(shè)置Dialog距離底部的距離 dialogWindow.setAttributes(lp); //將屬性設(shè)置給窗體 myDialog.show();//顯示對(duì)話(huà)框 } public void setClicklistener(ClickListenerInterface clickListenerInterface) { this.clickListenerInterface = clickListenerInterface; } private class DialogClickListener implements View.OnClickListener { @Override public void onClick(View v) { switch (v.getId()) { case R.id.tv_dialog_title: clickListenerInterface.onTitleClick(); break; case R.id.tv_dialog_one: clickListenerInterface.onOneClick(); break; case R.id.tv_dialog_two: clickListenerInterface.onTwoClick(); break; case R.id.tv_dialog_cancel: myDialog.dismiss(); break; } } } public void dismissDialog() { if (myDialog != null && myDialog.isShowing()) { myDialog.dismiss(); } } /** * 設(shè)置標(biāo)題欄文本文字 * * @param stringId * @see #setTitleText(String) */ public void setTitleText(@StringRes int stringId) { setTitleText(getContext().getString(stringId)); } /** * 設(shè)置標(biāo)題欄文本文字 * * @param text */ public void setTitleText(String text) { mTitleTv.setText(text); mTitleTv.setVisibility(View.VISIBLE); } /** * 設(shè)置第一個(gè)TextView文字 * * @param stringId */ public void setOneText(@StringRes int stringId) { setOneText(getContext().getString(stringId)); } /** * 設(shè)置第一個(gè)TextView文字 * * @param text */ public void setOneText(String text) { mOneTv.setText(text); mOneTv.setVisibility(View.VISIBLE); } /** * 設(shè)置第二個(gè)TextView文字 * * @param stringId */ public void setTwoText(@StringRes int stringId) { setTwoText(getContext().getString(stringId)); } /** * 設(shè)置第二個(gè)TextView文字 * * @param text */ public void setTwoText(String text) { mTwoTv.setText(text); mTwoTv.setVisibility(View.VISIBLE); } /** * 獲取標(biāo)題欄文本 * * @return */ public final TextView getTitleTv() { return mTitleTv; } /** * 獲取第一個(gè)文本 * * @return */ public final TextView getOneTv() { return mOneTv; } /** * 獲取第二個(gè)文本 * * @return */ public final TextView getTwoTv() { return mTwoTv; } /** * 設(shè)置字體顏色 * * @param titleColor 標(biāo)題的顏色,默認(rèn)是灰色 * @param otherColor 其他的顏色,默認(rèn)是藍(lán)色 * @param i 有2種模式,1(標(biāo)題和其他顏色不一樣)2(標(biāo)題和其他顏色一樣,取消鍵不一樣) */ public void setColor(int titleColor, int otherColor, int i) { if (i == 1) { mTitleTv.setTextColor(ContextCompat.getColor(getContext(), titleColor)); mOneTv.setTextColor(ContextCompat.getColor(getContext(), otherColor)); mTwoTv.setTextColor(ContextCompat.getColor(getContext(), otherColor)); } if (i == 2) { mTitleTv.setTextColor(ContextCompat.getColor(getContext(), titleColor)); mOneTv.setTextColor(ContextCompat.getColor(getContext(), titleColor)); mTwoTv.setTextColor(ContextCompat.getColor(getContext(), titleColor)); mCancelTv.setTextColor(ContextCompat.getColor(getContext(), otherColor)); } } @Override public void onProvideKeyboardShortcuts(Listdata, @Nullable Menu menu, int deviceId) { } }
在Activity中的應(yīng)用:
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private BottomDialog bottomDialog; private Button mButton; private TextView mTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mButton = (Button) findViewById(R.id.button); mTextView = (TextView) findViewById(R.id.textView); mButton.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button: showBottomDialog(); break; } } /** * 展示 */ private void showBottomDialog() { bottomDialog = new BottomDialog(this); bottomDialog.setClicklistener(new BottomDialog.ClickListenerInterface() { @Override public void onTitleClick() { } @Override public void onOneClick() { mTextView.setText(bottomDialog.getOneTv().getText().toString()); } @Override public void onTwoClick() { mTextView.setText(bottomDialog.getTwoTv().getText().toString()); } }); } }
被封裝的Dialog主要提供的方法有:修改相應(yīng)的TextView文字和顏色,提供點(diǎn)擊相應(yīng)的TextView的點(diǎn)擊事件。
這里的點(diǎn)擊事件主要用的是回調(diào)的方法,在Dialog中定義一個(gè)接口,在點(diǎn)擊事件調(diào)用這個(gè)接口,當(dāng)在Activity中觸發(fā)這個(gè)回調(diào)接口時(shí),點(diǎn)擊事件產(chǎn)生。
主要代碼是:
private ClickListenerInterface clickListenerInterface; public interface ClickListenerInterface { void onTitleClick();//點(diǎn)擊標(biāo)題TextView void onOneClick();//點(diǎn)擊第一個(gè)TextView void onTwoClick();//點(diǎn)擊第二個(gè)TextView } public void setClicklistener(ClickListenerInterface clickListenerInterface) { this.clickListenerInterface = clickListenerInterface; } private class DialogClickListener implements View.OnClickListener { @Override public void onClick(View v) { switch (v.getId()) { case R.id.tv_dialog_title: clickListenerInterface.onTitleClick(); break; case R.id.tv_dialog_one: clickListenerInterface.onOneClick(); break; case R.id.tv_dialog_two: clickListenerInterface.onTwoClick(); break; case R.id.tv_dialog_cancel: myDialog.dismiss(); break; } } }
最后說(shuō)一下更改文字顏色的方法:
public void setColor(int titleColor, int otherColor, int i) {}
第一個(gè)傳的顏色是修改最上面的TextView,第二個(gè)傳的顏色是修改其他的文字顏色,第三個(gè)參數(shù)是表明你選用哪種模式,分別傳1或2,有2種模式
標(biāo)題和其他顏色不一樣
標(biāo)題和其他顏色一樣,取消鍵不一樣
感謝各位的閱讀!關(guān)于“Android Dialog如何實(shí)現(xiàn)仿ios9中的UIAlertController控件”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!