1. 程式人生 > >dialog顯示位置

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);
}

}

有什麼意見歡迎評論。

程式連線地址