1. 程式人生 > >Android仿ios底部彈出框效果

Android仿ios底部彈出框效果

準備:

public class ActionSheet {
   public interface OnActionSheetSelected {
      void onClick(int whichButton);
}

   private ActionSheet() {
   }

   public static Dialog showSheet(final Context context, final int layoutId,
         final OnActionSheetSelected actionSheetSelected,
         final OnCancelListener cancelListener) {
      final 
Dialog dialog = new Dialog(context, R.style.ActionSheet); final LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); final LinearLayout layout = (LinearLayout) inflater.inflate(layoutId, null); final int cFullFillWidth = 10000
; layout.setMinimumWidth(cFullFillWidth); final Window w = dialog.getWindow(); final WindowManager.LayoutParams lp = w.getAttributes(); lp.x = 0; final int cMakeBottom = -1000; lp.y = cMakeBottom; lp.gravity = Gravity.BOTTOM; dialog.onWindowAttributesChanged(lp); dialog.setCanceledOnTouchOutside(true
); if (cancelListener != null) { dialog.setOnCancelListener(cancelListener); } dialog.setContentView(layout); dialog.show(); return dialog; } }
<style name="ActionSheet" parent="@android:style/Theme.Dialog">

應用:

private ActionSheet.OnActionSheetSelected mOnActionSheetSelected;
private Dialog mActionSheet;
呼叫showGetPhotoDialog()方法
public void onActionSheetClicked(final View view) {
   mOnActionSheetSelected.onClick(view.getId());
}

public void setOnSheetClicked(final ActionSheet.OnActionSheetSelected onActionSheetSelected) {
   mOnActionSheetSelected = onActionSheetSelected;
}

private void showGetPhotoDialog() {
   mActionSheet = ActionSheet.showSheet(this, R.layout.actionsheet_dialog, getOnActionSheetClicked(), null);
}

private ActionSheet.OnActionSheetSelected getOnActionSheetClicked() {

   return new ActionSheet.OnActionSheetSelected() {

      @Override
public void onClick(final int whichButton) {
         switch (whichButton) {
            case R.id.tv_button1:
               
               break;
     case R.id.tv_button2:
               
               break;
case R.id.tv_calendar: mActionSheet.dismiss(); break; default: break;} mActionSheet.dismiss();} };} 佈局:
<?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="@color/clear"
android:orientation="vertical"
android:padding="5dp" >
    <TextView
android:id="@+id/tv_botton1"
android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/actionsheet_top_selector"android:clickable="true"android:gravity="center"android:onClick="onActionSheetClicked"android:text="Button1"android:textSize="18sp" /> <TextViewandroid:id="@+id/tv_botton2"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/actionsheet_bottom_selector"android:clickable="true"android:gravity="center"android:onClick="onActionSheetClicked"android:text="Button2"android:textColor="@color/green_title_bar"android:textSize="18sp" /> <TextViewandroid:id="@+id/cancel"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:background="@drawable/actionsheet_single_selector"android:clickable="true"android:gravity="center"android:onClick="onActionSheetClicked"android:text="@string/cancle"android:textColor="@color/cancle_blue"android:textSize="18sp" /></LinearLayout>