DialogFragment对话框(一) ——创建对话框
2016-07-27 10:19
375 查看
DialogFragment对话框(一) ——创建对话框
标签(空格分隔): android fragment dialog作者:陈小默
注:以下使用Kotlin语言实现
DialogFragment对话框一 创建对话框
创建一个DialogFragment的子类
1 实现onCreateView
2 实现onCreateDialog
2在Activity中显示Dialoig
去除对话框标题栏
1 AlertDialog
2 ViewDialog
1 创建一个DialogFragment的子类
以下两种实现方式二选一:如果只是想使用DialogFragment代替AlertDialog的话,采用1.2的实现方式,如果想自定义View的话就采用1.1 的实现方式1.1 实现onCreateView()
创建要在对话框中显示的布局文件 dialog_view.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/message" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/ok" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="确定" /> </LinearLayout>
重写onCreateView()方法
class MyViewDialogFragment : DialogFragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { var view: View = inflater.inflate(R.layout.dialog_view, container, false) initView(view) return view } private fun initView(view: View) { var message = view.findViewById(R.id.message) as TextView var button = view.findViewById(R.id.ok) as Button message.text = "显示View对话框" button.setOnClickListener { view -> this.dismiss() } } }
1.2 实现onCreateDialog()
class MyAlertDialogFragment : DialogFragment() { open var ctx: Activity? = null override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { return AlertDialog.Builder(ctx).setTitle("Title") .setMessage("Message") .setCancelable(true) .setPositiveButton("ok", DialogInterface.OnClickListener { dialogInterface, i -> this.dismiss() }) .create() } }
2在Activity中显示Dialoig
这里我在Activity的布局中增加了两个Button,用来显示上述两种方法创建的对话框<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_show" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.hntzj.usedialogfragment.ShowActivity"> <Button android:id="@+id/viewDialog" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="showViewDialog" /> <Button android:id="@+id/alertDialog" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="showAlertDialog" /> </LinearLayout>
showActivity.kt
class ShowActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_show) findViewById(R.id.alertDialog).setOnClickListener { view -> showAlertDialog() } findViewById(R.id.viewDialog).setOnClickListener { view -> showViewDialog() } } private fun showAlertDialog() { var dialog: MyAlertDialogFragment = MyAlertDialogFragment() dialog.ctx = this dialog.show(fragmentManager, "tag") } private fun showViewDialog() { var dialog: MyViewDialogFragment = MyViewDialogFragment() dialog.show(fragmentManager, "tag") } }
我们可以点击按钮看到效果,但是标题栏是不是很难看
3 去除对话框标题栏
对于以上创建的两种对话框,这里有不同的解决方案3.1 AlertDialog
在创建时设置title为nulloverride fun onCreateDialog(savedInstanceState: Bundle?): Dialog { return AlertDialog.Builder(ctx).setTitle("Title") .setMessage("Message") .setCancelable(true) .setPositiveButton("ok", DialogInterface.OnClickListener { dialogInterface, i -> this.dismiss() }) .setTitle("")//设置成空白字符串或者直接使用null都可以让标题栏消失 .create() }
3.2 ViewDialog
设置窗体为无标题override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)//设置窗体为无标题 var view: View = inflater.inflate(R.layout.dialog_view, container, false) initView(view) return view }
下一节介绍:Fragment和Activity的通信
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories