dialog显示位置

本博客显示自定义dialog的位置。

        程序主要由两部分组成,一部分是显示数据的recycleview一部分是dialog。recycleview显示数据这就不写了直接写点击相应的字段显示dialog。这里我定义的是点击姓名字段,弹出dialog。以屏幕中心为准,上面的recycleview点击后dialog显示在名字下方,下面的反之。

先看下效果图




看一下主Activity

public class MainActivity extends AppCompatActivity {
    RecyclerView recycle;
    RecycleAdapter recycleAdapter;
    List<Student> alllist;
    TextView desc;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recycle= (RecyclerView) findViewById(R.id.recycle);
        desc= (TextView) findViewById(R.id.desc);

        initData();

        recycle.setLayoutManager(new LinearLayoutManager(this));
        recycleAdapter=new RecycleAdapter(MainActivity.this,alllist);
        recycle.setAdapter(recycleAdapter);
        desc.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ShowDialog.getInstance().showCommentDialog(v,"某某电影是一部很好看的电影,多少大牌明星云集,精彩演技。真的是很好看,满足你对梦幻世界的所有追求和幻想",MainActivity.this);
            }
        });
    }
    public void initData(){
        alllist=new ArrayList<Student>();
        alllist.add(new Student(1,"小白","男"));
        alllist.add(new Student(2,"小红","女"));
        alllist.add(new Student(3,"小粉","女"));
        alllist.add(new Student(4,"小绿","男"));
        alllist.add(new Student(5,"小蓝","男"));
        alllist.add(new Student(6,"小赤","男"));
        alllist.add(new Student(7,"小橙","女"));
        alllist.add(new Student(8,"小紫","男"));
        alllist.add(new Student(9,"小黄","男"));
        alllist.add(new Student(10,"小黑","男"));
        alllist.add(new Student(11,"小1","男"));
        alllist.add(new Student(12,"小2","女"));
        alllist.add(new Student(13,"小3","男"));
        alllist.add(new Student(14,"小4","男"));
        alllist.add(new Student(15,"小5","男"));
    }
}
就是个显示的界面有一个点击的按钮没什么可说的。

主要讲下showDialog

public class ShowDialog {
    WindowManager mWindowManager;
    TextView top,bottom;

    private static ShowDialog INSTACE;
    public synchronized static ShowDialog getInstance() {
        if(null==INSTACE){
            INSTACE=new ShowDialog();
        }
        return INSTACE;
    }

    public void showCommentDialog(View view, String text, Context context) {
        Dialog dialog=new Dialog(context, R.style.dialog_translucent);
        //获得屏幕的宽和高
        mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        int screenWidth = mWindowManager.getDefaultDisplay().getWidth();
        int screenHeight= mWindowManager.getDefaultDisplay().getHeight();
        //获得传进来view的位置
        int[] location= new int[2];
        view.getLocationOnScreen(location);
        int dyBottom= screenHeight - location[1] - view.getHeight();
        //判断是在view顶部还是底部显示
        boolean onTop= (location[1] > dyBottom) ? true : false;
        View viewtop = View.inflate(context, R.layout.popup, null);
        top= (TextView) viewtop.findViewById(R.id.top);
        top.setText(text);
        bottom= (TextView) viewtop.findViewById(R.id.bottom);
        bottom.setText(text);
        //设置要显示的x,y坐标
        Window mwindow=dialog.getWindow();
        WindowManager.LayoutParams lp=mwindow.getAttributes();
        lp.x=-(screenWidth/2)+location[0];
        if(onTop){
            top.setVisibility(View.VISIBLE);
            bottom.setVisibility(View.GONE);
            //顶部显示就应该在view的y值上减去view的高
            lp.y=-(screenHeight/2)+location[1]-view.getHeight();
        }else{
            top.setVisibility(View.GONE);
            bottom.setVisibility(View.VISIBLE);
            //底部显示就应该在view的y值上加上view的高
            lp.y=-(screenHeight/2)+location[1]+view.getHeight();
        }
        dialog.setContentView(viewtop);
        //将计算好的位置set进去
        mwindow.setAttributes(lp);
        dialog.show();
    }
}
RecycleAdapter

public class RecycleAdapter extends RecyclerView.Adapter<StudentViewHolder>{
    Context context;
    List<Student> list;

    public RecycleAdapter(Context context, List<Student> list) {
        this.list=list;
        this.context=context;
    }
    @Override
    public StudentViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.recycle_item, parent, false);
        return new StudentViewHolder(view,context);
    }

    @Override
    public void onBindViewHolder(StudentViewHolder holder, final int position) {
        holder.id.setText(list.get(position).getId()+"");
        holder.name.setText(list.get(position).getName());
        holder.sex.setText(list.get(position).getSex());
    }

    @Override
    public int getItemCount() {
        return list.size();
    }
}

Student

public class Student {
    int id;
    String name;
    String sex;
    public Student(int id, String name, String sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

StudentViewHolder

public class StudentViewHolder extends RecyclerView.ViewHolder{
    public TextView id,name,sex;

    Context context;
    private View.OnClickListener myclicklistener=new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ShowDialog.getInstance().showCommentDialog(v,name.getText().toString(),context);
        }
    };
    public StudentViewHolder(View itemView,Context context) {
        super(itemView);
        this.context=context;
        id= (TextView) itemView.findViewById(R.id.id);
        name= (TextView) itemView.findViewById(R.id.name);
        sex= (TextView) itemView.findViewById(R.id.sex);
        name.setOnClickListener(myclicklistener);
    }

}

有什么意见欢迎评论。

程序连接地址

https://github.com/Maliola/FirstGitProject

要实现Dialog全屏显示,可以通过设置Dialog的Window属性来实现。首先,需要设置Dialog的主题为全屏样式,可以通过设置Dialog的主题来实现。其次,需要通过设置Window的参数来控制Dialog对应的Window的宽度、高度和显示位置等。最后,还需要给Dialog弹出的View设置背景。以下是一个简单的方法来实现Dialog全屏显示: 1. 设置Dialog的主题为全屏样式。可以在Dialog的构造函数中设置主题为全屏样式。 2. 设置Window的参数。可以通过获取Dialog的Window对象,然后设置Window的LayoutParams来控制Dialog对应的Window的宽度、高度和显示位置等。可以使用以下代码: ```java DisplayMetrics dm = mContext.getResources().getDisplayMetrics(); int maxWidth = dm.widthPixels; int maxHeight = dm.heightPixels; AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mContext); AlertDialog alertDialog = alertDialogBuilder.create(); alertDialog.getWindow().getDecorView().setPadding(0, 0, 0, 0); alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0xff000000)); alertDialog.getWindow().setLayout(maxWidth, maxHeight); ``` 3. 设置Dialog弹出的View的背景。在设置Dialog的View之前,需要给Dialog弹出的View设置一个背景,可以通过设置View的背景来实现。确保Dialog弹出的View有背景。 以上步骤可以实现Dialog的全屏显示效果。通过设置Dialog的主题、Window的参数和View的背景,可以控制Dialog对应的Window的宽度、高度和显示位置,从而实现Dialog全屏显示的效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [如何设置Dialog铺满全屏,更改Dialog显示位置!!!](https://blog.csdn.net/u011043551/article/details/69062925)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [android Dialog全屏显示](https://blog.csdn.net/jx315425246/article/details/125611497)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值