App노자
[Android] DialogFragment란 본문
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 |