zoukankan      html  css  js  c++  java
  • PopupWindow

    1.Constructors

      PopupWindow(View contentView, int width, int height, boolean focusable)

      参数:

          contentView:要添加到pop中的view。

          width:pop的宽度。

          height:pop的高度。

          focusable:指定pop是否能获得焦点。true能获得焦点,false不能获得焦点。默认为false。

      PopupWindow(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)

      参数:

          context:上下文。

          attrs:view的属性集合。

          defStyleAttr:属性的id。

          defStyleRes:属性的id。

      这个构造方法多用于自定义view中,关于后三个参数的理解,属性值获取的优先级从高到低依次是set, defStyleAttr, defStyleRes. defStyleAttr是一个     reference, 它指向当前Theme中的一个style, style其实就是各种属性的集合,如果defStyleAttr为0或者在Theme中没有找到相应的style, 则才会尝试从        defStyleRes获取属性值,defStyleRes表示的是一个style的id, 当它为0时也无效。

    2.Methods

      setInputMethodMode(int mode):设置软键盘的输入模式。在不能获得焦点的情况下,软键盘不会弹出。

          INPUT_METHOD_FROM_FOCUSABLE:根据构造方法中的focusable来确定。

          INPUT_METHOD_NEEDED:需要的时候会弹出。

          INPUT_METHOD_NOT_NEEDED:总也不弹出软键盘。

      setBackgroundDrawable(Drawable background):设置背景色。很奇葩的东西,不设置其他方法都不触发。

          background:getResources().getDrawable(android.R.color.transparent)透明背景色。

      setClippingEnabled(boolean enabled):设置是否显示全部pop,还是分割。

      setIgnoreCheekPress():不知道干什么的?

      setOnDismissListener(PopupWindow.OnDismissListener onDismissListener):监听pop消失了。

      setSoftInputMode(int mode):设置软键盘的启动模式,隐藏或是显示。

      setTouchInterceptor(View.OnTouchListener l):点击pop中的控件的监听,需要设置pop的背景色。

      showAsDropDown(View anchor, int xoff, int yoff):显示在anchor的左下角(0,0)。

      showAtLocation(View parent, int gravity, int x, int y):在parent中的指定位置显示。对齐方式和坐标。

      update():当pop设置有改变时,需要调用他,来更新数据。

    3.Demo:在pop中放置了一个button,点击可以再次出现一个pop,但在显示的时候showAsDropDown第一个参数,需要是布局中的view,而不是pop中的view。

    package com.example.androidtest;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.LinearLayout.LayoutParams;
    import android.widget.PopupWindow;
    import android.widget.PopupWindow.OnDismissListener;
    
    public class MainActivity extends Activity {
        private PopupWindow mpop, mpop0;
        private View view[];
        private boolean isFlag = true;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            view = new View[3];
            initPop();
            initView();
        }
    
        private void initView() {
            view[0] = findViewById(R.id.view0);
            view[0].setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    if (isFlag) {
                        mpop.showAsDropDown(view[0], view[0].getWidth(),
                                -view[0].getHeight());
                        isFlag = false;
                    } else {
                        mpop.dismiss();
                        isFlag = true;
                    }
    
                }
            });
    
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
        private void initPop() {
            view[1] = LayoutInflater.from(this).inflate(R.layout.poplayout, null);
            view[2] = view[1].findViewById(R.id.view3);
            view[2].setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    System.out.println(v.getId());
                    mpop0 = new PopupWindow(LayoutInflater.from(MainActivity.this)
                            .inflate(R.layout.poplayout, null),
                            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
                            true);
                    mpop0.setBackgroundDrawable(getResources().getDrawable(
                            android.R.color.transparent));
                    mpop0.showAsDropDown(view[0], 0, 0);
                }
            });
            mpop = new PopupWindow(view[1], LayoutParams.WRAP_CONTENT,
                    LayoutParams.WRAP_CONTENT, true);
            mpop.setBackgroundDrawable(getResources().getDrawable(
                    android.R.color.transparent));
            mpop.setOnDismissListener(new OnDismissListener() {
    
                @Override
                public void onDismiss() {
                    // TODO Auto-generated method stub
                    isFlag = true;
                }
            });
        }
    }

     4.为pop添加动画效果:

      动画:

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <scale
            android:duration="1000"
            android:fillAfter="false"
            android:fromXScale="0.0"
            android:fromYScale="0.0"
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:pivotX="50%"
            android:pivotY="50%"
            android:toXScale="1.0"
            android:toYScale="1.0" />
    
    </set>

      添加style:

    <style name="pop_ainamation">
            <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
            <item name="android:windowExitAnimation">@android:anim/fade_out</item>
    </style>

      添加动画:

    mpop.setAnimationStyle(R.style.pop_ainamation);

    动画一定要放在style中,这样动画才能执行。

  • 相关阅读:
    [Contest on 2020.4.2] 影帝杯狂欢赛
    [BZOJ 3821] 玄学
    CodeForces 432D Prefixes and Suffixes
    CodeForces 17E Palisection
    CodeForces 665E Beautiful Subarrays
    BZOJ 2989 数列
    changeeksdja
    Jmeter学习——1
    LoadRunner监控Linux与Windows方法(经典)
    LR检查点小结
  • 原文地址:https://www.cnblogs.com/qinghuaideren/p/3119201.html
Copyright © 2011-2022 走看看