对于许久不用的东西,容易忘记。百度许久,也未能找到自己所要。 从今日起,有些东西就记载下来,不仅方便自己,也希望能帮到他人。

对话框很简单,就是new 一个对象,然后给他设置各种各样的属性,网络有很多Dialog的教程,我甚至还看到过仿IOS的Dialog,效果很棒。

不过我大android 真的要抄袭 IOS ,相对于封闭的IOS,android 有什么不能实现?

系统的Dialog模块比较简单,就是一个标题栏,内容以及几个按钮,内容部分可以用布局代替。这样真的能实现我的功能吗?



如图所示,我需要给每个Item设置一个地址,难道要弹出一个对话宽,输入数据,关闭对话框,再弹出对话框,如此反复吗?这样产品经理会杀了我的。

那我应该怎么处理?,给对话宽增加俩个按钮,左/右 移动?



左右箭头向不同的方向滑动,这样就不用弹出对话框-》输入数据-》关闭对话框-》弹出对话框…, 而是弹出对话框-》输入数据-》输入数据-》… -》关闭对话框。

废话不多说了,上代码。

1.自定义类,继承对话框
public class PickDialog extends Dialog { public PickDialog(@NonNull Context
context) {super(context); } public PickDialog(@NonNull Context context, int
themeResId) {super(context, themeResId); } protected PickDialog(@NonNull
Context context,boolean cancelable, @Nullable OnCancelListener cancelListener) {
super(context, cancelable, cancelListener); } }
2.初始化view
private void initView(Context context) { View view =
LayoutInflater.from(context).inflate(R.layout.dialog_layout, null);//设置View
setContentView(view);//findViewById cancel = findViewById(R.id.cancel); confirm
= findViewById(R.id.confirm); address = findViewById(R.id.address); next =
findViewById(R.id.next); last = findViewById(R.id.last); tv_address =
findViewById(R.id.tv_address); bg = findViewById(R.id.bg);
//设置Touch事件,触摸view有动态效果 cancel.setOnTouchListener(this);
confirm.setOnTouchListener(this); next.setOnTouchListener(this);
last.setOnTouchListener(this); //切换到上一个对话框,其实对话框只有一个,只不过点击改变数据,在加上动画效果
last.setOnClickListener(new View.OnClickListener() { @Override public void
onClick(View v) { Log.e(TAG,"onClick: 上一个"); //这个动画效果只是缩放,如果做成淡出,淡入效果就更加逼真了。
ScaleAnimation animation =new ScaleAnimation( 1.0f, 0f, 1.0f, 1.0f,
Animation.RELATIVE_TO_SELF,1.0f, Animation.RELATIVE_TO_SELF, 0.5f );
animation.setDuration(200); bg.startAnimation(animation); iPickDialog.onLast();
} });//切换到下一个对话框,其实对话框只有一个,只不过点击改变数据,在加上动画效果 next.setOnClickListener(new
View.OnClickListener() { @Overridepublic void onClick(View v) { Log.e(TAG,
"onClick: 下一个"); //这个动画效果只是缩放,如果做成淡出,淡入效果就更加逼真了。 ScaleAnimation animation = new
ScaleAnimation(1.0f, 0f, 1.0f, 1.0f, Animation.RELATIVE_TO_SELF, 0f,
Animation.RELATIVE_TO_SELF,0.5f ); animation.setDuration(200);
bg.startAnimation(animation); iPickDialog.onNext(); } });
confirm.setOnClickListener(new View.OnClickListener() { @Override public void
onClick(View v) {//确认按钮 iPickDialog.onConfirm(getAddress()); dismiss(); } });
cancel.setOnClickListener(new View.OnClickListener() { @Override public void
onClick(View v) {//取消按钮 Log.e(TAG, "onClick: cancel"); dismiss(); } }); //放大动画
animation1 =new ScaleAnimation( 1.0f, 1.5f, 1.0f, 1.5f,
Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF, 0.5f );
animation1.setDuration(200); animation1.setFillAfter(true); //动画归位 animation2 =
new ScaleAnimation( 1.0f, 1f, 1.0f, 1f, Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF,0.5f ); animation2.setDuration(200);
animation2.setFillAfter(true); //Edittext监听回车按钮 address.setOnKeyListener(new
View.OnKeyListener() { @Overridepublic boolean onKey(View v, int keyCode,
KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_ENTER) { if (event.getAction()
== KeyEvent.ACTION_DOWN) {//按下事件 ScaleAnimation animation = new ScaleAnimation(
1.0f, 0f, 1.0f, 1.0f, Animation.RELATIVE_TO_SELF, 0f,
Animation.RELATIVE_TO_SELF,0.5f ); animation.setDuration(200);
bg.startAnimation(animation); iPickDialog.onNext(); } }return false; } }); }
R.layout.dialog_layout <?xml version="1.0" encoding="utf-8"?> <RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width=
"match_parent" android:layout_height="match_parent" android:background=
"#55000000" android:orientation="horizontal" > <LinearLayout
android:layout_width="match_parent" android:layout_height="match_parent"
android:layout_centerInParent="true" android:orientation="horizontal"> <
LinearLayout android:layout_width="0dp" android:layout_height="match_parent"
android:layout_weight="0.5"/> <LinearLayout android:layout_width="0dp"
android:layout_height="match_parent" android:layout_weight="9" android:gravity=
"center"> <ImageView android:id="@+id/last" android:layout_width="64dp"
android:layout_height="wrap_content" android:src="@drawable/left"/> <
LinearLayout android:id="@+id/bg" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_weight="1"
android:background="#ffffff" android:orientation="vertical" > <TextView
android:layout_width="match_parent" android:layout_height="wrap_content"
android:layout_marginTop="10dp" android:paddingLeft="10dp" android:text="地址绑定"
android:textColor="#06d6fa" android:textSize="20dp" android:textStyle="bold"/> <
View android:layout_width="match_parent" android:layout_height="2dp"
android:layout_marginTop="5dp" android:background="#06d6fa"/> <TextView
android:id="@+id/tv_address" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_marginLeft="20dp"
android:layout_marginTop="20dp" android:text="地址:" android:textColor="#ff0000"
android:textSize="18sp"/> <led.com.hyco.yt_pickdemo.view.ClearEditText
android:id="@+id/address" android:layout_width="match_parent"
android:layout_height="45dp" android:layout_marginBottom="20dp"
android:layout_marginLeft="20dp" android:layout_marginRight="20dp"
android:layout_marginTop="5dp" android:background="@drawable/edit_bg"
android:paddingLeft="2dp" android:paddingRight="2dp" android:singleLine="true"
android:textColor="#000000" android:textSize="20sp"/> <View android:layout_width
="match_parent" android:layout_height="2dp" android:layout_marginTop="5dp"
android:background="#06d6fa"/> <LinearLayout android:layout_width="match_parent"
android:layout_height="50dp" android:orientation="horizontal"> <TextView
android:id="@+id/cancel" android:layout_width="0dp" android:layout_height=
"match_parent" android:layout_weight="1" android:gravity="center" android:text=
"取消" android:textSize="18sp"/> <View android:layout_width="1dp"
android:layout_height="match_parent" android:background="#06d6fa"/> <TextView
android:id="@+id/confirm" android:layout_width="0dp" android:layout_height=
"match_parent" android:layout_weight="1" android:gravity="center" android:text=
"确定" android:textSize="18sp"/> </LinearLayout> </LinearLayout> <ImageView
android:id="@+id/next" android:layout_width="64dp" android:layout_height=
"wrap_content" android:src="@drawable/right"/> </LinearLayout> <LinearLayout
android:layout_width="0dp" android:layout_height="match_parent"
android:layout_weight="0.5"/> </LinearLayout> </RelativeLayout> 使用方法很简单:
pickDialog =new PickDialog(this, R.style.PickDialog); //设置接口
pickDialog.setiPickDialog(this); //设置数据 pickDialog.init(list.get(pos)); //显示对话框
pickDialog.show();
Demo下载地址:https://download.csdn.net/download/weixin_39923324/10590124
<https://download.csdn.net/download/weixin_39923324/10590124>

友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信