android 基类fragment,Android DialogFragment 基类的定制
鴻洋博客介紹:DialogFragment的基本使用
好處:
1:使用DialogFragment來管理對話框,當(dāng)旋轉(zhuǎn)屏幕和按下后退鍵時可以更好的管理其聲明周期,它和Fragment有著基本一致的生命周期
2.DialogFragment也允許開發(fā)者把Dialog作為內(nèi)嵌的組件進(jìn)行重用,類似Fragment(可以在大屏幕和小屏幕顯示出不同的效果)
使用方法:
Dialoger.build(getActivity())
.setContentText("你好防盜鏈發(fā)交電費")
.setContentTitle("標(biāo)題")
.setNegativeBtn("重新認(rèn)證", new Dialoger.OnNegativeListener() {
@Override public void onNegative(Dialog dialog) {
dialog.dismiss();
....
....
} })
.setPositiveBtn("確認(rèn)", new Dialoger.OnPositiveListener() {
@Override public void onPositive(Dialog dialog) {
dialog.dismiss();
....//對應(yīng)的操作
....
}
})
.dialoger.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
view.getViewActivity().finish();
}
}). show();
封裝:既然DialogFragment比普通的dialog好這么多,豈有不封裝哪來用的道理
使用DialogFragment至少需要實現(xiàn)onCreateView或者onCreateDIalog方法。onCreateView即使用定義的xml布局文件展示Dialog。onCreateDialog即利用AlertDialog或者Dialog創(chuàng)建出Dialog。下面的封裝采用onCreateView的方式來封裝
1.構(gòu)建dialog 設(shè)置基本參數(shù)
public static Dialoger build(FragmentActivity activity, String transactionTag, Bundle args) {
Dialoger dialoger = new Dialoger();
dialoger.setActivity(activity);//設(shè)置傳入的activity對象
dialoger.setTransactionTag(transactionTag);//設(shè)置的tag標(biāo)志(和Fragment一樣,便于利用tag獲取當(dāng)前的Activity對象,來傳遞數(shù)據(jù))
dialoger.setArguments(args);//設(shè)置的bundle參數(shù)
dialoger.setCancelable(false);//初始化設(shè)置為不可點擊
dialoger.setTheme(0);//設(shè)置沒有主題
dialoger.setContentView(R.layout.dialog_default);//設(shè)置默認(rèn)的dialog的View
return dialoger;
}
public static Dialoger build(FragmentActivity activity) {
return build(activity, Dialoger.class.getSimpleName(), null);
}
2.外界傳入對應(yīng)的參數(shù) (標(biāo)題,context 內(nèi)容 定義的View)
private void setActivity(FragmentActivity mActivity) {
this.mActivity = mActivity;
}
private void setTransactionTag(String transactionTag) {
this.mTransactionTag = transactionTag;
}
public Dialoger setContentView(int layoutResID) {
this.mContentView = LayoutInflater.from(mActivity).inflate(layoutResID, null);
return this;
}
public Dialoger setContentView(View view) {
this.mContentView = view;
return this;
}
public Dialoger setTheme(int theme) {
setStyle(DialogFragment.STYLE_NO_TITLE, theme);
return this;
}
public Dialoger setContentTitle(String title) {
mContentTitle = title;
return this;
}
public Dialoger setContentText(String text) {
mContentText = text;
return this;
}
public Dialoger setContentTitle(String title, int titleColor) {
mContentTitle = title;
mContentTitleColor = titleColor;
return this;
}
public Dialoger setContentText(String text, int textColor) {
mContentText = text;
mContentTextColor = textColor;
return this;
}
3.對傳入進(jìn)來的參數(shù)進(jìn)行配置
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));//設(shè)置透明背景
return mContentView;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
if (mCancelListener != null) {//只有當(dāng)設(shè)置了取消監(jiān)聽的時候,才可以設(shè)置取消
setCancelable(true);
}
//設(shè)置標(biāo)題
TextView mTitleView = (TextView) view.findViewById(R.id.dialog_title_tv);
if (!TextUtils.isEmpty(mContentTitle)) {
mTitleView.setText(mContentTitle);
if (mContentTitleColor != 0) {
mTitleView.setTextColor(mContentTitleColor);
}
} else {
mTitleView.setVisibility(View.GONE);
}
//設(shè)置內(nèi)容
TextView mTextView = (TextView) view.findViewById(R.id.dialog_text_tv);
if (!TextUtils.isEmpty(mContentText)) {
mTextView.setText(mContentText);
if (mContentTextColor != 0) {
mTextView.setTextColor(mContentTextColor);
}
} else {
mTextView.setVisibility(View.GONE);
}
//設(shè)置 確定 和 取消 按鈕
View buttonPanel = view.findViewById(R.id.buttons_layout);
buttonPanel.setVisibility(View.GONE);
boolean negativeEnable = false;
boolean positiveEnable = false;
//如果有確定按鈕 設(shè)置 ----->可點擊 內(nèi)容 監(jiān)聽
Button negativeButton = (Button) view.findViewById(R.id.btn_negative);
if (TextUtils.isEmpty(mNegativeText)) {
negativeButton.setVisibility(View.GONE);
} else {
negativeEnable = true;
buttonPanel.setVisibility(View.VISIBLE);
negativeButton.setVisibility(View.VISIBLE);
negativeButton.setText(mNegativeText);
negativeButton.setOnClickListener(this);
if (mNegativeTextColor != 0) {
negativeButton.setTextColor(mNegativeTextColor);
}
}
//如果有取消按鈕 設(shè)置 ----->可點擊 內(nèi)容 監(jiān)聽
Button positiveButton = (Button) view.findViewById(R.id.btn_positive);
if (TextUtils.isEmpty(mPositiveText)) {
positiveButton.setVisibility(View.GONE);
} else {
positiveEnable = true;
buttonPanel.setVisibility(View.VISIBLE);
positiveButton.setVisibility(View.VISIBLE);
positiveButton.setText(mPositiveText);
positiveButton.setOnClickListener(this);
if (mPositiveTextColor != 0) {
positiveButton.setTextColor(mPositiveTextColor);
}
}
View contentDivider = view.findViewById(R.id.horizontal_divider);
View buttonDivider = view.findViewById(R.id.vertical_divider);
//設(shè)置布局的分割線 顯示和隱藏
if (positiveEnable) {
if (negativeEnable) {
contentDivider.setVisibility(View.VISIBLE);
buttonDivider.setVisibility(View.VISIBLE);
} else {
contentDivider.setVisibility(View.GONE);
buttonDivider.setVisibility(View.GONE);
}
buttonPanel.setVisibility(View.VISIBLE);
} else {
if (negativeEnable) {
contentDivider.setVisibility(View.VISIBLE);
buttonPanel.setVisibility(View.VISIBLE);
buttonDivider.setVisibility(View.GONE);
} else {
contentDivider.setVisibility(View.GONE);
}
}
}
4.設(shè)置確定 取消按鈕 和 取消監(jiān)聽
/**
* 確認(rèn)
*
* @param text
* @param listener
* @return
*/
public Dialoger setPositiveBtn(String text, OnPositiveListener listener) {
mPositiveText = text;
mPositiveListener = listener;
return this;
}
public Dialoger setPositiveColor(int textColor) {
mPositiveTextColor = textColor;
return this;
}
/**
* 取消按鈕(不是點擊dialog其他地方的取消)
*
* @param text
* @param listener
* @return
*/
public Dialoger setNegativeBtn(String text, OnNegativeListener listener) {
mNegativeText = text;
mNegativeListener = listener;
return this;
}
public Dialoger setNegativeColor(int textColor) {
mNegativeTextColor = textColor;
return this;
}
//取消監(jiān)聽
public void setOnCancelListener(@Nullable DialogInterface.OnCancelListener listener) {
if (listener != null) {
mCancelListener = listener;
}
}
//調(diào)用dialog的取消
@Override
public void onCancel(DialogInterface dialog) {
super.onCancel(dialog);
if (mCancelListener != null) {
mCancelListener.onCancel(dialog);
}
}
5.傳遞 確認(rèn) 取消 的點擊事件來回調(diào) 第4條的監(jiān)聽
@Override
public void onClick(View v) {
if (v.getId() == R.id.btn_negative) {
if (mNegativeListener != null) mNegativeListener.onNegative(getDialog());
} else if (v.getId() == R.id.btn_positive) {
if (mPositiveListener != null) mPositiveListener.onPositive(getDialog());
}
}
6.xml布局
style="@style/DT_DIALOG_THEME"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="30dip"
android:background="@drawable/dialog_bg_color"
android:minWidth="270dp"
android:orientation="vertical">
android:id="@+id/dialog_title_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:gravity="center_horizontal"
android:text="提示"
android:textColor="#333333"
android:textSize="18sp"/>
android:id="@+id/dialog_text_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:layout_marginTop="30dp"
android:gravity="center"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:text="提示"
android:textColor="#686871"
android:textSize="16sp"/>
android:id="@+id/horizontal_divider"
style="@style/horizontal_divider"/>
android:id="@+id/buttons_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
android:id="@+id/btn_negative"
android:layout_width="0dip"
android:layout_height="44dip"
android:layout_weight="1"
android:background="@android:color/transparent"
android:gravity="center"
android:paddingTop="2dip"
android:text="取消"
android:textColor="#8e8e9c"
android:textSize="17sp"/>
android:id="@+id/vertical_divider"
style="@style/vertical_divider"/>
android:id="@+id/btn_positive"
android:layout_width="0dip"
android:layout_height="44dip"
android:layout_weight="1"
android:background="@android:color/transparent"
android:gravity="center"
android:paddingTop="2dip"
android:text="確定"
android:textColor="#f73e3e"
android:textSize="16sp"/>
7.xml布局簡單效果
Paste_Image.png
再來回顧下使用方法:采用的建造者模式
Dialoger.build(getActivity())
.setContentText("你好防盜鏈發(fā)交電費")
.setContentTitle("標(biāo)題")
.setNegativeBtn("重新認(rèn)證", new Dialoger.OnNegativeListener() {
@Override public void onNegative(Dialog dialog) {
dialog.dismiss();
....
....
} })
.setPositiveBtn("確認(rèn)", new Dialoger.OnPositiveListener() {
@Override public void onPositive(Dialog dialog) {
dialog.dismiss();
....//對應(yīng)的操作
....
}
})
.dialoger.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
view.getViewActivity().finish();
}
}). show();
over~
總結(jié)
以上是生活随笔為你收集整理的android 基类fragment,Android DialogFragment 基类的定制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle截取时间函数6,SQL 取日
- 下一篇: timer数据库总显示连接不上服务器,a