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