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控件(3) - 打造通用的PopupWindow(一)

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

替换PopUpWindow(解决焦点获取问题)实现顶部筛选菜单(顶部不变,底部阴暗)

很多人写顶部筛选菜单或弹窗都会用到PopUpWindow,但是PopUpWindow也不是万能的,现在商业App的一些界面功能实现使用PopUpWindow无法达到需要的效果(焦点问题,顶部明亮,底部...
  • jamesshaoya
  • jamesshaoya
  • 2015年09月10日 13:35
  • 852

PopupWindow和Fragment的使用

关键代码 package com.zklz.pop; import android.app.Activity; import android.app.FragmentManager; ...
  • luzhiquanandroid
  • luzhiquanandroid
  • 2016年06月15日 00:21
  • 2731

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

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

底部菜单栏之Fragment+PopupWindow实现

转自:http://blog.csdn.net/yangyu20121224/article/details/9023451  在今天的这篇文章当中,我依然会以实战加理论结合的方式教大家如何设计...
  • zhouboyu
  • zhouboyu
  • 2016年05月08日 03:06
  • 2575

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

如果移动端访问不佳,请访问 ==> Github 版近期有网友根据 Android 必知必会 - DialogFragment 使用总结 做一些业务,但是目标却是用 DialogFragment 实现...
  • ys743276112
  • ys743276112
  • 2017年06月01日 18:19
  • 2965

Android之UI--打造万能自定义Dialog

这里写链接内容>转载请标明出处: http://blog.csdn.net/android_it/article/details/51161038 本文出自:【冯帅的CSDN博客】在我们开发ap...
  • android_it
  • android_it
  • 2016年04月15日 13:38
  • 13803

Android万能的等待框(Dialog)超级好用

由于公司有开了新项目,由于公司之前没啥框架,所以只能自己搭框架了 dialog等待框,弹出选择框都是很常用的,所以感觉有找一个比较好的框架。 借鉴了很多大牛的代码,又亲自运行一下,感觉这个还不错。...
  • songyan_love
  • songyan_love
  • 2017年07月13日 15:39
  • 1076

打造自己的dialog

主要是记录一下如何打造自己的dialog。自定义,高扩展。
  • maqianli23
  • maqianli23
  • 2017年05月06日 12:29
  • 127

Android--万能自定义弹窗

Android--万能自定义弹窗。使用的是AlertDialog自定义弹窗呢,就是一个界面放在了AlertDialog容器弹框上。...
  • Mr_ChenXu
  • Mr_ChenXu
  • 2017年12月25日 16:57
  • 56
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 自定义DialogFragment替代popupwindow
举报原因:
原因补充:

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