国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android Dialog仿ios9中UIAlertController控件

2019-10-21 21:49:36
字體:
來源:轉載
供稿:網友

最近因為項目需要,用Android Dialog仿ios9中的UIAlertController控件,第一次對自定義控件進行封裝,請大家多多指教

Android,Dialog,ios9,UIAlertController,控件

如圖所示,當我封裝的Dialog被觸發時,從底部彈出,點擊取消鍵整個彈框會消失,當點擊不同的TextView會有相應的點擊事件發生,目前只寫了三個能被點擊的TextView(以后會改為可以動態添加個數)。 
以下代碼是我封裝的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();//點擊標題TextView  void onOneClick();//點擊第一個TextView  void onTwoClick();//點擊第二個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);  //填充對話框的布局  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());  //將布局設置給Dialog  myDialog.setContentView(view);  //獲取當前Activity所在的窗體  Window dialogWindow = myDialog.getWindow();  //設置Dialog從窗體底部彈出  dialogWindow.setGravity(Gravity.BOTTOM);  //獲得窗體的屬性  WindowManager.LayoutParams lp = dialogWindow.getAttributes();  lp.width = (int) (dialogWindow.getWindowManager().getDefaultDisplay().getWidth() * 0.95);  lp.y = 20; //設置Dialog距離底部的距離  dialogWindow.setAttributes(lp); //將屬性設置給窗體  myDialog.show();//顯示對話框 } 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();  } } /**  * 設置標題欄文本文字  *  * @param stringId  * @see #setTitleText(String)  */ public void setTitleText(@StringRes int stringId) {  setTitleText(getContext().getString(stringId)); } /**  * 設置標題欄文本文字  *  * @param text  */ public void setTitleText(String text) {  mTitleTv.setText(text);  mTitleTv.setVisibility(View.VISIBLE); } /**  * 設置第一個TextView文字  *  * @param stringId  */ public void setOneText(@StringRes int stringId) {  setOneText(getContext().getString(stringId)); } /**  * 設置第一個TextView文字  *  * @param text  */ public void setOneText(String text) {  mOneTv.setText(text);  mOneTv.setVisibility(View.VISIBLE); } /**  * 設置第二個TextView文字  *  * @param stringId  */ public void setTwoText(@StringRes int stringId) {  setTwoText(getContext().getString(stringId)); } /**  * 設置第二個TextView文字  *  * @param text  */ public void setTwoText(String text) {  mTwoTv.setText(text);  mTwoTv.setVisibility(View.VISIBLE); } /**  * 獲取標題欄文本  *  * @return  */ public final TextView getTitleTv() {  return mTitleTv; } /**  * 獲取第一個文本  *  * @return  */ public final TextView getOneTv() {  return mOneTv; } /**  * 獲取第二個文本  *  * @return  */ public final TextView getTwoTv() {  return mTwoTv; } /**  * 設置字體顏色  *  * @param titleColor 標題的顏色,默認是灰色  * @param otherColor 其他的顏色,默認是藍色  * @param i   有2種模式,1(標題和其他顏色不一樣)2(標題和其他顏色一樣,取消鍵不一樣)  */ 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(List<KeyboardShortcutGroup> data, @Nullable Menu menu, int deviceId) { }}

在Activity中的應用:

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主要提供的方法有:修改相應的TextView文字和顏色,提供點擊相應的TextView的點擊事件。

這里的點擊事件主要用的是回調的方法,在Dialog中定義一個接口,在點擊事件調用這個接口,當在Activity中觸發這個回調接口時,點擊事件產生。

主要代碼是:

 private ClickListenerInterface clickListenerInterface; public interface ClickListenerInterface {  void onTitleClick();//點擊標題TextView  void onOneClick();//點擊第一個TextView  void onTwoClick();//點擊第二個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;   }  } }

最后說一下更改文字顏色的方法:

public void setColor(int titleColor, int otherColor, int i) {}

第一個傳的顏色是修改最上面的TextView,第二個傳的顏色是修改其他的文字顏色,第三個參數是表明你選用哪種模式,分別傳1或2,有2種模式

  1. 標題和其他顏色不一樣
  2. 標題和其他顏色一樣,取消鍵不一樣

下面是我的Github地址

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 体育| 徐州市| 互助| 宜春市| 句容市| 杭州市| 广灵县| 金山区| 南岸区| 邯郸市| 婺源县| 马龙县| 通辽市| 宜昌市| 丘北县| 波密县| 泸水县| 定边县| 肥西县| 潜山县| 惠水县| 祁东县| 台安县| 三河市| 北安市| 抚顺县| 林州市| 威宁| 聊城市| 伽师县| 珲春市| 乌兰县| 兴隆县| 武强县| 扎赉特旗| 金秀| 宾川县| 宣化县| 米林县| 紫阳县| 三台县|