Android 自定义DialogFragment替代popupwindow

原创 2015年07月09日 00:06:20

谷歌建议使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其声明周期,它和Fragment有着基本一致的声明周期。且DialogFragment也允许开发者把AlertDialog作为内嵌的组件进行重用,类似Fragment(DialogFragment可以在大屏幕和小屏幕显示出不同的效果,屏幕旋转相关数据不会被销毁)

普通自定义1:----------------------------------------------------------------------------------

public class MyDialog1 extends DialogFragment{
		@Override  
	    public View onCreateView(LayoutInflater inflater, ViewGroup container,  
	            Bundle savedInstanceState){ 
		getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);//无标题栏
	        View view = inflater.inflate(R.layout.dialogfragment, container,false);  
	        return view;  
	    }
}  
主类:

extends FragmentActivity implements OnClickListener

@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.tv_title:
			MyDialog1 dialog = new MyDialog1();dialog.show(getSupportFragmentManager(), "tag");break; } }
推荐自定义2:------------------------------------------------------------------------------------

public class MyDialog extends DialogFragment implements OnClickListener{  
    private EditText et_title;  
    //自定义接口监听  
    public interface OnInputListener  {    
        void onInputComplete(String title);    
}  
    @Override  
    public Dialog onCreateDialog(Bundle savedInstanceState) {  
        View views=LayoutInflater.from(getActivity()).inflate(R.layout.dialogfragment, null);  
        ImageView iv_go = (ImageView) views.findViewById(R.id.ImageView01);  
        et_title = (EditText) views.findViewById(R.id.et_title);  
        iv_go.setOnClickListener(this);  
        AlertDialog.Builder builder =new AlertDialog.Builder(getActivity());  
        AlertDialog show = builder.show();  
        show.getWindow().setContentView(views);//自定义布局  
        show.getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);//宽高  
        show.getWindow().setGravity(Gravity.TOP);//位置  setLayout
        show.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);//支持输入法show.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);  
        return show;  
       }  
  
   @Override  
   public void onClick(View v) {  
      switch (v.getId()) {  
       case R.id.ImageView01:  
          OnInputListener listener = (OnInputListener) getActivity();    
          listener.onInputComplete(et_title.getText().toString());//传递值给监听接口  
           break;  
        }  
   }  
}
主类:

extends FragmentActivity implements OnClickListener,OnInputListener

@Override
	public void onInputComplete(String title) {
		 Toast.makeText(this, "title:" +title, Toast.LENGTH_SHORT).show(); 
	}
	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.tv_title:
			MyDialog dialog = new MyDialog();
			FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
			ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
			dialog.show(ft, "tag");
			break;
		}
	}

使用DialogFragment替代PopupWindow可以解决编辑框不能复制粘贴的bug。。。。。。。。。。。。。。。。。。。

附:输入法各值的含义:

InputMethodManager im=(InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); 
im.hideSoftInputFromWindow(view.getWindowToken(),0);//隐藏输入法

stateUnspecified:软键盘的状态不指定,系统将选择一个合适的状态或依赖于主题的设置

stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示

stateHidden:用户选择activity时,软键盘是被隐藏

stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的

stateVisible:软键盘通常是可见的

stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态

adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示

adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间

adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分

当输入法打乱布局时可以尝试在对应的layout XML的顶级元素上加一层ScrollView
<ScrollView xmlns:Android="http://schemas.android.com/apk/res/android " 
        Android:layout_width="fill_parent" 
        Android:layout_height="fill_parent"> 
</ScrollView>

PopupMenu使用 http://blog.csdn.net/loucyin/article/details/50813439




相关文章推荐

Android为啥推荐用DialogFragment创建Dialog?

前言:这段时候有点忙,因为再敢需求,说忙也都是在敷衍,时间挤挤还是有的,从开始写博客的那一刻起就应该一直坚持下来,不要三天打鱼两天晒网,上次写过一个Android进阶之(dialog详解一),今天继续...
  • vv_bug
  • vv_bug
  • 2016年11月02日 10:46
  • 2715

Android 必知必会 - DialogFragment 实现类似 PopupWindow 效果

如果移动端访问不佳,请访问 ==> Github 版近期有网友根据 Android 必知必会 - DialogFragment 使用总结 做一些业务,但是目标却是用 DialogFragment 实现...

简单定制Android控件(3) - 打造通用的PopupWindow(一)

国际惯例,先上地址 https://github.com/razerdp/BasePopup 通常情况下,面对各种浮动窗口,选择窗口什么的,我们通常都是使用popupWindow,但是很多时候我...
  • mkfrank
  • mkfrank
  • 2016年01月15日 11:33
  • 3554

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

android popwindow和dialog的取舍

android之中,对话窗口使用率极高,表现在提示用户或者是弹出操作栏之上。 那么,他们之前的取舍应该在哪呢? 首先对比一下他们之间的共同之处 1.都可以根据setContentView来设置...
  • gan303
  • gan303
  • 2016年02月27日 13:20
  • 2208

Android:自定义DialogFragment

DialogFragmentDialogFragment是在Android3.0的时候被引入的,从其名字可以很直观的看出它是一种基于Fragment的Dialog,可以用来创建对话框,它是用来替代Di...
  • jdsjlzx
  • jdsjlzx
  • 2016年05月29日 18:59
  • 2255

Android:自定义DialogFragment的内容和按钮

小问题,记录下~ Android4.0以后开始推荐使用DialogFragment代替Dialog。Android的官方文档中给了两个示例: 一个Basic Dialog 示例了如何自定义窗口内容...

关于PopupWindow中无法嵌套viewpager+Fragment的解决办法!

许多人在创建弹出窗口的时候都选择 用PopupWindow实现,但是如果弹出传窗口内包含Fragment的时候你会发现找不到对应的ID 错误原因大概是:因为FragmentAdapter传入的是Ac...
  • Angle0o
  • Angle0o
  • 2016年08月02日 16:51
  • 2496

【Android UI设计与开发】第09期:底部菜单栏(四)Fragment+PopupWindow仿QQ空间最新版底部菜单栏

在今天的这篇文章当中,我依然会以实战加理论结合的方式教大家如何设计出自己觉得很炫的UI界面。好的,话不多说,进入正题。今天的这篇文章主要是以仿QQ空间的底部菜单栏效果为主,实现的效果有: 实现了点击按...

PopupWindow和Fragment的使用

关键代码 package com.zklz.pop; import android.app.Activity; import android.app.FragmentManager; ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 自定义DialogFragment替代popupwindow
举报原因:
原因补充:

(最多只允许输入30个字)