博客
关于我
android自定义无边框无标题的DialogFragment替代dialog
阅读量:398 次
发布时间:2019-03-05

本文共 6661 字,大约阅读时间需要 22 分钟。

?Android????????Activity?????????????????DialogFragment??AlertDialog?Dialog?????????DialogFragment??????????????????????Activity????????????????????

?????AskDialogFragment??????

AskDialogFragment.java

public class AskDialogFragment extends DialogFragment {
private Context mContext;
private LayoutInflater mInflater;
private View tipsView;
private TextView tipsTextView;
private TextView textTitle;
private Button buttonYes;
private Button buttonNo;
private AskFragmentInterface askFragmentInterface;
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 from activity
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) {
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) {
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() {
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() {
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();
}
}

????

??????????????????????

public interface AskFragmentInterface {
void setAskPositiveClick();
}

???AskDialogFragment???????

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

XML??

????

转载地址:http://xbbzz.baihongyu.com/

你可能感兴趣的文章
Nginx + Spring Boot 实现负载均衡
查看>>
Nginx + uWSGI + Flask + Vhost
查看>>
Nginx - Header详解
查看>>
Nginx - 反向代理、负载均衡、动静分离、底层原理(案例实战分析)
查看>>
nginx 1.24.0 安装nginx最新稳定版
查看>>
nginx 301 永久重定向
查看>>
nginx css,js合并插件,淘宝nginx合并js,css插件
查看>>
Nginx gateway集群和动态网关
查看>>
Nginx Location配置总结
查看>>
Nginx log文件写入失败?log文件权限设置问题
查看>>
Nginx Lua install
查看>>
nginx net::ERR_ABORTED 403 (Forbidden)
查看>>
Nginx SSL私有证书自签,且反代80端口
查看>>
Nginx upstream性能优化
查看>>
Nginx 中解决跨域问题
查看>>
nginx 代理解决跨域
查看>>
Nginx 动静分离与负载均衡的实现
查看>>
Nginx 反向代理 MinIO 及 ruoyi-vue-pro 配置 MinIO 详解
查看>>
nginx 反向代理 转发请求时,有时好有时没反应,产生原因及解决
查看>>
Nginx 反向代理解决跨域问题
查看>>