PopWindow實現顯示背景窗口變暗

popwindow的使用是非常簡單的,但是怎麼能跟dialog一樣,顯示背景自動變暗呢?

需要改變windowManager.Layoutparams.alfa 窗口透明度就好了


package com.lei.demo;

import android.graphics.drawable.BitmapDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.view.WindowManager;
import android.widget.PopupWindow;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private PopupWindow pop;
    private TextView showPopTv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        setContentView(R.layout.activity_main);
        
        showPopTv = (TextView) findViewById(R.id.show_pop_tv);
        initPop();


        showPopTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showPop();
            }
        });

    }


    void showPop(){
        changeWindowAlfa(0.7f);//改變窗口透明度
        pop.showAtLocation(showPopTv, Gravity.CENTER, 0, 0);
        pop.update();
    }

    private void initPop(){
        View content = LayoutInflater.from(this).inflate(R.layout.activity_main,null);
        content.setBackgroundResource(android.R.color.holo_blue_bright);
        TextView tv = (TextView) content.findViewById(R.id.show_pop_tv);
        tv.setText("i am a popwindow!!");
        pop = new PopupWindow(content,
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT,true);//true:popupWindow獲得焦點
        pop.setOutsideTouchable(true);//設置外部點擊可消失
        pop.setBackgroundDrawable(new BitmapDrawable());//與上面一起用才能實現點擊外部消失
        pop.setOnDismissListener(new PopupWindow.OnDismissListener() {
            @Override
            public void onDismiss() {
                changeWindowAlfa(1f);//pop消失,透明度恢復
            }
        });

    }


    /*
        更改屏幕窗口透明度
     */
    void changeWindowAlfa(float alfa){
        WindowManager.LayoutParams params = getWindow().getAttributes();
        params.alpha = alfa;
        getWindow().setAttributes(params);

    }
}


效果圖如下:




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章