App노자

[Android] DialogFragment란 본문

Android/AndroidStudio

[Android] DialogFragment란

앱의노예 2023. 4. 22. 09:46

1. DialogFragment란?


 

 

https://developer.android.com/reference/androidx/fragment/app/DialogFragment

 

DialogFragment  |  Android Developers

androidx.constraintlayout.core.motion.parse

developer.android.com

 

 

 

 

 

 

2. xml 


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:myapp="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:background="@null"
    android:gravity="center"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_marginRight="20dp"
            android:layout_marginLeft="20dp"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true">

            <jp.co.i_bec.happymailapp.customview.CustomButtonClose
                android:id="@+id/common_template_input_dialog_btn_close"
                android:layout_width="32dp"
                android:layout_height="32dp"
                android:layout_marginBottom="10dp"
                android:layout_gravity="right"
                android:background="@null"
                android:visibility="visible" />

            <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/shape_radius_blue_stroke_frame_10dp">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="20dp"
                    android:layout_marginBottom="10dp"
                    android:layout_marginRight="10dp"
                    android:layout_marginLeft="10dp"
                    android:background="@null"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:gravity="center"
                        android:background="@null"
                        android:text="@string/string_title_input_message"
                        android:textColor="@color/color_black"
                        android:textSize="12sp" />

                </LinearLayout>

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="3dp"
                    android:layout_marginBottom="3dp"
                    android:layout_marginRight="15dp"
                    android:layout_gravity="right|bottom"
                    android:background="@null"
                    android:orientation="horizontal">

                    <jp.co.i_bec.happymailapp.customview.PressableImageButton
                        android:id="@+id/common_template_input_dialog_btn_clear"
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:adjustViewBounds="true"
                        android:background="@null"
                        android:src="@drawable/text_clear_btn" />

                    <jp.co.i_bec.happymailapp.customview.PressableButton
                        android:id="@+id/common_template_input_dialog_btn_use_sample"
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:layout_gravity="right|bottom"
                        android:layout_marginLeft="10dp"
                        android:background="@null"
                        myapp:custom_bold="false"
                        myapp:custom_src="@drawable/text_use_exe_btn" />

                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="10dp"
                    android:layout_marginLeft="10dp"
                    android:background="@null"
                    android:orientation="vertical">

                    <EditText
                        android:id="@+id/common_template_input_dialog_etv"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:padding="10dp"
                        android:minHeight="36dp"
                        android:maxHeight="300dp"
                        android:gravity="left|center_vertical"
                        android:background="@drawable/shape_edittext"
                        android:ems="10"
                        android:text=""
                        android:textColor="@color/color_black"
                        android:textSize="16sp" />

                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center"
                    android:background="@null"
                    android:orientation="horizontal">

                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:gravity="bottom|center_horizontal"
                        android:layout_marginTop="10dp"
                        android:layout_marginRight="20dp"
                        android:background="@null"
                        android:orientation="vertical">

                        <Button
                            android:id="@+id/common_template_input_dialog_btn_save"
                            android:layout_width="150dp"
                            android:layout_height="40dp"
                            android:layout_marginBottom="20dp"
                            android:background="@drawable/selector_btn_radius_input_dialog"
                            android:gravity="center"
                            android:text="@string/btn_title_save_and_send"
                            android:textColor="@drawable/selector_btn_radius_input_dialog_text"
                            android:textSize="15dp" />

                    </LinearLayout>

                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:gravity="bottom|center_horizontal"
                        android:layout_marginTop="10dp"
                        android:background="@null"
                        android:orientation="vertical">

                        <Button
                            android:id="@+id/common_template_input_dialog_btn_send"
                            android:layout_width="120dp"
                            android:layout_height="40dp"
                            android:layout_marginBottom="20dp"
                            android:background="@drawable/selector_btn_radius_input_dialog"
                            android:gravity="center"
                            android:text="@string/btn_title_send"
                            android:textColor="@drawable/selector_btn_radius_input_dialog_text"
                            android:textSize="15dp" />

                    </LinearLayout>

                </LinearLayout>

            </LinearLayout>

        </LinearLayout>

        <include
            android:id="@+id/activity_maintab_loading_lock"
            layout="@layout/common_loading_lock"
            android:visibility="invisible" />

    </RelativeLayout>

