From 20d96f0fcc9a9d13210068dbda0fdf94e8d8704f Mon Sep 17 00:00:00 2001 From: wudk <1321708905@qq.com> Date: Wed, 24 Feb 2021 11:15:41 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=B8=A6=E8=BE=93=E5=85=A5=E6=A1=86?= =?UTF-8?q?=E7=9A=84confrim=E5=BC=B9=E7=AA=97=E5=A2=9E=E5=8A=A0=E5=8F=AF?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E8=BE=93=E5=85=A5=E7=B1=BB=E5=9E=8BinputType?= =?UTF-8?q?,=E5=9C=A8hint=E5=8F=82=E6=95=B0=E5=90=8E=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xpopupdemo/fragment/QuickStartDemo.java | 3 +- .../src/main/java/com/lxj/xpopup/XPopup.java | 64 ++++++++++++++++--- .../com/lxj/xpopup/impl/ConfirmPopupView.java | 17 +++++ .../xpopup/impl/InputConfirmPopupView.java | 9 +++ 4 files changed, 83 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/lxj/xpopupdemo/fragment/QuickStartDemo.java b/app/src/main/java/com/lxj/xpopupdemo/fragment/QuickStartDemo.java index 221a6353..7b5ed43d 100644 --- a/app/src/main/java/com/lxj/xpopupdemo/fragment/QuickStartDemo.java +++ b/app/src/main/java/com/lxj/xpopupdemo/fragment/QuickStartDemo.java @@ -4,6 +4,7 @@ import android.graphics.Color; import android.os.Build; import android.os.Handler; +import android.text.InputType; import android.util.Log; import android.view.View; import androidx.annotation.RequiresApi; @@ -152,7 +153,7 @@ public void onConfirm() { .setPopupCallback(new DemoXPopupListener()) // .autoFocusEditText(false) //是否让弹窗内的EditText自动获取焦点,默认是true //.moveUpToKeyboard(false) //是否移动到软键盘上面,默认为true - .asInputConfirm("我是标题", null, null, "我是默认Hint文字", + .asInputConfirm("我是标题", null, null, "我是默认Hint文字", InputType.TYPE_CLASS_NUMBER, new OnInputConfirmListener() { @Override public void onConfirm(String text) { diff --git a/library/src/main/java/com/lxj/xpopup/XPopup.java b/library/src/main/java/com/lxj/xpopup/XPopup.java index 7e7b3caa..b89c7b4f 100644 --- a/library/src/main/java/com/lxj/xpopup/XPopup.java +++ b/library/src/main/java/com/lxj/xpopup/XPopup.java @@ -7,7 +7,9 @@ import android.view.MotionEvent; import android.view.View; import android.widget.ImageView; + import androidx.annotation.RequiresApi; + import com.lxj.xpopup.animator.PopupAnimator; import com.lxj.xpopup.core.AttachPopupView; import com.lxj.xpopup.core.BasePopupView; @@ -33,11 +35,13 @@ import com.lxj.xpopup.interfaces.XPopupCallback; import com.lxj.xpopup.interfaces.XPopupImageLoader; import com.lxj.xpopup.util.XPermission; + import java.util.List; public class XPopup { - private XPopup() { } + private XPopup() { + } /** * 全局弹窗的设置 @@ -46,9 +50,11 @@ private XPopup() { } private static int animationDuration = 350; public static int statusBarShadowColor = Color.parseColor("#55000000"); private static int shadowBgColor = Color.parseColor("#7F000000"); + public static void setShadowBgColor(int color) { shadowBgColor = color; } + public static int getShadowBgColor() { return shadowBgColor; } @@ -74,21 +80,23 @@ public static void setAnimationDuration(int duration) { /** * 在长按弹出弹窗后,能保证下层View不能滑动 + * * @param v */ public static PointF longClickPoint = null; - public static void fixLongClick(View v){ + + public static void fixLongClick(View v) { v.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { - if(event.getAction()==MotionEvent.ACTION_DOWN){ + if (event.getAction() == MotionEvent.ACTION_DOWN) { longClickPoint = new PointF(event.getRawX(), event.getRawY()); } - if("xpopup".equals(v.getTag()) && event.getAction()==MotionEvent.ACTION_MOVE){ + if ("xpopup".equals(v.getTag()) && event.getAction() == MotionEvent.ACTION_MOVE) { //长按发送,阻断父View拦截 v.getParent().requestDisallowInterceptTouchEvent(true); } - if(event.getAction()==MotionEvent.ACTION_UP){ + if (event.getAction() == MotionEvent.ACTION_UP) { //长按结束,恢复阻断 v.getParent().requestDisallowInterceptTouchEvent(false); v.setTag(null); @@ -193,7 +201,7 @@ public Builder watchView(View watchView) { this.popupInfo.watchView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { - if (event.getAction() == MotionEvent.ACTION_DOWN){ + if (event.getAction() == MotionEvent.ACTION_DOWN) { popupInfo.touchPoint = new PointF(event.getRawX(), event.getRawY()); } return false; @@ -227,6 +235,7 @@ public Builder customAnimator(PopupAnimator customAnimator) { /** * 设置高度,如果重写了弹窗的getPopupHeight,则以重写的为准 * 并且受最大高度限制 + * * @param height * @return */ @@ -238,6 +247,7 @@ public Builder popupHeight(int height) { /** * 设置宽度,如果重写了弹窗的getPopupWidth,则以重写的为准 * 并且受最大宽度限制 + * * @param width * @return */ @@ -441,6 +451,7 @@ public Builder isClickThrough(boolean isClickThrough) { /** * 是否允许应用在后台的时候也能弹出弹窗,默认是false。注意如果开启这个开关,需要申请悬浮窗权限才能生效。 * 直接使用 XPopup.requestOverlayPermission()即可申请 + * * @param enableShowWhenAppBackground * @return */ @@ -486,9 +497,9 @@ public Builder borderRadius(float borderRadius) { /** * 是否已屏幕中心进行定位,默认是false,为false时根据Material范式进行定位,主要影响Attach系列弹窗 * Material范式下是: - * 弹窗优先显示在目标下方,下方距离不够才显示在上方 + * 弹窗优先显示在目标下方,下方距离不够才显示在上方 * 已屏幕中心进行定位: - * 目标在屏幕上半方弹窗显示在目标下面,目标在屏幕下半方则弹窗显示在目标上面 + * 目标在屏幕上半方弹窗显示在目标下面,目标在屏幕下半方则弹窗显示在目标上面 * * @param positionByWindowCenter * @return @@ -557,7 +568,7 @@ public ConfirmPopupView asConfirm(CharSequence title, CharSequence content, OnCo * @param hint 输入框默认文字 * @param confirmListener 点击确认的监听器 * @param cancelListener 点击取消的监听器 - * @param bindLayoutId 自定义布局的id,没有传0。 要求布局中必须包含的TextView以及id有:tv_title,tv_content,tv_cancel,tv_confirm + * @param bindLayoutId 自定义布局的id,没有传0。 要求布局中必须包含的TextView以及id有:tv_title,tv_content,tv_cancel,tv_confirm * @return */ public InputConfirmPopupView asInputConfirm(CharSequence title, CharSequence content, CharSequence inputContent, CharSequence hint, OnInputConfirmListener confirmListener, OnCancelListener cancelListener, int bindLayoutId) { @@ -570,18 +581,53 @@ public InputConfirmPopupView asInputConfirm(CharSequence title, CharSequence con return popupView; } + /** + * 可以选择ediText输入类型inputType + */ + public InputConfirmPopupView asInputConfirm(CharSequence title, CharSequence content, CharSequence inputContent, CharSequence hint, int inputType, OnInputConfirmListener confirmListener, OnCancelListener cancelListener, int bindLayoutId) { + popupType(PopupType.Center); + InputConfirmPopupView popupView = new InputConfirmPopupView(this.context, bindLayoutId, inputType); + popupView.setTitleContent(title, content, hint); + popupView.inputContent = inputContent; + popupView.setListener(confirmListener, cancelListener); + popupView.popupInfo = this.popupInfo; + return popupView; + } + public InputConfirmPopupView asInputConfirm(CharSequence title, CharSequence content, CharSequence inputContent, CharSequence hint, OnInputConfirmListener confirmListener) { return asInputConfirm(title, content, inputContent, hint, confirmListener, null, 0); } + /** + * 支持inputType + */ + public InputConfirmPopupView asInputConfirm(CharSequence title, CharSequence content, CharSequence inputContent, CharSequence hint, int inputType, OnInputConfirmListener confirmListener) { + return asInputConfirm(title, content, inputContent, hint, inputType, confirmListener, null, 0); + } + public InputConfirmPopupView asInputConfirm(CharSequence title, CharSequence content, CharSequence hint, OnInputConfirmListener confirmListener) { return asInputConfirm(title, content, null, hint, confirmListener, null, 0); } + /** + * 支持inputType + */ + public InputConfirmPopupView asInputConfirm(CharSequence title, CharSequence content, CharSequence hint, int inputType, OnInputConfirmListener confirmListener) { + return asInputConfirm(title, content, null, hint, inputType, confirmListener, null, 0); + } + + public InputConfirmPopupView asInputConfirm(CharSequence title, CharSequence content, OnInputConfirmListener confirmListener) { return asInputConfirm(title, content, null, null, confirmListener, null, 0); } + /** + * 支持inputType + */ + public InputConfirmPopupView asInputConfirm(CharSequence title, CharSequence content, int inputType, OnInputConfirmListener confirmListener) { + return asInputConfirm(title, content, null, null, inputType, confirmListener, null, 0); + } + /** * 显示在中间的列表Popup * diff --git a/library/src/main/java/com/lxj/xpopup/impl/ConfirmPopupView.java b/library/src/main/java/com/lxj/xpopup/impl/ConfirmPopupView.java index 72c06982..d1947b28 100644 --- a/library/src/main/java/com/lxj/xpopup/impl/ConfirmPopupView.java +++ b/library/src/main/java/com/lxj/xpopup/impl/ConfirmPopupView.java @@ -4,6 +4,7 @@ import androidx.annotation.NonNull; import android.graphics.Color; +import android.text.InputType; import android.text.TextUtils; import android.text.method.LinkMovementMethod; import android.view.View; @@ -31,6 +32,7 @@ public class ConfirmPopupView extends CenterPopupView implements View.OnClickLis EditText et_input; View divider1, divider2; public boolean isHideCancel = false; + public int et_input_type = InputType.TYPE_NULL; /** * @@ -42,6 +44,17 @@ public ConfirmPopupView(@NonNull Context context, int bindLayoutId) { this.bindLayoutId = bindLayoutId; addInnerContent(); } + /** + * @param context + * @param bindLayoutId layoutId 要求布局中必须包含的TextView以及id有:tv_title,tv_content,tv_cancel,tv_confirm + * @param inputType + */ + public ConfirmPopupView(@NonNull Context context, int bindLayoutId, int inputType) { + super(context); + this.bindLayoutId = bindLayoutId; + this.et_input_type = inputType; + addInnerContent(); + } @Override protected int getImplLayoutId() { @@ -59,6 +72,10 @@ protected void initPopupContent() { et_input = findViewById(R.id.et_input); divider1 = findViewById(R.id.xpopup_divider1); divider2 = findViewById(R.id.xpopup_divider2); + /** + *输入类型 + */ + et_input.setInputType(et_input_type); tv_cancel.setOnClickListener(this); tv_confirm.setOnClickListener(this); diff --git a/library/src/main/java/com/lxj/xpopup/impl/InputConfirmPopupView.java b/library/src/main/java/com/lxj/xpopup/impl/InputConfirmPopupView.java index 5f997e37..e0181e5f 100644 --- a/library/src/main/java/com/lxj/xpopup/impl/InputConfirmPopupView.java +++ b/library/src/main/java/com/lxj/xpopup/impl/InputConfirmPopupView.java @@ -30,6 +30,15 @@ public InputConfirmPopupView(@NonNull Context context, int bindLayoutId) { super(context, bindLayoutId); } + /** + * @param context + * @param bindLayoutId 在Confirm弹窗基础上需要增加一个id为et_input的EditText + * @param inputType 输入类型 + */ + public InputConfirmPopupView(@NonNull Context context, int bindLayoutId, int inputType) { + super(context, bindLayoutId, inputType); + } + public CharSequence inputContent; @Override From 5cd97efad4687cf26e675c9af4d4d609b67fa7db Mon Sep 17 00:00:00 2001 From: wudk <1321708905@qq.com> Date: Fri, 17 Sep 2021 17:07:40 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=8E=9F=E6=9D=A5?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E6=A1=86=E6=B2=A1=E6=9C=89=E7=84=A6=E7=82=B9?= =?UTF-8?q?=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xpopupdemo/fragment/QuickStartDemo.java | 2 +- .../com/lxj/xpopup/impl/ConfirmPopupView.java | 35 +++++++++++-------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/lxj/xpopupdemo/fragment/QuickStartDemo.java b/app/src/main/java/com/lxj/xpopupdemo/fragment/QuickStartDemo.java index 07755437..b9988247 100644 --- a/app/src/main/java/com/lxj/xpopupdemo/fragment/QuickStartDemo.java +++ b/app/src/main/java/com/lxj/xpopupdemo/fragment/QuickStartDemo.java @@ -150,7 +150,7 @@ public void onConfirm() { .setPopupCallback(new DemoXPopupListener()) // .autoFocusEditText(false) //是否让弹窗内的EditText自动获取焦点,默认是true //.moveUpToKeyboard(false) //是否移动到软键盘上面,默认为true - .asInputConfirm("我是标题", null, null, "我是默认Hint文字", InputType.TYPE_CLASS_NUMBER, + .asInputConfirm("我是标题", null, null, "我是默认Hint文字", new OnInputConfirmListener() { @Override public void onConfirm(String text) { diff --git a/library/src/main/java/com/lxj/xpopup/impl/ConfirmPopupView.java b/library/src/main/java/com/lxj/xpopup/impl/ConfirmPopupView.java index d1947b28..84d88d9b 100644 --- a/library/src/main/java/com/lxj/xpopup/impl/ConfirmPopupView.java +++ b/library/src/main/java/com/lxj/xpopup/impl/ConfirmPopupView.java @@ -1,6 +1,7 @@ package com.lxj.xpopup.impl; import android.content.Context; + import androidx.annotation.NonNull; import android.graphics.Color; @@ -32,10 +33,9 @@ public class ConfirmPopupView extends CenterPopupView implements View.OnClickLis EditText et_input; View divider1, divider2; public boolean isHideCancel = false; - public int et_input_type = InputType.TYPE_NULL; + public int et_input_type = -500; /** - * * @param context * @param bindLayoutId layoutId 要求布局中必须包含的TextView以及id有:tv_title,tv_content,tv_cancel,tv_confirm */ @@ -44,6 +44,7 @@ public ConfirmPopupView(@NonNull Context context, int bindLayoutId) { this.bindLayoutId = bindLayoutId; addInnerContent(); } + /** * @param context * @param bindLayoutId layoutId 要求布局中必须包含的TextView以及id有:tv_title,tv_content,tv_cancel,tv_confirm @@ -75,8 +76,9 @@ protected void initPopupContent() { /** *输入类型 */ - et_input.setInputType(et_input_type); - + if (et_input_type != -500) { + et_input.setInputType(et_input_type); + } tv_cancel.setOnClickListener(this); tv_confirm.setOnClickListener(this); @@ -88,7 +90,7 @@ protected void initPopupContent() { if (!TextUtils.isEmpty(content)) { tv_content.setText(content); - }else { + } else { tv_content.setVisibility(GONE); } if (!TextUtils.isEmpty(cancelText)) { @@ -99,7 +101,7 @@ protected void initPopupContent() { } if (isHideCancel) { tv_cancel.setVisibility(GONE); - if(divider2!=null) divider2.setVisibility(GONE); + if (divider2 != null) divider2.setVisibility(GONE); } applyTheme(); } @@ -110,25 +112,28 @@ protected void applyLightTheme() { tv_content.setTextColor(getResources().getColor(R.color._xpopup_content_color)); tv_cancel.setTextColor(Color.parseColor("#666666")); tv_confirm.setTextColor(XPopup.getPrimaryColor()); - if(divider1!=null)divider1.setBackgroundColor(getResources().getColor(R.color._xpopup_list_divider)); - if(divider2!=null)divider2.setBackgroundColor(getResources().getColor(R.color._xpopup_list_divider)); + if (divider1 != null) + divider1.setBackgroundColor(getResources().getColor(R.color._xpopup_list_divider)); + if (divider2 != null) + divider2.setBackgroundColor(getResources().getColor(R.color._xpopup_list_divider)); } - public TextView getTitleTextView(){ + public TextView getTitleTextView() { return findViewById(R.id.tv_title); } - public TextView getContentTextView(){ + public TextView getContentTextView() { return findViewById(R.id.tv_content); } - public TextView getCancelTextView(){ + public TextView getCancelTextView() { return findViewById(R.id.tv_cancel); } - public TextView getConfirmTextView(){ + public TextView getConfirmTextView() { return findViewById(R.id.tv_confirm); } + @Override protected void applyDarkTheme() { super.applyDarkTheme(); @@ -136,8 +141,10 @@ protected void applyDarkTheme() { tv_content.setTextColor(getResources().getColor(R.color._xpopup_white_color)); tv_cancel.setTextColor(getResources().getColor(R.color._xpopup_white_color)); tv_confirm.setTextColor(getResources().getColor(R.color._xpopup_white_color)); - if(divider1!=null)divider1.setBackgroundColor(getResources().getColor(R.color._xpopup_list_dark_divider)); - if(divider2!=null)divider2.setBackgroundColor(getResources().getColor(R.color._xpopup_list_dark_divider)); + if (divider1 != null) + divider1.setBackgroundColor(getResources().getColor(R.color._xpopup_list_dark_divider)); + if (divider2 != null) + divider2.setBackgroundColor(getResources().getColor(R.color._xpopup_list_dark_divider)); } public ConfirmPopupView setListener(OnConfirmListener confirmListener, OnCancelListener cancelListener) { From f7cdae4c0551a13b04f3cedea506432e98b0fbf7 Mon Sep 17 00:00:00 2001 From: wudk <1321708905@qq.com> Date: Fri, 17 Sep 2021 17:22:06 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=BE=93=E5=85=A5?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E8=BE=93=E5=85=A5=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/lxj/xpopup/impl/ConfirmPopupView.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/library/src/main/java/com/lxj/xpopup/impl/ConfirmPopupView.java b/library/src/main/java/com/lxj/xpopup/impl/ConfirmPopupView.java index 84d88d9b..50fb8e23 100644 --- a/library/src/main/java/com/lxj/xpopup/impl/ConfirmPopupView.java +++ b/library/src/main/java/com/lxj/xpopup/impl/ConfirmPopupView.java @@ -33,7 +33,7 @@ public class ConfirmPopupView extends CenterPopupView implements View.OnClickLis EditText et_input; View divider1, divider2; public boolean isHideCancel = false; - public int et_input_type = -500; + public int et_input_type = InputType.TYPE_CLASS_TEXT; /** * @param context @@ -76,9 +76,7 @@ protected void initPopupContent() { /** *输入类型 */ - if (et_input_type != -500) { - et_input.setInputType(et_input_type); - } + et_input.setInputType(et_input_type); tv_cancel.setOnClickListener(this); tv_confirm.setOnClickListener(this);