Tôi đã tạo custom ViewGroup để hiển thị hộp thông tin neo vào một view (cửa sổ bật lên khinh khí cầu). Chế độ xem con là hộp thông tin thực tế, BalloonView là chế độ toàn màn hình để xác định vị trí tuyệt đối của trẻ và chặn liên lạc.
public BalloonView(View anchor, View child) {
super(anchor.getContext());
//calculate popup position relative to anchor and do stuff
init(...);
//receive child via constructor, or inflate/create default one
this.child = child;
//this.child = inflate(...);
//this.child = new SomeView(anchor.getContext());
addView(child);
//this way I don't need to create intermediate ViewGroup to hold my View
//but it is fullscreen (good for dialogs and absolute positioning)
//if you need relative positioning, see @iturki answer above
((ViewGroup) anchor.getRootView()).addView(this);
}
private void dismiss() {
((ViewGroup) getParent()).removeView(this);
}
Xử lý nhấp chuột bên trong con:
child.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//write your code here to handle clicks inside
}
});
Để bỏ Xem của tôi bằng cách nhấp chuột bên ngoài KHÔNG ủy cảm ứng để Xem bên dưới:
BalloonView.this.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
Để bỏ Xem của tôi bằng cách nhấp chuột bên ngoài VỚI ủy lạc để xem bên dưới:
@Override
public boolean onTouchEvent(MotionEvent event) {
dismiss();
return false; //allows underlying View to handle touch
}
Để sa thải vào nút Back ép:
//do this in constructor to be able to intercept key
setFocusableInTouchMode(true);
requestFocus();
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
dismiss();
return true;
}
return super.onKeyPreIme(keyCode, event);
}
LÀM VIỆC THÍCH MỘT CHARM! cảm ơn bạn :) Tôi đã hoài nghi nếu số lần xem hình trống sẽ được nhận dạng – CQM
Bạn có thể chỉ cần sử dụng dạng xem làm chế độ xem giả. Chúng nhẹ hơn một chút và chỉ nhìn thấy nó trong một XML là một lời nhắc nhở tốt rằng nó không được sử dụng như một phần tử trực quan – zienkikk
@RD. Vui mừng khi nghe điều đó :). Tôi đã làm các thủ thuật tương tự như vậy với RelativeLayout. nó là nhiều hơn một bố trí linh hoạt. – iTurki