对样式设置完了之后,,在获得windows的窗口位置对窗口位置进行设置.比如说可以放在上面.下面.默认是在中间.也可以自定义按钮进行显示隐藏.
Window window = getWindow(); window.setGravity(Gravity.BOTTOM);//放在最底下 window.setGravity(Gravity.CENTER);//居中 window.setGravity(Gravity.TOP);//置顶 window.setGravity(Gravity.LEFT);//左边 window.setGravity(Gravity.RIGHT);//右边我这里采用的是最底下.并且用ViewPager的adapter里面进行RecyclerView的嵌套.先上布局
<android.support.v4.view.ViewPager android:id="@+id/vp" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" > </android.support.v4.view.ViewPager> <LinearLayout android:layout_width="match_parent" android:layout_height="30dp" android:background="@drawable/shape_dialog_item" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:background="@drawable/shape_dialog_item" android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="match_parent" android:paddingLeft="20dp" android:paddingRight="20dp" android:gravity="center" android:text="表情" android:textColor="#9c9c9c" android:textSize="14sp"/> <TextView android:background="@drawable/shape_dialog_item" android:id="@+id/tv1" android:layout_width="wrap_content" android:layout_height="match_parent" android:paddingLeft="20dp" android:paddingRight="20dp" android:gravity="center" android:text="emoji" android:textColor="#9c9c9c" android:textSize="14sp"/> </LinearLayout>这里面的Onshow,和OnDismiss我找了很久,我一直以为一个监听就够了,但是发现还有一个监听.然后使用了接口回调,进行回传,我这里做了一个表情的dialog
public class CustomDialog extends Dialog implements View.OnClickListener, CustomDialogAdapter.CustomDialogImageClickListener, DialogInterface.OnShowListener, DialogInterface.OnDismissListener { private int[] mImage; private ListView lv_location_dialog; private RecyclerView mRecyclerView; private int[] mImageIds; private ViewPager mVp; private TextView mTv; private TextView mEmoji; public CustomDialog(Context context, int[] ints, int[] array) { super(context, R.style.style_location_dialog); this.mImageIds = ints; this.mImage = array; Window window = getWindow(); window.setGravity(Gravity.BOTTOM); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.view_custom_dialog); mVp = (ViewPager) findViewById(R.id.vp); mTv = (TextView) findViewById(R.id.tv); mEmoji = (TextView) findViewById(R.id.tv1); mTv.setOnClickListener(this); mEmoji.setOnClickListener(this); initlist(); getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); } private void initlist() { CustomDialogAdapter customDialogAdapter = new CustomDialogAdapter(mImageIds, mImage); mVp.setAdapter(customDialogAdapter); customDialogAdapter.setCustomDialogImageClickListener(this); this.setOnShowListener(this);//是否显示的监听 this.setOnDismissListener(this);//是否隐藏的监听 } private OnItemClickListener mOnItemClickListener; public void setOnItemClickListener(OnItemClickListener onItemClickListener){ this.mOnItemClickListener = onItemClickListener; } public interface OnItemClickListener{ void ItemClick(int type,int position); } @Override public void OnItemClick(int type,int position) { if (mOnItemClickListener!=null) { mOnItemClickListener.ItemClick(type,position); } } //显示的监听 @Override public void onShow(DialogInterface dialog) { if (mOnShowItemListener != null) { mOnShowItemListener.ItemshowListener(true); } } //隐藏的监听 @Override public void onDismiss(DialogInterface dialog) { if (mOnShowItemListener != null) { mOnShowItemListener.ItemshowListener(false); } } //接口回调 private OnShowItemListener mOnShowItemListener; public void setOnShowItemListener(OnShowItemListener onItemClickListener){ this.mOnShowItemListener = onItemClickListener; } public interface OnShowItemListener{ void ItemshowListener(boolean isshow); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.tv: mVp.setCurrentItem(0);//对viewpager进行切换 break; case R.id.tv1: mVp.setCurrentItem(1);//对viewpager进行切换 break; } } }我这里写了一个viewpager的adataper.跟大众的差不多.先上一个布局.这是我adapter的布局.主要是一个RecyclerView
<android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView>然后adapter里面进行逻辑的处理我这里主要是做了两组的表情的处理,而且是传了两组表情的id进来.只要使用,就会出现.
public class CustomDialogAdapter extends PagerAdapter { private int[] imageIds; private int[] image; private RecyclerView mRecyclerView; public CustomDialogAdapter(int[] imageIds, int[] image) { this.imageIds = imageIds; this.image = image; } @Override public int getCount() { return 2; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, final int position) { View view = View.inflate(container.getContext(),R.layout.view_viewpager_adapter_item,null); mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); mRecyclerView.setLayoutManager(new GridLayoutManager(container.getContext(), 7, GridLayoutManager.VERTICAL, false)); switch (position) { case 0: ImageItemAdapter imageItemAdapter = new ImageItemAdapter(imageIds); mRecyclerView.setAdapter(imageItemAdapter); imageItemAdapter.setImageOnClickListener(new ImageItemAdapter.ImageOnClickListener() { @Override public void ItemClick(int pos) { if (mCustomDialogImageClickListener != null) { mCustomDialogImageClickListener.OnItemClick(position,pos); } } }); break; case 1: ImageItemAdapter2 imageItemAdapter1 = new ImageItemAdapter2(container.getContext(),image); mRecyclerView.setAdapter(imageItemAdapter1); imageItemAdapter1.setImageOnClickListener(new ImageItemAdapter2.ImageOnClickListener() { @Override public void ItemClick(int pos) { if (mCustomDialogImageClickListener != null) { mCustomDialogImageClickListener.OnItemClick(position,pos); } } }); break; } container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } public void setCustomDialogImageClickListener(CustomDialogImageClickListener customDialogImageClickListener){ this.mCustomDialogImageClickListener = customDialogImageClickListener; } private CustomDialogImageClickListener mCustomDialogImageClickListener; public interface CustomDialogImageClickListener{ void OnItemClick(int type,int position); } }主要是使用了接口回调进行数据的回传.我开始想着用接口代理的模式进行接口回传.后来我发现,这种有点模糊概念.直接用接口可能会让我的条理更清晰一点.所以我还是采用了接口回调.
public class ImageItemAdapter extends RecyclerView.Adapter<ImageItemAdapter.ImageViewHolder> { private int[] ImageIds; public ImageItemAdapter(int[] imageIds) { this.ImageIds = imageIds; } @Override public ImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(parent.getContext(), R.layout.view_adapter_customdialog, null); return new ImageViewHolder(view); } @Override public void onBindViewHolder(ImageViewHolder holder, final int position) { LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); layoutParams.gravity = Gravity.CENTER; holder.mImageView.setLayoutParams(layoutParams); holder.mImageView.setImageResource(ImageIds[position]); holder.mImageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mImageOnClickListener != null) { mImageOnClickListener.ItemClick(position); } } }); } @Override public int getItemCount() { return ImageIds.length; } public void setImageOnClickListener(ImageOnClickListener imageOnClickListener){ this.mImageOnClickListener = imageOnClickListener; } private ImageOnClickListener mImageOnClickListener; interface ImageOnClickListener{ void ItemClick(int position); } class ImageViewHolder extends RecyclerView.ViewHolder{ private ImageView mImageView; public ImageViewHolder(View itemView) { super(itemView); mImageView = (ImageView) itemView.findViewById(R.id.iv); } } }主要是通过接口回调,进行一个数据的传递.然后我会利用显示和隐藏的方法进行监听是否显示和隐藏.然后用接口回调的形式对Padding进行改变.从而对布局能够顶上来.我用了.dip转像素的工具类进行操作.
mCustomDialog = new CustomDialog(this, array, array1); mCustomDialog.setOnShowItemListener(new CustomDialog.OnShowItemListener() { @Override public void ItemshowListener(boolean isshow) { if (isshow){ mLlIcon.setPadding(0,DensityUtil.dip2px(xxxActivity.this,10),0,DensityUtil.dip2px(xxxActivity.this,250)); }else { mLlIcon.setPadding(0,DensityUtil.dip2px(xxxActivity.this,10),0,DensityUtil.dip2px(xxxActivity.this,10)); } } });可以进行显示.弹出