Android DialogFragment簡單使用


  最近想把公司的中獎查詢加個小功能,彈出一個自定義的Dialog,還有聲音,本來想加個煙花特效,沒做出來。QAQ

  

    大概就是這樣子,布局很簡單,讓UI做個透明的背景圖,就OK

 1:定義一個類繼承DialogFragment(看個人需求)

public class AttachDialogFragment extends DialogFragment{

    public Activity mContext;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        this.mContext = activity;
    }
}

 2:簡單使用

/**
 * Author:白樹 on 2018/8/30 14:07
 * <p>  用戶 lose
 * Email:  gusumobai@163.com
 */
public class CustomLoseDialog extends AttachDialogFragment implements View.OnClickListener{

    private ImageView mImg_close;

    private final Handler mHandler = new Handler();
    private MediaPlayer mediaPlayer;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(DialogFragment.STYLE_NO_FRAME,R.style.MyMiddleDialogStyle);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE); //無標題

       // getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

        View view = inflater.inflate(R.layout.lose_custome_dialog,container);
        mImg_close = view.findViewById(R.id.not_winning_close);
        mImg_close.setOnClickListener(this);
        playSound();
        return view;
    }

    private void playSound(){
        try {
            mediaPlayer = MediaPlayer.create(mContext,R.raw.losesound);
            mediaPlayer.start();
        }catch (Exception e){
            e.printStackTrace();
        }
    }


    @Override
    public void onStart() {
        super.onStart();
        int dialogHeight = (int) (mContext.getResources().getDisplayMetrics().heightPixels * 0.8);
        getDialog().getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT,dialogHeight);
        getDialog().setCanceledOnTouchOutside(true); //點擊邊際可消失
        //6秒后讓dialog消失
        if (mHandler != null){
                mHandler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        dismiss();
                        mediaPlayer.stop();
                        mediaPlayer.release();
                    }
                },6000);
        }
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.not_winning_close:
                dismiss();
                break;
        }
    }


}

  3:使用方式

  

private void loseDialog(){
        CustomLoseDialog customLoseDialog = new CustomLoseDialog();
        customLoseDialog.show(getFragmentManager(),"lose");
    }

 4:

      在需要調用的地方,直接調用方法。

  5:

   

 <style name="MyMiddleDialogStyle" parent="@android:style/Theme.Holo.Light.Dialog">
        <!-- 窗口背景色 -->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!--是否有覆蓋-->
        <item name="android:windowContentOverlay">@null</item>
        <!-- 浮於Activity之上 -->
        <item name="android:windowIsFloating">true</item>
        <!-- 邊框 -->
        <item name="android:windowFrame">@null</item>
        <!-- Dialog以外的區域模糊效果 -->
        <item name="android:backgroundDimEnabled">true</item>
        <!-- 無標題 -->
        <item name="android:windowNoTitle">true</item>
        <!-- 半透明 -->
        <item name="android:windowIsTranslucent">true</item>
        <!--進出動畫-->
        <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item>
    </style>

  

    這樣基本就可以用了。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM