Hầu hết các ví dụ ngoài đó chỉ định chính xác chiều rộng và chiều cao của cửa sổ bật lên. Tôi muốn chúng là WRAP_CONTENT - vì nội dung được xác định theo thực tế, vì vậy trong hàm dựng mà tôi đặt -2 cho cả chiều rộng và chiều cao và hiển thị nó qua showAsDropDown (Xem neo)PopupWindow ra khỏi màn hình khi kích thước không được chỉ định
Thực hiện việc này, cửa sổ bật lên luôn được vẽ bên dưới chế độ xem neo, có nghĩa là nó có thể được vẽ ngoài màn hình. Đoạn mã sau minh họa sự cố. Hãy thử nhấp vào TextView cuối cùng và bạn sẽ không thấy bất kỳ PopupWindow nào, vì nó được hiển thị bên ngoài các giới hạn cửa sổ. Tại sao nó không hoạt động? Tôi nhận xét rằng chỉ định kích thước một cách rõ ràng (ví dụ 200, 100) không kích hoạt vấn đề. Thử nó cho mình
package com.zybnet.example.popupdemo;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;
public class PopupDemoActivity extends Activity implements OnClickListener {
private PopupWindow popup;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// -2 means WRAP_CONTENT THIS TRIGGERS THE PROBLEM
popup = new PopupWindow(getPopupContent(), -2, -2);
// When you specify the dimensions everything goes fine
//popup = new PopupWindow(getPopupContent(), 200, 100);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
// FILL_PARENT and same layout weight for all children
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(-1, -1, 1);
for (int i = 0; i < 10; i++) {
TextView tv = new TextView(this);
tv.setText("Click to show popup");
tv.setOnClickListener(this);
layout.addView(tv, params);
}
setContentView(layout);
}
@Override
public void onClick(View view) {
popup.dismiss();
popup.showAsDropDown(view);
}
private View getPopupContent() {
TextView popupContent = new TextView(this);
popupContent.setText("Some text here");
popupContent.setTextColor(Color.parseColor("#5000ae"));
popupContent.setBackgroundColor(Color.parseColor("#ff00ff"));
popupContent.setPadding(10, 20, 20, 10);
return popupContent;
}
}
tôi đọc các nguồn quá, và có vẻ như nhiều hơn một điểm A lỗi ndroid, vì kích thước là chính xác, nhưng vị trí là sai. Bạn có thể tự mình kiểm tra vì tôi đã cung cấp bản trình diễn. Bây giờ tôi đang thử nghiệm với PopupWindow.showAtLocation() – Raffaele
Cũng giống như tôi nghi ngờ bạn cần thêm vào 'setWindowLayoutMode' Tôi đã chỉnh sửa câu trả lời của mình và thêm vào mã làm việc chính xác mà bạn cần. Tôi đã thử nghiệm nó trên thiết bị Android của tôi và tất cả mọi thứ! :) – Bob
Điều gì xảy ra nếu lần sau bạn gọi cửa sổ bật lên, chế độ xem nội dung thay đổi? Đó là lý do tại sao tôi cần WRAP_CONTENT – Raffaele