popupwindow 订阅
PopupWindow 展开全文
PopupWindow
信息
操作系统
未知
开发语言
开源协议
未知
PopupWindow
Takes a link and will create a popupwindow based on the href of the link. You can over ride the default setting by passing your own settings using the REL attribute of the link. You can have different setting for each link if you'd like. New version now supports using profiles!
收起全文
精华内容
参与话题
问答
  • popupwindow

    2016-12-30 16:57:36
    PopupWindow

    Android的对话框有两种:PopupWindow和AlertDialog。它们的不同点在于:

    • AlertDialog的位置固定,而PopupWindow的位置可以随意
    • AlertDialog是非阻塞线程的,而PopupWindow是阻塞线程的
    • PopupWindow的位置按照有无偏移分,可以分为偏移和无偏移两种;按照参照物的不同,可以分为相对于某个控件(Anchor锚)和相对于父控件。
    • 最关键的区别是AlertDialog不能指定显示位置,只能默认显示在屏幕最中间(当然也可以通过设置WindowManager参数来改变位置)。而PopupWindow是可以指定显示位置的,随便哪个位置都可以,更加灵活。

    构造方法:

    //方法一:  
    public PopupWindow (Context context)  
    //方法二:  
    public PopupWindow(View contentView)  
    //方法三:  
    public PopupWindow(View contentView, int width, int height)  
    //方法四:  
    public PopupWindow(View contentView, int width, int height, boolean focusable)

    contentView为要显示的view,width和height为宽和高,值为像素值,也可以是MATCHT_PARENT和WRAP_CONTENT。

    显示函数:

    //相对某个控件的位置(正左下方),无偏移  
    showAsDropDown(View anchor):  
    //相对某个控件的位置,有偏移;xoff表示x轴的偏移,正值表示向左,负值表示向右;yoff表示相对y轴的偏移,正值是向下,负值是向上;  
    showAsDropDown(View anchor, int xoff, int yoff):  
    //相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移  
    showAtLocation(View parent, int gravity, int x, int y):

    其它函数:

    public void dismiss()  
    public void setFocusable(boolean focusable)  //PopupWindow是否具有获取焦点的能力,默认为False。
    //一般来讲是没有用的,因为普通的控件是不需要获取焦点的,
    //而对于EditText则不同,如果不能获取焦点,那么EditText将是无法编辑的。
    public void setTouchable(boolean touchable) //设置PopupWindow是否响应touch事件,默认是true 
    public void setOutsideTouchable(boolean touchable)  //PopupWindow以外的区域是否可点击,
    //即如果点击PopupWindow以外的区域,PopupWindow是否会消失。
    public void setBackgroundDrawable(Drawable background)//加上它之后,setOutsideTouchable()才会生效

    要让点击PopupWindow之外的地方PopupWindow消失你需要调用:

    setBackgroundDrawable(new BitmapDrawable());

    设置背景,为了不影响样式,这个背景是空的。还可以这样写,觉得这样要保险些:

    setBackgroundDrawable(new ColorDrawable(0x00000000));

    背景不为空但是完全透明。如此设置还能让PopupWindow在点击back的时候消失。

    生成一个PopupWindow最基本的三个条件是一定要设置的:View contentView,int width, int height ;少任意一个就不可能弹出来PopupWindow。
    所以,如果使用方法一来构造PopupWindow,那完整的构造代码应该是这样的:

    View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.popuplayout, null);  
    PopupWindwo popWnd = PopupWindow (context);  
    popWnd.setContentView(contentView);  
    popWnd.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);  
    popWnd.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);

    强制设置contentView的原因是因为PopupWindow没有默认布局,它不会像AlertDialog那样只setTitle,就能弹出来一个框。PopupWindow是没有默认布局的,它的布局只有通过我们自己设置才行。由于方法三中,含有了这三个必备条件,不用单独设置contentview或者width、height,所以构造方法三是用的最多的一个构造方法。

    有两种方法设置PopupWindow的大小:

    调用有宽高参数的构造函数:

    LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View contentview = inflater.inflate(R.layout.popup_process, null);
    PopupWindow popupWindow = new PopupWindow(contentview,LayoutParams.WRAP_CONTENT,
    LayoutParams.WRAP_CONTENT);

    通过setWidth和setHeight设置

    PopupWindow popupWindow = new PopupWindow(contentview);
    popupWindow.setWidth(LayoutParams.WRAP_CONTENT);           
    popupWindow.setHeight(LayoutParams.WRAP_CONTENT);

    两种办法是等效的,不管采用何种办法,必须设置宽和高,否则不显示任何东西.

    这里的WRAP_CONTENT可以换成fill_parent 也可以是具体的数值,它是指PopupWindow的大小,也就是contentview的大小,注意popupwindow根据这个大小显示你的View,如果你的View本身是从xml得到的,那么xml的第一层view的大小属性将被忽略。相当于popupWindow的width和height属性直接和第一层View相对应。

    设想下面一种场景:

    popupWindow 设置为WRAP_CONTENT ,我想得到的是一个宽150dip 高80dip的popupwindow,需要额外加一层

    LinearLayout ,这个LinearLayout 的layout_width和layout_height为任意值。而我们真正想显示的View 放在第二层,并且 android:layout_width=”150.0dip” android:layout_height=”80.0dip”

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
    >
        <LinearLayout
            android:background="@drawable/shape_ret_loading_bg"
            android:layout_width="150.0dip"
            android:layout_height="80.0dip"
            android:orientation="vertical"
            android:gravity="center"
        >
            <TextView
                android:textSize="14dip"
                android:textColor="@color/white"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10.0dip"
                android:text="加载中..."
            />
        </LinearLayout>
    </LinearLayout>

    添加进出场动画:

    进入时的动画:(context_menu_enter.xml)

    <?xml version="1.0" encoding="utf-8"?>  
    <set xmlns:android="http://schemas.android.com/apk/res/android">  
    
        <translate  
            android:duration="@android:integer/config_shortAnimTime"  
            android:fromXDelta="0"  
            android:fromYDelta="100%p"  
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"  
            android:toXDelta="0"  
            android:toYDelta="0"/>  
    
    </set>

    退出时动画(context_menu_exit.xml)

    <?xml version="1.0" encoding="utf-8"?>  
    <set xmlns:android="http://schemas.android.com/apk/res/android" >  
    
        <translate  
            android:duration="@android:integer/config_shortAnimTime"  
            android:fromXDelta="0"  
            android:fromYDelta="0"  
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"  
            android:toXDelta="0"  
            android:toYDelta="100%p" />  
    
    </set>

    生成对应的style—contextMenuAnim

    <style name="contextMenuAnim" parent="@android:style/Animation.Activity">  
        <item name="android:windowEnterAnimation">@anim/context_menu_enter</item>  
        <item name="android:windowExitAnimation">@anim/context_menu_exit</item>  
    </style>

    android:windowEnterAnimation设置进场动画,android:windowExitAnimation设置出场动画。

    使用AnimationStyle

    mPopWindow.setAnimationStyle(R.style.contextMenuAnim);

    popup window点击窗口外区域不消失的解决方法

    方法:

    popupWindow.setTouchable(true);  
    popupWindow.setFocusable(true);  
    popupWindow.setBackgroundDrawable(new BitmapDrawable());  
    popupWindow.setOutsideTouchable(true);  

    不行还可以加上:

    popupWindow.setTouchInterceptor(new OnTouchListener() {  
        public boolean onTouch(View v, MotionEvent event) {  
            if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {  
                popupWindow.dismiss();  
                return true;  
            }  
            return false;  
        }  
    });  

    PopUpWindow使用详解(一)——基本使用

    PopUpWindow使用详解(二)——进阶及答疑

    Android PopupWindow详解

    Android中的PopupWindow详解

    展开全文
  • PopupWindow

    2015-11-24 20:14:00
    PopupWindow
    PopupWindow
    
    展开全文
  • Popupwindow

    2019-06-09 22:22:05
    Popupwindow’ 新建Popupwindow PopupWindow popupWindow = new PopupWindow(this); 括号内传入上下文对象 设置宽高 popupWindow.setWidth(500); popupWindow.setHeight(80); final WindowManager.LayoutParams ...

    Popupwindow

    新建Popupwindow
    PopupWindow popupWindow = new PopupWindow(this);
    括号内传入上下文对象

    设置宽高
    popupWindow.setWidth(500);
    popupWindow.setHeight(80);
    在这里插入图片描述
    final WindowManager.LayoutParams attributes = getWindow().getAttributes();

        获取窗体
            attributes.alpha = 0.5f;   取值范围是0-1
        设置透明度
    

    在Popupwindow 消失以后 透明度恢复为1 全部不透明

    popupWindow.dismiss();
    设置popupWindow消失

    popupWindow.showAsDropDown(imageView);设置popupWindow出现位置

    自定义窗体步骤
    (1)构造方法:public PopupWindow (Context context):context上下文对象
    (2)必须设置的3大要素:
    setContentView():设置自定义布局
    setWidth():设置宽度
    setHeight():设置高度
    (3)显示窗体:
    a。显示在某个指定控件的下方
    showAsDropDown(View anchor):
    showAsDropDown(View anchor, int xoff, int yoff);//xoff和yoff都是偏移量
    b。指定父视图,显示在父控件的某个位置(Gravity.TOP,Gravity.RIGHT等)
    showAtLocation(View parent, int gravity, int x, int y);

    展开全文
  • PopupWinDow

    2019-03-25 08:16:25
    View cview = getLayoutInflater().inflate(R.layout.item_ck, null); popupWindow = new PopupWindow(cview, 200, 200, true); popupWindow.setFocusable(true); popupWindow.setB...
            View cview = getLayoutInflater().inflate(R.layout.item_ck, null);
            popupWindow = new PopupWindow(cview, 200, 200, true);
            popupWindow.setFocusable(true);
            popupWindow.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
            popupWindow.setOutsideTouchable(true);
            popupWindow.showAsDropDown(imageView, 9, -10);
            cview.findViewById(R.id.tz).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v){
                    recyclerView.setLayoutManager(new GridLayoutManager(MainActivity.this,2));
                    myAdapter = new MyAdapter(MainActivity.this, list);
                    recyclerView.setAdapter(myAdapter);
                    myAdapter.notifyDataSetChanged();
                }
            });
            cview.findViewById(R.id.sy).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
                    myAdapter = new MyAdapter(MainActivity.this, list);
                    recyclerView.setAdapter(myAdapter);
                    myAdapter.notifyDataSetChanged();
                }
            });
        }
    
    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="120dp"
        android:layout_height="150dp"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:orientation="vertical"
        app:cardElevation="10dp"
        app:cardUseCompatPadding="true"
        app:cardCornerRadius="10dp"
    
        android:padding="20dp">
      <LinearLayout
          android:orientation="vertical"
          android:gravity="center"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content">
      <TextView
          android:id="@+id/tz"
          android:text="热门影院"
          android:paddingTop="10dp"
          android:textSize="16dp"
          android:background="@color/colorAccent"
          android:layout_width="80dp"
          android:layout_height="wrap_content"/>
    
      <TextView
          android:paddingTop="10dp"
          android:textSize="16dp"
          android:id="@+id/sy"
          android:text="正在上映"
          android:background="#0ff"
          android:layout_width="80dp"
          android:layout_height="wrap_content" />
      </LinearLayout>
    </android.support.v7.widget.CardView>
    
    展开全文
  • popupWindow

    2018-12-04 10:22:20
    popview = View.inflate(this, R.layout.film_item_pratticulars_pratticulars, null...popupWindow = new PopupWindow(popview, WindowManager.LayoutParams.MATCH_PARENT, height /100*80); popupWindow .setOuts...

空空如也

1 2 3 4 5 ... 20
收藏数 9,327
精华内容 3,730
关键字:

popupwindow