dialog显示位置

来源:互联网 发布:软件开发技术方案 编辑:程序博客网 时间:2024/06/05 11:20

本博客显示自定义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

0 0
原创粉丝点击