android自定义无边框无标题的DialogFragment替代dialog

Activity 中显示对话框或弹出浮层时,尽量使用 DialogFragment,而非Dialog/AlertDialog,这样便于随Activity生命周期管理对话框/弹出浮层的生命周期。

AskDialogFragment.java

public class AskDialogFragment extends DialogFragment {
    public Context mContext;
    public LayoutInflater mInflater;
    private View tipsView;
    public TextView tipsTextView;
    private TextView textTitle;
    private Button buttonYes;
    private Button buttonNo;
    private AskFragmentInterface askFragmentInterface = null;
    public static AskDialogFragment newInstance() {
        Bundle args = new Bundle();
        AskDialogFragment fragment = new AskDialogFragment();
        fragment.setArguments(args);
        return fragment;
    }
    public enum FOCUS_DIR {
        FOCUS_YES, FOCUS_NO
    }

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        System.out.println("tag = "+getTag()); // tag which is from acitivity which started this fragment
        getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.mContext = getActivity();
        this.mInflater = LayoutInflater.from(mContext);
        initView();
        initPopup();
        setFocusDir(FOCUS_DIR.FOCUS_YES);
        setButtonNoStatus(View.VISIBLE);
        setTitle(R.string.warning);
        setMessage(R.string.really_delete_all);
        setPositiveButton(getString(R.string.yes), new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                askFragmentInterface.setAskPositiveClick();
                dismiss();
            }
        });
        setNegativeButton(getString(R.string.no), new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dismiss();
            }
        });
        buttonNo.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                // TODO Auto-generated method stub
                if (event.getAction() == KeyEvent.ACTION_DOWN) {
                    switch (keyCode) {
                        case KeyEvent.KEYCODE_DPAD_LEFT:
                        case KeyEvent.KEYCODE_DPAD_RIGHT:
                            buttonNo.clearFocus();
                            buttonYes.requestFocus();
                            buttonYes.setFocusable(true);
                            return true;
                    }
                }
                return false;
            }
        });

        buttonYes.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                // TODO Auto-generated method stub
                if (event.getAction() == KeyEvent.ACTION_DOWN) {
                    switch (keyCode) {
                        case KeyEvent.KEYCODE_DPAD_LEFT:
                        case KeyEvent.KEYCODE_DPAD_RIGHT:
                            buttonYes.clearFocus();
                            buttonNo.requestFocus();
                            buttonNo.setFocusable(true);
                            return true;
                    }
                }
                return false;
            }
        });
        return tipsView;
    }

    @Override
    public void onResume() {

        super.onResume();
    }

    public void setAskDialogListener(AskFragmentInterface listener){
        askFragmentInterface = listener;
    }

    public interface AskFragmentInterface {
       void setAskPositiveClick();
    }

    private void initView() {
        // requestWindowFeature(Window.FEATURE_NO_TITLE);
        tipsView = mInflater.inflate(R.layout.ask_tips_dialog, null);
        WindowManager.LayoutParams params = new WindowManager.LayoutParams();
        params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
        getActivity().getWindow().setWindowAnimations(R.style.popwin_anim_bottom_style);
        textTitle = (TextView) tipsView.findViewById(R.id.asktipsTitleText);
        tipsTextView = (TextView) tipsView.findViewById(R.id.asktips_dialog_tips_text);
        buttonNo = (Button) tipsView.findViewById(R.id.asktips_dialog_butNo);
        buttonYes = (Button) tipsView.findViewById(R.id.asktips_dialog_butYes);


    }

    public void setFocusDir(FOCUS_DIR dir) {
        if (dir == FOCUS_DIR.FOCUS_NO) {
            buttonYes.clearFocus();
            buttonNo.requestFocus();
            buttonNo.setFocusable(true);
        } else {
            buttonNo.clearFocus();
            buttonYes.requestFocus();
            buttonYes.setFocusable(true);
        }
    }

    private void initPopup() {
        // TODO Auto-generated method stub
        WindowManager.LayoutParams lp =  getActivity().getWindow().getAttributes();
        lp.gravity = Gravity.CENTER;
        lp.type = WindowManager.LayoutParams.TYPE_PHONE | WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
        lp.height = WindowManager.LayoutParams.MATCH_PARENT;
        getActivity().getWindow().setAttributes(lp);
    }

    public void setMessage(CharSequence message) {
        tipsTextView.setText(message);
    }

    public void setMessage(int messageId) {
        tipsTextView.setText(messageId);
    }

    public void setTitle(CharSequence message) {
        textTitle.setText(message);
    }

    public void setTitle(int messageId) {
        textTitle.setText(messageId);
    }

    public void setPositiveButton(CharSequence text, Button.OnClickListener listener) {
        buttonYes.setText(text);
        buttonYes.setOnClickListener(listener);
    }

    public void setPositiveButton(int id, Button.OnClickListener listener) {
        buttonYes.setText(id);
        buttonYes.setOnClickListener(listener);
    }

    public void setNegativeButton(CharSequence text, Button.OnClickListener listener) {
        buttonNo.setText(text);
        buttonNo.setOnClickListener(listener);
    }

    public void setNegativeButton(int id, Button.OnClickListener listener) {
        buttonNo.setText(id);
        buttonNo.setOnClickListener(listener);
    }
    

    public void setButtonNoStatus(int visibility) {
        buttonNo.setVisibility(visibility);
        buttonYes.setFocusable(true);
        buttonYes.requestFocus();
    }
}

