我的弹出窗口有问题。我想用自己的布局创建弹出窗口。 这是代码:
public class PopupWindowView extends PopupWindow{
PopupWindow popup;
boolean click = true;
LayoutParams params;
RelativeLayout mainLayout;
TextView tv;
LinearLayout layout;
ImageView chooseFlag;
public void createPopupWindow(Activity act){
popup = new PopupWindow(act);
chooseFlag = (ImageView) act.findViewById(R.id.login_choose_flag);
mainLayout = (RelativeLayout) act.findViewById(R.id.login_layout);
tv = new TextView(act);
layout = new LinearLayout(act);
//layout = (LinearLayout) findViewById(R.id.popuplayout);
chooseFlag.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (click) {
int[] values = new int[2];
v.getLocationOnScreen(values);
popup.showAtLocation(mainLayout, Gravity.NO_GRAVITY, 10, 10);
popup.update(values[0], values[1], 300, 80);
click = false;
} else {
popup.dismiss();
click = true;
}
}
});
params = new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
layout.setOrientation(LinearLayout.VERTICAL);
tv.setText("Hi this is a sample text for popup window");
layout.addView(tv, params);
popup.setContentView(layout);
}
}
这是我想在弹出窗口中设置的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:id="@+id/popuplayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/patient_button_bg">
</LinearLayout>
</LinearLayout>
在我的课堂上,我不能使用findbyid
方法,因为这不是活动。我如何在班上的弹出窗口中设置自己的布局?
编辑: 这是堆栈跟踪,我得到错误:
03-01 09:48:48.761: E/AndroidRuntime(16776): FATAL EXCEPTION: main
03-01 09:48:48.761: E/AndroidRuntime(16776): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
03-01 09:48:48.761: E/AndroidRuntime(16776): at android.view.ViewGroup.addViewInner(ViewGroup.java:3337)
03-01 09:48:48.761: E/AndroidRuntime(16776): at android.view.ViewGroup.addView(ViewGroup.java:3208)
03-01 09:48:48.761: E/AndroidRuntime(16776): at android.view.ViewGroup.addView(ViewGroup.java:3188)
03-01 09:48:48.761: E/AndroidRuntime(16776): at android.widget.PopupWindow.preparePopup(PopupWindow.java:969)
03-01 09:48:48.761: E/AndroidRuntime(16776): at android.widget.PopupWindow.showAtLocation(PopupWindow.java:840)
03-01 09:48:48.761: E/AndroidRuntime(16776): at android.widget.PopupWindow.showAtLocation(PopupWindow.java:813)
03-01 09:48:48.761: E/AndroidRuntime(16776): at pl.asseco.amms.mobile.tools.PopupWindowView$1.onClick(PopupWindowView.java:44)
03-01 09:48:48.761: E/AndroidRuntime(16776): at android.view.View.performClick(View.java:3558)
03-01 09:48:48.761: E/AndroidRuntime(16776): at android.view.View$PerformClick.run(View.java:14152)
03-01 09:48:48.761: E/AndroidRuntime(16776): at android.os.Handler.handleCallback(Handler.java:605)
03-01 09:48:48.761: E/AndroidRuntime(16776): at android.os.Handler.dispatchMessage(Handler.java:92)
03-01 09:48:48.761: E/AndroidRuntime(16776): at android.os.Looper.loop(Looper.java:137)
03-01 09:48:48.761: E/AndroidRuntime(16776): at android.app.ActivityThread.main(ActivityThread.java:4514)
03-01 09:48:48.761: E/AndroidRuntime(16776): at java.lang.reflect.Method.invokeNative(Native Method)
03-01 09:48:48.761: E/AndroidRuntime(16776): at java.lang.reflect.Method.invoke(Method.java:511)
03-01 09:48:48.761: E/AndroidRuntime(16776): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
03-01 09:48:48.761: E/AndroidRuntime(16776): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
03-01 09:48:48.761: E/AndroidRuntime(16776): at dalvik.system.NativeStart.main(Native Method)
编辑 使用弹出窗口的活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
getActionBar().hide();
mainMenuGenerator = new MainMenuGenerator();
mainMenuGenerator.generateMainMenu(this);
mainMenuGenerator.hideIcons();
popup = new PopupWindowView();
popup.createPopupWindow(this);
}
答案 0 :(得分:24)
试试这段代码:
private void showSortPopup(final Activity context, Point p)
{
// Inflate the popup_layout.xml
LinearLayout viewGroup = (LinearLayout) context.findViewById(R.id.llSortChangePopup);
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = layoutInflater.inflate(R.layout.sort_popup_layout, viewGroup);
// Creating the PopupWindow
changeSortPopUp = new PopupWindow(context);
changeSortPopUp.setContentView(layout);
changeSortPopUp.setWidth(LinearLayout.LayoutParams.WRAP_CONTENT);
changeSortPopUp.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT);
changeSortPopUp.setFocusable(true);
// Some offset to align the popup a bit to the left, and a bit down, relative to button's position.
int OFFSET_X = -20;
int OFFSET_Y = 95;
// Clear the default translucent background
changeSortPopUp.setBackgroundDrawable(new BitmapDrawable());
// Displaying the popup at the specified location, + offsets.
changeSortPopUp.showAtLocation(layout, Gravity.NO_GRAVITY, p.x + OFFSET_X, p.y + OFFSET_Y);
// Getting a reference to Close button, and close the popup when clicked.
Button close = (Button) layout.findViewById(R.id.close);
close.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
changeSortPopUp.dismiss();
}
});
}
答案 1 :(得分:5)
您可以使用以下代码。你需要使用PopupWindow。
PopupWindow mpopup;
然后你需要夸大你的观点。
View popUpView = getLayoutInflater().inflate(R.layout.activity_login,
null); // inflating popup layout
mpopup = new PopupWindow(popUpView, LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT, true); // Creation of popup
mpopup.setAnimationStyle(android.R.style.Animation_Dialog);
mpopup.showAtLocation(popUpView, Gravity.CENTER, 0, 0); // Displaying popup
如果你的布局有一些项目,那么你需要将该项目与你的视图绑定。
TextView some = (TextView) popUpView.findViewById(R.id.some);
Button btnCancel = (Button) popUpView.findViewById(R.id.btnCancel);
弹出窗口项的onClickListener。
btnCancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mpopup.dismiss();
}
});
您可以使用mpopup.dismiss();
答案 2 :(得分:4)
您可以使用LayoutInflater
LayoutInflater inflater = (LayoutInflater) act.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.custom_layout, null); //custom_layout is your xml file which contains popuplayout
LinearLayout layout = (LinearLayout) view.findViewById(R.id.popuplayout);
答案 3 :(得分:2)
试试这个......
public void popUpWindow() {
final Dialog dialog = new Dialog(MainActivity.this);
dialog.setContentView(R.layout.client_details);
dialog.setTitle("Client Details");
dialog.show();
}
答案 4 :(得分:1)
嗨,请检查 post 是否包含您问题的解决方案
试试这段代码:
public class ShowPopUp extends Activity {
PopupWindow popUp;
LinearLayout layout;
TextView tv;
LayoutParams params;
LinearLayout mainLayout;
Button but;
boolean click = true;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
popUp = new PopupWindow(this);
layout = new LinearLayout(this);
mainLayout = new LinearLayout(this);
tv = new TextView(this);
but = new Button(this);
but.setText("Click Me");
but.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (click) {
popUp.showAtLocation(mainLayout, Gravity.BOTTOM, 10, 10);
popUp.update(50, 50, 300, 80);
click = false;
} else {
popUp.dismiss();
click = true;
}
}
});
params = new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
layout.setOrientation(LinearLayout.VERTICAL);
tv.setText("Hi this is a sample text for popup window");
layout.addView(tv, params);
popUp.setContentView(layout);
// popUp.showAtLocation(layout, Gravity.BOTTOM, 10, 10);
mainLayout.addView(but, params);
setContentView(mainLayout);
}
}
答案 5 :(得分:0)
alert=(Button)findViewById(R.id.click);
detail=(ImageView)findViewById(R.id.goDetail);
alert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// custom dialog
final Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.custom);
dialog.setTitle(Html.fromHtml("<font color='#EC407A'>About</font>"));
Button dialogButton = (Button) dialog.findViewById(R.id.dialogOK);
ImageView img = (ImageView) dialog.findViewById(R.id.goDetail);
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
Toast.makeText(getApplicationContext(),"Dismissed..!!",Toast.LENGTH_SHORT).show();
}
});
img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
i=new Intent(getApplication(),CustomDetail.class);
setIntent(i);
Toast.makeText(Dashboard.this, "Check detail ", Toast.LENGTH_SHORT).show();
}
});
dialog.show();
}