我正在研究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代码中我们可以有一些评论它只是为了你的参考,因为我也尝试这个,但它不是在任何特定位置显示对话框。
请有人告诉我如何解决它??
答案 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;
}
谢谢, 我希望对你有所帮助。