</LinearLayout>

 

 

package jp.co.i_bec.happymailapp.activity.fragment;

import android.app.Dialog;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import androidx.fragment.app.DialogFragment;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;

import jp.co.i_bec.happymailapp.R;
import jp.co.i_bec.happymailapp.api.Requestor;
import jp.co.i_bec.happymailapp.api.event.APIEvent;
import jp.co.i_bec.happymailapp.api.model.BaseModel;
import jp.co.i_bec.happymailapp.api.response.MemberCommentExResponse;
import jp.co.i_bec.happymailapp.callback.MessageInputDialogCallBack;
import jp.co.i_bec.happymailapp.constants.AppConstants;
import jp.co.i_bec.happymailapp.context.HpmContext;
import jp.co.i_bec.happymailapp.customview.CustomButtonClose;
import jp.co.i_bec.happymailapp.customview.PressableButton;
import jp.co.i_bec.happymailapp.customview.PressableImageButton;
import jp.co.i_bec.happymailapp.utils.EmojiUtils;
import jp.co.i_bec.happymailapp.utils.EndPointUrlUtils;

/**
 * Created by decoo on 2018/05/07.
 */

public class CommonDialogTemplateInput extends DialogFragment {

    private MessageInputDialogCallBack selectCallback_ = null;
    private String mText;
    private final String mExDefaultNum = "1";
    private String mExNum = "";

    private CustomButtonClose mBtnClose;
    private Button mBtnSend;
    private Button mBtnSave;
    private EditText mEditText;
    private PressableImageButton mBtnClear;
    private PressableButton mBtnUseEx;

