文章有很多是借鑑的,只不過自己做一下總結,畢竟,東西還是拿到自己手裏安穩,自定義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>恩,基本就這麼多了
第一次寫,字體格式都不知道如何修改,大家就將就着看吧