文章有很多是借鉴的,只不过自己做一下总结,毕竟,东西还是拿到自己手里安稳,自定义Dialog弹窗,不是太难的功能。首先我们要做的就是自己定义一个Dialog
public abstract class DialogGetHeadPicture extends Dialog implements View.OnClickListener{
public Activity activity;
private FrameLayout flt_amble_upload, flt_take_photo_upload;
private Button btn_cancel;
public DialogGetHeadPicture(Activity activity) {
super(activity,R.style.MyDialogTheme);
this.activity=activity;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_setting_get_head_picture);
flt_amble_upload = (FrameLayout) findViewById(R.id.flt_amble_upload);
flt_take_photo_upload = (FrameLayout) findViewById(R.id.flt_take_photo_upload);
btn_cancel = (Button) findViewById(R.id.btn_cancel);
flt_amble_upload.setOnClickListener(this);
flt_take_photo_upload.setOnClickListener(this);
btn_cancel.setOnClickListener(this);
setViewLocation();
setCanceledOnTouchOutside(true);//外部点击取消
}
/**
* 设置dialog位于屏幕底部
*/
private void setViewLocation(){
DisplayMetrics dm = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
int height = dm.heightPixels;
Window window = this.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.x = 0;
lp.y = height;
lp.width = ViewGroup.LayoutParams.MATCH_PARENT;
lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
// 设置显示位置
onWindowAttributesChanged(lp);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.flt_amble_upload:
amble();
this.cancel();
break;
case R.id.flt_take_photo_upload:
photo();
this.cancel();
break;
case R.id.btn_cancel:
this.cancel();
break;
}
}
public abstract void amble();
public abstract void photo();
}
其中比较主要的方法就是setviewLocation(),也就是设置dialog位于底部的方法(当然你也可以设置位置其他不同的位置),其中
R.style.MyDialogTheme 是这样的
<style name="MyDialogTheme" parent="AppTheme"> <item name="android:windowFrame">@null</item><!-- 边框 --> <item name="android:windowNoTitle">true</item> <item name="android:backgroundDimEnabled">true</item><!-- 外部变灰 --> <item name="android:windowContentOverlay">@null</item><!-- 内部阴影 --> <item name="android:windowAnimationStyle">@style/dialog_animation</item> </style> <style name="dialog_animation" parent="@android:style/Animation.Dialog"> <item name="android:windowEnterAnimation">@anim/push_bottom_in</item> <item name="android:windowExitAnimation">@anim/push_bottom_out</item> </style> 而这里面呢,dialog_animation 又是这样的:
push_bottom_in:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:interpolator="@android:anim/decelerate_interpolator"
android:duration="300"
android:fromYDelta="100%p"
android:toYDelta="0" />
</set>
push_bottom_out:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:interpolator="@android:anim/decelerate_interpolator" android:duration="300" android:fromYDelta="0" android:toYDelta="50%p" /> </set>
他们都位于res-anim下,需要自己创建
dialog的布局文件如下(也就是上面的
R.layout.dialog_setting_get_head_picture
)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#d3d3d3"
android:orientation="vertical">
<FrameLayout
android:id="@+id/flt_amble_upload"
android:layout_width="match_parent"
android:layout_height="55dp"
android:layout_marginTop="1px"
android:background="#ffffff">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:drawablePadding="13dp"
android:text="@string/amble_upload"
android:gravity="center"
android:textColor="#000000"
android:textSize="15sp" />
</FrameLayout>
<FrameLayout
android:id="@+id/flt_take_photo_upload"
android:layout_width="match_parent"
android:layout_height="55dp"
android:layout_marginTop="2px"
android:background="#ffffff">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:drawablePadding="13dp"
android:gravity="center"
android:text="@string/take_photo_upload"
android:textColor="#000000"
android:textSize="15sp" />
</FrameLayout>
<Button
android:id="@+id/btn_cancel"
android:layout_width="match_parent"
android:layout_height="55dp"
android:layout_marginTop="2px"
android:background="#ffffff"
android:gravity="center"
android:text="@string/cancel"
android:textColor="#000000"
android:textSize="15sp" />
</LinearLayout>
恩,基本就这么多了第一次写,字体格式都不知道如何修改,大家就将就着看吧