使用方法:

1.实现接口AskFragmentInterface

2.

        final AskDialogFragment askTipsDialog = AskDialogFragment.newInstance();
        askTipsDialog.setAskDialogListener(this);
        askTipsDialog.show(getFragmentManager(), "dialog_fragment");

XML:

1.style

 <style name="Theme_No_Frame" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">false</item>
        <item name="android:windowIsTranslucent">false</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@color/transparent</item>
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:backgroundDimAmount">1</item>
    </style>

2.layout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/transparent"
     >

    <LinearLayout
        android:layout_width="460dp"
        android:layout_height="260dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_gravity="center"
        android:background="@mipmap/add_panel"
        android:gravity="center"
        android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/askTitle"
            android:layout_width="match_parent"
            android:layout_height="70dip"
            android:gravity="center" >

            <TextView
                android:id="@+id/asktipsTitleText"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="center"
                android:layout_marginLeft="20dip"
                android:layout_marginTop="15dip"
                android:gravity="center"
                android:singleLine="true"
                android:ellipsize="marquee"
                android:textColor="@color/text_color_black"
                android:textSize="32sp" />
        </LinearLayout>

        <TextView
            android:id="@+id/asktips_dialog_tips_text"
            android:layout_width="wrap_content"
            android:layout_height="80dip"
            android:layout_gravity="center"
            android:layout_marginLeft="40dip"
            android:layout_marginRight="40dip"
            android:layout_weight="1"
            android:gravity="center"
            android:textColor="@color/text_color_black"
            android:textSize="26sp" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="56dip"
            android:layout_marginLeft="30dip"
            android:layout_marginRight="30dip"
            android:layout_marginBottom="8dip"
            android:gravity="center_horizontal"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/asktips_dialog_butYes"
                android:layout_width="200dip"
                android:layout_height="match_parent"
                android:layout_marginLeft="12dip"
                android:paddingBottom="15dip"
                android:background="@drawable/dialog_button_style"
                android:textColor="@color/text_color_black"
                android:textSize="24sp" />

            <Button
                android:id="@+id/asktips_dialog_butNo"
                android:layout_width="200dip"
                android:layout_height="match_parent"
                android:background="@drawable/dialog_button_style"
                android:textColor="@color/text_color_black"
                android:paddingBottom="15dip"
                android:layout_marginRight="12dip"
                android:textSize="24sp" />
        </LinearLayout>
    </LinearLayout>

</RelativeLayout>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

景兄弟1366

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值