您的位置:首页 > 移动开发 > Android开发

Android自定义Dialog对话框

2017-01-16 20:20 387 查看

Android自定义Dialog对话框

一些比较好的app都有自己专属样式的对话框,几乎没有用android提供的最原始的对话框。这里有别人博客里介绍的一段话----DialogFragment在android 3.0时被引入。是一种特殊的Fragment,用于在Activity的内容之上展示一个模态的对话框。典型的用于:展示警告框,输入框,确认框等等。在DialogFragment产生之前,我们创建对话框:一般采用AlertDialog和Dialog。注:官方不推荐直接使用Dialog创建对话框。DialogFragment好处与用法:使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其声明周期,它和Fragment有着基本一致的声明周期。且DialogFragment也允许开发者把Dialog作为内嵌的组件进行重用,类似Fragment。使用DialogFragment至少需要实现onCreateView或者onCreateDIalog方法。onCreateView即使用定义的xml布局文件展示Dialog。onCreateDialog即利用AlertDialog或者Dialog创建出Dialog。

自定义对话框的步骤就是:

一:自己定义好对话框的布局

下面的布局是自己随便定义的,代码就不贴了,看下布局的样子。


二:利用DialogFragment类生成对话框

即定义一个类继承DialogFragment,并重写onCreateView方法。onCreateDialog方法感觉不如前者灵活,就不介绍了。在onCreateView方法中,设置对话框布局,并用接口回调在activity取得布局的view来进行使用。

`public class MyDialog extends DialogFragment {

private View contentView;

/**
* Activity需要实现这个接口来接收Dialog的View.
*/
public interface OnGetContentViewListener{
public void onGetView(View view);
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);//set no title
//*****set contentView Layout*****
contentView=inflater.inflate(R.layout.test,null);
//*****set contentView Layout*****

OnGetContentViewListener listener= (OnGetContentViewListener) getActivity();
listener.onGetView(contentView);//send contentView to Activity
return contentView;
}


}`

测试:

public class MainActivity extends AppCompatActivity implements MyDialog.OnGetContentViewListener{

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void cl(View v) {
MyDialog dialog=new MyDialog();
dialog.show(getSupportFragmentManager(),"");
}

@Override
public void onGetView(View view) {
Toast.makeText(MainActivity.this, ((Button)view.findViewById(R.id.ll)).getText(), Toast.LENGTH_SHORT).show();
}


}

效果如图:



未完待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息