    // TextWatcher
    private TextWatcher mTextWatcher = new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence text, int start, int before, int count) {
        }
        @Override
        public void beforeTextChanged(CharSequence text, int start, int count, int after) {
        }
        @Override
        public void afterTextChanged(Editable s) {
            if (s.toString().length() > 0) {
                if(!mBtnSend.isSelected()) {
                    // 送信可能
                    mBtnSend.setSelected(true);
                }
                if(!mBtnSave.isSelected()) {
                    // 送信可能
                    mBtnSave.setSelected(true);
                }
            }
            else{
                if(mBtnSend.isSelected()) {
                    // 送信不可
                    mBtnSend.setSelected(false);
                }
                if(mBtnSave.isSelected()) {
                    // 送信不可
                    mBtnSave.setSelected(false);
                }
            }
        }
    };

    @Override
    public Dialog onCreateDialog(Bundle saveInstanceState) {
        Dialog dialog = new Dialog(getActivity(), R.style.CommonDialogYesNo);

        DisplayMetrics metrics = HpmContext.getInstance().getResources().getDisplayMetrics();
        int dialogWidth = (int) (metrics.widthPixels * 1);

        //タイトル非表示でフルスクリーン
        dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        dialog.setContentView(R.layout.common_template_input_dialog);

        WindowManager.LayoutParams layoutParams = dialog.getWindow().getAttributes();
        layoutParams.gravity = Gravity.CENTER;
        layoutParams.width = dialogWidth;

        // 初期値を取得
        mText = getArguments().getString(AppConstants.INTENT_INPUT_EDIT_TEXT);

        // EditText
        mEditText = (EditText) dialog.findViewById(R.id.common_template_input_dialog_etv);
        mEditText.setText("");
        mEditText.addTextChangedListener(mTextWatcher);

        // ボタン
        mBtnClose = (CustomButtonClose) dialog.findViewById(R.id.common_template_input_dialog_btn_close);
        mBtnSave = (Button) dialog.findViewById(R.id.common_template_input_dialog_btn_save);
        mBtnSend = (Button) dialog.findViewById(R.id.common_template_input_dialog_btn_send);
        mBtnClear = (PressableImageButton) dialog.findViewById(R.id.common_template_input_dialog_btn_clear);

        mBtnUseEx = (PressableButton) dialog.findViewById(R.id.common_template_input_dialog_btn_use_sample);
        showmBtnUseExText();

        // 保存して送信
        mBtnSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mBtnSave.isSelected()) {
                    selectDialogMenu(MessageInputDialogCallBack.SELECT_SAVE, mEditText.getText().toString());
                }
            }
        });

        // 送信
        mBtnSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mBtnSend.isSelected()) {
                    selectDialogMenu(MessageInputDialogCallBack.SELECT_SEND, mEditText.getText().toString());
                }
            }
        });

        // Noボタン
        mBtnClose.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                selectDialogMenu(MessageInputDialogCallBack.SELECT_CANCEL, mEditText.getText().toString());
            }
        });

        // クリアボタン
        mBtnClear.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mEditText.setText("");
            }
        });

        //例文ボタン
        mBtnUseEx.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                callRequestGetMemberCommentEx();
            }
        });

        return dialog;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        // 初期値の代入
        mEditText.setText(mText);
    }

    public void selectDialogMenu(int selectRow, String text) {
        if (selectCallback_ != null) selectCallback_.onResultCallBack(selectRow, text);
    }

    public void setSelectCallBacks(MessageInputDialogCallBack callBack) {
        this.selectCallback_ = callBack;
    }

    private void callRequestGetMemberCommentEx() {
        String num = mExNum.equals("")? mExDefaultNum:mExNum;

        Requestor.getInstance().member_comment_ex(
                EndPointUrlUtils.INSTANCE.getEndPointUrl(HpmContext.getInstance().getUrlResponse(), AppConstants.API_MEMBER_COMMENT_EX),
                HpmContext.getInstance().getDeviceId(),
                HpmContext.getInstance().getSessionToken(),
                num
        ).enqueue(new APIEvent<MemberCommentExResponse>() {
            @Override
            public void onSuccess(MemberCommentExResponse response) {
                getCommentExSuccess(response);
                System.out.println("choi onSuccess");
            }

            @Override
            public void onFailure(BaseModel response) {
                loadingDialogFragment(false);
            }
        });

        loadingDialogFragment(true);

    }

    private void getCommentExSuccess(MemberCommentExResponse resultModel) {
        loadingDialogFragment(false);
        mExNum = resultModel.ex_number;
        setmEditText(resultModel.comment_body);
        showmBtnUseExText();
    }

    //入力欄に文字を入力
    private void setmEditText(String text){
        if (text == null || text.equals("")){return;}

        mEditText.setText(EmojiUtils.emojiEscaper(text));
    }

    // 例文btnタイトル更新
    private void showmBtnUseExText() {
        String num = mExNum.equals("")? mExDefaultNum:mExNum;
        mBtnUseEx.setText(HpmContext.getInstance().getResources().getString(R.string.notice_register_comment_ex_btn,num));
    }

    private void loadingDialogFragment(boolean loading) {
        if(loading) {
            getDialog().findViewById(R.id.activity_maintab_loading_lock).setVisibility(View.VISIBLE);
            getDialog().getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
        }
        else{
            getDialog().findViewById(R.id.activity_maintab_loading_lock).setVisibility(View.INVISIBLE);
            getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
        }

    }


}

'Android > AndroidStudio' 카테고리의 다른 글

[Android] ViewTreeObserver란  (0) 2023.05.17
[Android] customSelectionActionMode 구현 방법  (0) 2023.04.29
[Android] <include> tag  (0) 2023.04.19
[Android] Dialog란  (0) 2023.04.13
[Kotlin] ViewPager2란  (0) 2023.04.03