|
@@ -0,0 +1,588 @@
|
|
|
+package com.common.library.view;
|
|
|
+
|
|
|
+import android.app.AlertDialog;
|
|
|
+import android.content.Context;
|
|
|
+import android.content.DialogInterface;
|
|
|
+import android.graphics.Color;
|
|
|
+import android.graphics.drawable.Drawable;
|
|
|
+import android.os.Build;
|
|
|
+import android.view.Gravity;
|
|
|
+import android.view.LayoutInflater;
|
|
|
+import android.view.View;
|
|
|
+import android.view.ViewGroup;
|
|
|
+import android.view.Window;
|
|
|
+import android.view.WindowManager;
|
|
|
+import android.view.inputmethod.InputMethodManager;
|
|
|
+import android.widget.AutoCompleteTextView;
|
|
|
+import android.widget.Button;
|
|
|
+import android.widget.EditText;
|
|
|
+import android.widget.LinearLayout;
|
|
|
+import android.widget.ListAdapter;
|
|
|
+import android.widget.ListView;
|
|
|
+import android.widget.TextView;
|
|
|
+
|
|
|
+import com.common.library.R;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Created by drakeet on 4/7/16.
|
|
|
+ */
|
|
|
+public class MaterialDialog {
|
|
|
+
|
|
|
+ private final static int BUTTON_BOTTOM = 9;
|
|
|
+ private final static int BUTTON_TOP = 9;
|
|
|
+
|
|
|
+ private boolean mCancel;
|
|
|
+ private Context mContext;
|
|
|
+ private AlertDialog mAlertDialog;
|
|
|
+ private Builder mBuilder;
|
|
|
+ private View mView;
|
|
|
+ private int mTitleResId;
|
|
|
+ private CharSequence mTitle;
|
|
|
+ private int mMessageResId;
|
|
|
+ private CharSequence mMessage;
|
|
|
+ private Button mPositiveButton;
|
|
|
+ private LinearLayout.LayoutParams mLayoutParams;
|
|
|
+ private Button mNegativeButton;
|
|
|
+ private boolean mHasShow = false;
|
|
|
+ private int mBackgroundResId = -1;
|
|
|
+ private Drawable mBackgroundDrawable;
|
|
|
+ private View mMessageContentView;
|
|
|
+ private int mMessageContentViewResId;
|
|
|
+ private DialogInterface.OnDismissListener mOnDismissListener;
|
|
|
+ private int pId = -1, nId = -1;
|
|
|
+ private String pText, nText;
|
|
|
+ View.OnClickListener pListener, nListener;
|
|
|
+
|
|
|
+
|
|
|
+ public MaterialDialog(Context context) {
|
|
|
+ this.mContext = context;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void show() {
|
|
|
+ if (!mHasShow) {
|
|
|
+ mBuilder = new Builder();
|
|
|
+ } else {
|
|
|
+ mAlertDialog.show();
|
|
|
+ }
|
|
|
+ mHasShow = true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public MaterialDialog setView(View view) {
|
|
|
+ mView = view;
|
|
|
+ if (mBuilder != null) {
|
|
|
+ mBuilder.setView(view);
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public MaterialDialog setContentView(View view) {
|
|
|
+ mMessageContentView = view;
|
|
|
+ mMessageContentViewResId = 0;
|
|
|
+ if (mBuilder != null) {
|
|
|
+ mBuilder.setContentView(mMessageContentView);
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Set a custom view resource to be the contents of the dialog.
|
|
|
+ *
|
|
|
+ * @param layoutResId resource ID to be inflated
|
|
|
+ */
|
|
|
+ public MaterialDialog setContentView(int layoutResId) {
|
|
|
+ mMessageContentViewResId = layoutResId;
|
|
|
+ mMessageContentView = null;
|
|
|
+ if (mBuilder != null) {
|
|
|
+ mBuilder.setContentView(layoutResId);
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public MaterialDialog setBackground(Drawable drawable) {
|
|
|
+ mBackgroundDrawable = drawable;
|
|
|
+ if (mBuilder != null) {
|
|
|
+ mBuilder.setBackground(mBackgroundDrawable);
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public MaterialDialog setBackgroundResource(int resId) {
|
|
|
+ mBackgroundResId = resId;
|
|
|
+ if (mBuilder != null) {
|
|
|
+ mBuilder.setBackgroundResource(mBackgroundResId);
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void dismiss() {
|
|
|
+ mAlertDialog.dismiss();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private int dip2px(float dpValue) {
|
|
|
+ final float scale = mContext.getResources().getDisplayMetrics().density;
|
|
|
+ return (int) (dpValue * scale + 0.5f);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private static boolean isLollipop() {
|
|
|
+ return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public MaterialDialog setTitle(int resId) {
|
|
|
+ mTitleResId = resId;
|
|
|
+ if (mBuilder != null) {
|
|
|
+ mBuilder.setTitle(resId);
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public MaterialDialog setTitle(CharSequence title) {
|
|
|
+ mTitle = title;
|
|
|
+ if (mBuilder != null) {
|
|
|
+ mBuilder.setTitle(title);
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public MaterialDialog setMessage(int resId) {
|
|
|
+ mMessageResId = resId;
|
|
|
+ if (mBuilder != null) {
|
|
|
+ mBuilder.setMessage(resId);
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public MaterialDialog setMessage(CharSequence message) {
|
|
|
+ mMessage = message;
|
|
|
+ if (mBuilder != null) {
|
|
|
+ mBuilder.setMessage(message);
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public MaterialDialog setPositiveButton(int resId, final View.OnClickListener listener) {
|
|
|
+ this.pId = resId;
|
|
|
+ this.pListener = listener;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public Button getPositiveButton() {
|
|
|
+ return mPositiveButton;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public Button getNegativeButton() {
|
|
|
+ return mNegativeButton;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public MaterialDialog setPositiveButton(String text, final View.OnClickListener listener) {
|
|
|
+ this.pText = text;
|
|
|
+ this.pListener = listener;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public MaterialDialog setNegativeButton(int resId, final View.OnClickListener listener) {
|
|
|
+ this.nId = resId;
|
|
|
+ this.nListener = listener;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public MaterialDialog setNegativeButton(String text, final View.OnClickListener listener) {
|
|
|
+ this.nText = text;
|
|
|
+ this.nListener = listener;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Sets whether this dialog is canceled when touched outside the window's
|
|
|
+ * bounds OR pressed the back key. If setting to true, the dialog is
|
|
|
+ * set to be cancelable if not
|
|
|
+ * already set.
|
|
|
+ *
|
|
|
+ * @param cancel Whether the dialog should be canceled when touched outside
|
|
|
+ * the window OR pressed the back key.
|
|
|
+ */
|
|
|
+ public MaterialDialog setCanceledOnTouchOutside(boolean cancel) {
|
|
|
+ this.mCancel = cancel;
|
|
|
+ if (mBuilder != null) {
|
|
|
+ mBuilder.setCanceledOnTouchOutside(mCancel);
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public MaterialDialog setOnDismissListener(DialogInterface.OnDismissListener onDismissListener) {
|
|
|
+ this.mOnDismissListener = onDismissListener;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private class Builder {
|
|
|
+
|
|
|
+ private TextView mTitleView;
|
|
|
+ private ViewGroup mMessageContentRoot;
|
|
|
+ private TextView mMessageView;
|
|
|
+ private Window mAlertDialogWindow;
|
|
|
+ private LinearLayout mButtonLayout;
|
|
|
+
|
|
|
+
|
|
|
+ private Builder() {
|
|
|
+ mAlertDialog = new AlertDialog.Builder(mContext).create();
|
|
|
+ mAlertDialog.show();
|
|
|
+
|
|
|
+ mAlertDialog.getWindow()
|
|
|
+ .clearFlags(
|
|
|
+ WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
|
|
|
+ WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
|
|
|
+ mAlertDialog.getWindow()
|
|
|
+ .setSoftInputMode(
|
|
|
+ WindowManager.LayoutParams.SOFT_INPUT_MASK_STATE);
|
|
|
+
|
|
|
+ mAlertDialogWindow = mAlertDialog.getWindow();
|
|
|
+ View contentView = LayoutInflater.from(mContext)
|
|
|
+ .inflate(
|
|
|
+ R.layout.layout_material_dialog,
|
|
|
+ null);
|
|
|
+ contentView.setFocusable(true);
|
|
|
+ contentView.setFocusableInTouchMode(true);
|
|
|
+
|
|
|
+ mAlertDialogWindow.setBackgroundDrawableResource(
|
|
|
+ R.drawable.material_dialog_window);
|
|
|
+
|
|
|
+ mAlertDialogWindow.setContentView(contentView);
|
|
|
+
|
|
|
+ mTitleView = (TextView) mAlertDialogWindow.findViewById(R.id.title);
|
|
|
+ mMessageView = (TextView) mAlertDialogWindow.findViewById(
|
|
|
+ R.id.message);
|
|
|
+ mButtonLayout = (LinearLayout) mAlertDialogWindow.findViewById(
|
|
|
+ R.id.buttonLayout);
|
|
|
+ mPositiveButton = (Button) mButtonLayout.findViewById(R.id.btn_p);
|
|
|
+ mNegativeButton = (Button) mButtonLayout.findViewById(R.id.btn_n);
|
|
|
+ mMessageContentRoot = (ViewGroup) mAlertDialogWindow.findViewById(
|
|
|
+ R.id.message_content_root);
|
|
|
+ if (mView != null) {
|
|
|
+ LinearLayout linearLayout
|
|
|
+ = (LinearLayout) mAlertDialogWindow.findViewById(
|
|
|
+ R.id.contentView);
|
|
|
+ linearLayout.removeAllViews();
|
|
|
+ linearLayout.addView(mView);
|
|
|
+ }
|
|
|
+ if (mTitleResId != 0) {
|
|
|
+ setTitle(mTitleResId);
|
|
|
+ }
|
|
|
+ if (mTitle != null) {
|
|
|
+ setTitle(mTitle);
|
|
|
+ }
|
|
|
+ if (mTitle == null && mTitleResId == 0) {
|
|
|
+ mTitleView.setVisibility(View.GONE);
|
|
|
+ }
|
|
|
+ if (mMessageResId != 0) {
|
|
|
+ setMessage(mMessageResId);
|
|
|
+ }
|
|
|
+ if (mMessage != null) {
|
|
|
+ setMessage(mMessage);
|
|
|
+ }
|
|
|
+ if (pId != -1) {
|
|
|
+ mPositiveButton.setVisibility(View.VISIBLE);
|
|
|
+ mPositiveButton.setText(pId);
|
|
|
+ mPositiveButton.setOnClickListener(pListener);
|
|
|
+ if (isLollipop()) {
|
|
|
+ mPositiveButton.setElevation(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (nId != -1) {
|
|
|
+ mNegativeButton.setVisibility(View.VISIBLE);
|
|
|
+ mNegativeButton.setText(nId);
|
|
|
+ mNegativeButton.setOnClickListener(nListener);
|
|
|
+ if (isLollipop()) {
|
|
|
+ mNegativeButton.setElevation(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!isNullOrEmpty(pText)) {
|
|
|
+ mPositiveButton.setVisibility(View.VISIBLE);
|
|
|
+ mPositiveButton.setText(pText);
|
|
|
+ mPositiveButton.setOnClickListener(pListener);
|
|
|
+ if (isLollipop()) {
|
|
|
+ mPositiveButton.setElevation(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!isNullOrEmpty(nText)) {
|
|
|
+ mNegativeButton.setVisibility(View.VISIBLE);
|
|
|
+ mNegativeButton.setText(nText);
|
|
|
+ mNegativeButton.setOnClickListener(nListener);
|
|
|
+ if (isLollipop()) {
|
|
|
+ mNegativeButton.setElevation(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (isNullOrEmpty(pText) && pId == -1) {
|
|
|
+ mPositiveButton.setVisibility(View.GONE);
|
|
|
+ }
|
|
|
+ if (isNullOrEmpty(nText) && nId == -1) {
|
|
|
+ mNegativeButton.setVisibility(View.GONE);
|
|
|
+ }
|
|
|
+ if (mBackgroundResId != -1) {
|
|
|
+ LinearLayout linearLayout
|
|
|
+ = (LinearLayout) mAlertDialogWindow.findViewById(
|
|
|
+ R.id.material_background);
|
|
|
+ linearLayout.setBackgroundResource(mBackgroundResId);
|
|
|
+ }
|
|
|
+ if (mBackgroundDrawable != null) {
|
|
|
+ LinearLayout linearLayout
|
|
|
+ = (LinearLayout) mAlertDialogWindow.findViewById(
|
|
|
+ R.id.material_background);
|
|
|
+ linearLayout.setBackground(mBackgroundDrawable);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (mMessageContentView != null) {
|
|
|
+ this.setContentView(mMessageContentView);
|
|
|
+ } else if (mMessageContentViewResId != 0) {
|
|
|
+ this.setContentView(mMessageContentViewResId);
|
|
|
+ }
|
|
|
+ mAlertDialog.setCanceledOnTouchOutside(mCancel);
|
|
|
+ mAlertDialog.setCancelable(mCancel);
|
|
|
+ if (mOnDismissListener != null) {
|
|
|
+ mAlertDialog.setOnDismissListener(mOnDismissListener);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void setTitle(int resId) {
|
|
|
+ mTitleView.setText(resId);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void setTitle(CharSequence title) {
|
|
|
+ mTitleView.setText(title);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void setMessage(int resId) {
|
|
|
+ if (mMessageView != null) {
|
|
|
+ mMessageView.setText(resId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void setMessage(CharSequence message) {
|
|
|
+ if (mMessageView != null) {
|
|
|
+ mMessageView.setText(message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * set positive button
|
|
|
+ *
|
|
|
+ * @param text the name of button
|
|
|
+ */
|
|
|
+ public void setPositiveButton(String text, final View.OnClickListener listener) {
|
|
|
+ Button button = new Button(mContext);
|
|
|
+ LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
|
|
|
+ LinearLayout.LayoutParams.WRAP_CONTENT,
|
|
|
+ LinearLayout.LayoutParams.WRAP_CONTENT);
|
|
|
+ button.setLayoutParams(params);
|
|
|
+ button.setBackgroundResource(R.drawable.dialog_material_card);
|
|
|
+ button.setTextColor(Color.argb(255, 35, 159, 242));
|
|
|
+ button.setText(text);
|
|
|
+ button.setGravity(Gravity.CENTER);
|
|
|
+ button.setTextSize(14);
|
|
|
+ button.setPadding(dip2px(12), 0, dip2px(32), dip2px(BUTTON_BOTTOM));
|
|
|
+ button.setOnClickListener(listener);
|
|
|
+ mButtonLayout.addView(button);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * set negative button
|
|
|
+ *
|
|
|
+ * @param text the name of button
|
|
|
+ */
|
|
|
+ public void setNegativeButton(String text, final View.OnClickListener listener) {
|
|
|
+ Button button = new Button(mContext);
|
|
|
+ LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
|
|
|
+ LinearLayout.LayoutParams.WRAP_CONTENT,
|
|
|
+ LinearLayout.LayoutParams.WRAP_CONTENT);
|
|
|
+ button.setLayoutParams(params);
|
|
|
+ button.setBackgroundResource(R.drawable.dialog_material_card);
|
|
|
+ button.setText(text);
|
|
|
+ button.setTextColor(Color.argb(222, 0, 0, 0));
|
|
|
+ button.setTextSize(14);
|
|
|
+ button.setGravity(Gravity.CENTER);
|
|
|
+ button.setPadding(0, 0, 0, dip2px(8));
|
|
|
+ button.setOnClickListener(listener);
|
|
|
+ if (mButtonLayout.getChildCount() > 0) {
|
|
|
+ params.setMargins(20, 0, 10, dip2px(BUTTON_BOTTOM));
|
|
|
+ button.setLayoutParams(params);
|
|
|
+ mButtonLayout.addView(button, 1);
|
|
|
+ } else {
|
|
|
+ button.setLayoutParams(params);
|
|
|
+ mButtonLayout.addView(button);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void setView(View view) {
|
|
|
+ LinearLayout l = (LinearLayout) mAlertDialogWindow.findViewById(
|
|
|
+ R.id.contentView);
|
|
|
+ l.removeAllViews();
|
|
|
+ ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(
|
|
|
+ ViewGroup.LayoutParams.MATCH_PARENT,
|
|
|
+ ViewGroup.LayoutParams.WRAP_CONTENT);
|
|
|
+ view.setLayoutParams(layoutParams);
|
|
|
+
|
|
|
+ view.setOnFocusChangeListener(new View.OnFocusChangeListener() {
|
|
|
+ @Override
|
|
|
+ public void onFocusChange(View v, boolean hasFocus) {
|
|
|
+ mAlertDialogWindow.setSoftInputMode(
|
|
|
+ WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
|
|
|
+ // show imm
|
|
|
+ InputMethodManager imm
|
|
|
+ = (InputMethodManager) mContext.getSystemService(
|
|
|
+ Context.INPUT_METHOD_SERVICE);
|
|
|
+ imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,
|
|
|
+ InputMethodManager.HIDE_IMPLICIT_ONLY);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ l.addView(view);
|
|
|
+
|
|
|
+ if (view instanceof ViewGroup) {
|
|
|
+
|
|
|
+ ViewGroup viewGroup = (ViewGroup) view;
|
|
|
+
|
|
|
+ for (int i = 0; i < viewGroup.getChildCount(); i++) {
|
|
|
+ if (viewGroup.getChildAt(i) instanceof EditText) {
|
|
|
+ EditText editText = (EditText) viewGroup.getChildAt(i);
|
|
|
+ editText.setFocusable(true);
|
|
|
+ editText.requestFocus();
|
|
|
+ editText.setFocusableInTouchMode(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (int i = 0; i < viewGroup.getChildCount(); i++) {
|
|
|
+ if (viewGroup.getChildAt(
|
|
|
+ i) instanceof AutoCompleteTextView) {
|
|
|
+ AutoCompleteTextView autoCompleteTextView
|
|
|
+ = (AutoCompleteTextView) viewGroup.getChildAt(
|
|
|
+ i);
|
|
|
+ autoCompleteTextView.setFocusable(true);
|
|
|
+ autoCompleteTextView.requestFocus();
|
|
|
+ autoCompleteTextView.setFocusableInTouchMode(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void setContentView(View contentView) {
|
|
|
+ ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(
|
|
|
+ ViewGroup.LayoutParams.MATCH_PARENT,
|
|
|
+ ViewGroup.LayoutParams.MATCH_PARENT);
|
|
|
+ contentView.setLayoutParams(layoutParams);
|
|
|
+ if (contentView instanceof ListView) {
|
|
|
+ setListViewHeightBasedOnChildren((ListView) contentView);
|
|
|
+ }
|
|
|
+ LinearLayout linearLayout
|
|
|
+ = (LinearLayout) mAlertDialogWindow.findViewById(
|
|
|
+ R.id.message_content_view);
|
|
|
+ if (linearLayout != null) {
|
|
|
+ linearLayout.removeAllViews();
|
|
|
+ linearLayout.addView(contentView);
|
|
|
+ }
|
|
|
+ for (int i = 0;
|
|
|
+ i < (linearLayout != null ? linearLayout.getChildCount() : 0);
|
|
|
+ i++) {
|
|
|
+ if (linearLayout.getChildAt(
|
|
|
+ i) instanceof AutoCompleteTextView) {
|
|
|
+ AutoCompleteTextView autoCompleteTextView
|
|
|
+ = (AutoCompleteTextView) linearLayout.getChildAt(i);
|
|
|
+ autoCompleteTextView.setFocusable(true);
|
|
|
+ autoCompleteTextView.requestFocus();
|
|
|
+ autoCompleteTextView.setFocusableInTouchMode(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Set a custom view resource to be the contents of the dialog. The
|
|
|
+ * resource will be inflated into a ScrollView.
|
|
|
+ *
|
|
|
+ * @param layoutResId resource ID to be inflated
|
|
|
+ */
|
|
|
+ public void setContentView(int layoutResId) {
|
|
|
+ mMessageContentRoot.removeAllViews();
|
|
|
+ // Not setting this to the other content view because user has defined their own
|
|
|
+ // layout params, and we don't want to overwrite those.
|
|
|
+ LayoutInflater.from(mMessageContentRoot.getContext())
|
|
|
+ .inflate(layoutResId, mMessageContentRoot);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void setBackground(Drawable drawable) {
|
|
|
+ LinearLayout linearLayout
|
|
|
+ = (LinearLayout) mAlertDialogWindow.findViewById(
|
|
|
+ R.id.material_background);
|
|
|
+ linearLayout.setBackground(drawable);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void setBackgroundResource(int resId) {
|
|
|
+ LinearLayout linearLayout
|
|
|
+ = (LinearLayout) mAlertDialogWindow.findViewById(
|
|
|
+ R.id.material_background);
|
|
|
+ linearLayout.setBackgroundResource(resId);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void setCanceledOnTouchOutside(boolean canceledOnTouchOutside) {
|
|
|
+ mAlertDialog.setCanceledOnTouchOutside(canceledOnTouchOutside);
|
|
|
+ mAlertDialog.setCancelable(canceledOnTouchOutside);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private boolean isNullOrEmpty(String nText) {
|
|
|
+ return nText == null || nText.isEmpty();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void setListViewHeightBasedOnChildren(ListView listView) {
|
|
|
+ ListAdapter listAdapter = listView.getAdapter();
|
|
|
+ if (listAdapter == null) {
|
|
|
+ // pre-condition
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ int totalHeight = 0;
|
|
|
+ for (int i = 0; i < listAdapter.getCount(); i++) {
|
|
|
+ View listItem = listAdapter.getView(i, null, listView);
|
|
|
+ listItem.measure(0, 0);
|
|
|
+ totalHeight += listItem.getMeasuredHeight();
|
|
|
+ }
|
|
|
+
|
|
|
+ ViewGroup.LayoutParams params = listView.getLayoutParams();
|
|
|
+ params.height = totalHeight +
|
|
|
+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
|
|
|
+ listView.setLayoutParams(params);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|