显示屏幕中点击的对话框格式

时间:2015-08-18 06:09:39

标签: android android-dialogfragment

我正在研究android.I在特定位置显示对话框片段有一些小问题。 以下是有关我的代码的一些信息。

我正在使用一个Costume适配器来显示数据。在Adpater Layout我有一个图像视图,我想显示Dialog Fragment Exact左侧这个图像视图当我点击Image.So我正在做以下代码得到X和y坐标,我点击屏幕。

 holder.img_Infoimage.setOnTouchListener(new View.OnTouchListener() {


        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {


                //showDialog( holder.img_Infoimage.getX(), holder.img_Infoimage.getY());
                //int position = (int) v.getTag();
                Bundle bundle = new Bundle();
                bundle.putInt("X", (int) event.getX());
                bundle.putInt("Y", (int) event.getY());
               //bundle.putInt("X", holder.img_Infoimage.getLeft());
                //bundle.putInt("Y", holder.img_Infoimage.getTop());


                //  bundle.putInt("X", (int) holder.img_Infoimage.getLeft());
                //  bundle.putInt("Y", (int) holder.img_Infoimage.getTop());

                 Log.e(this.getClass().getName(), ":::::: position x ::::" +event.getX());
                  Log.e(this.getClass().getName(), ":::::: position Y ::::" + event.getY());

                InfoAlertDialog alertDialog = new InfoAlertDialog();
                alertDialog.setArguments(bundle);
                alertDialog.show(fragmentManager, NearByFriendsFragment.class.getName());

            }
            return true;


        }
    });

我也在使用由DialogFragment扩展的InfoAlertDialog类。

  @Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {


    getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
    WindowManager.LayoutParams wmlp = getDialog().getWindow().getAttributes();

    wmlp.gravity = Gravity.TOP | Gravity.LEFT;
   /*wmlp.x = 422;   //x position
    wmlp.y = 49;*/   //y position


    getDialog().getWindow().setBackgroundDrawableResource(android.R.color.transparent);
    getDialog().setCancelable(true);
    Bundle bundle = getArguments();
    //Log.e("", "X :::::::" + wmlp.x + " Y:::::" + wmlp.y);

    wmlp.x = bundle.getInt("X");   //x position
    wmlp.y = bundle.getInt("Y");   //y position


    /*
    WindowManager.LayoutParams wmlp = getDialog().getWindow().getAttributes();
    wmlp.width = ViewGroup.LayoutParams.WRAP_CONTENT;
    wmlp.height=ViewGroup.LayoutParams.WRAP_CONTENT;
    wmlp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE;
    wmlp.gravity = Gravity.TOP | Gravity.LEFT;
    wmlp.x = bundle.getInt("X");   //x position
    wmlp.y = bundle.getInt("Y");   //y position
    wmlp.gravity = Gravity.TOP | Gravity.RIGHT;
    wmlp.y = 500;
    */
    Log.e("", "X :::::::" + wmlp.x + " Y:::::" + wmlp.y);
    //getDialog().getWindow().setAttributes(wmlp);
    View view = inflater.inflate(R.layout.dialog_info_alert, container, false);
    return view;
}

在All Above代码中我们可以有一些评论它只是为了你的参考,因为我也尝试这个,但它不是在任何特定位置显示对话框。

请有人告诉我如何解决它??

2 个答案:

答案 0 :(得分:0)

我建议调查PopupWindow。在像你这样的情况下,它比Dialog更灵活。

答案 1 :(得分:0)

我真的很努力地解决这个问题,最后我得到了这个问题的解决方案。我和你分享这段代码。

在我的代码中进行以下更改。

适配器构造函数中的第一个传递Listview。

 int xCoordinates,yCoordinates;
ListView lv;


public NearByFriendsAdapter(Context context, List<NearByFriendsSupportClass> list, FragmentManager fragmentManager, ListView lst_NearByFriends) {
    super(context, 0,list);
    this.context = context;
    this.list = list;
    this.fragmentManager=fragmentManager;
    this.lv=lst_NearByFriends;
}

并且还选择了Two Seperate事件来获得屏幕的X和Y坐标以及显示对话框,如下所示。

 holder.img_Infoimage.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {

            int[] listViewCoords = new int[2];
            lv.getLocationOnScreen(listViewCoords);
            int x = (int) motionEvent.getRawX() - listViewCoords[0];
            int y = (int) motionEvent.getRawY() - listViewCoords[1];

            //xCoordinates=x-1500;
            yCoordinates=y-490;
            return false;
        }
    });

    holder.img_Infoimage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Bundle bundle=new Bundle();
            //bundle.putInt("X", xCoordinates);
            bundle.putInt("Y", yCoordinates);

            InfoAlertDialog alertDialog=new InfoAlertDialog();
            alertDialog.setArguments(bundle);
            alertDialog.show(fragmentManager, NearByFriendsFragment.class.getName());


        }
    });

并在AlertDialog中进行以下更改

 @Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {



    getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
    WindowManager.LayoutParams wmlp = getDialog().getWindow().getAttributes();
    getDialog().getWindow().setBackgroundDrawableResource(android.R.color.transparent);
    getDialog().setCancelable(true);

    Bundle bundle = getArguments();
    wmlp.y = bundle.getInt("Y");
    getDialog().getWindow().setAttributes(wmlp);
    View view=inflater.inflate(R.layout.dialog_info_alert,container,false);
    Log.e("", "X :::::::" + wmlp.x + " Y:::::" + wmlp.y);

    return view;
}

谢谢, 我希望对你有所帮助。