dialog顯示位置
阿新 • • 發佈:2019-02-04
本部落格顯示自定義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); } }
有什麼意見歡迎評論。
程式連線地址