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中,这样动画才能执行。

 

 

posted @ 2013-06-05 16:38  有情怀的人  阅读(924)  评论(0编辑  收藏  举报