单击按钮时显示 PopupWindow?
Display PopupWindow upon clicking a button?
目前,我有一个按钮,在 Linear Layout
内,如下所示:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/open_popup"
android:onClick="createPopup"/>
</LinearLayout>
我还有一个 createPopup 扩展(它确实在单击按钮时执行)。
public void createPopup(View view) {
}
我试图创建一个 PopupWindow
,里面有一个 TextView
。然后我调用 showAtLocation(parent, gravity, x, y)
,其中 parent
是根 LinearLayout
。 gravity
是 Gravity.BOTTOM
,x
和 y
都设置为 10
。
当我点击按钮时,我在调用 showAtLocation()
的地方收到 IllegalStateException
错误。这是 createPopup()
函数:
PopupWindow popUp;
LinearLayout layout;
LinearLayout main;
TextView value;
LayoutParams params;
boolean click = true;
public void createPopup(View view) {
popUp = new PopupWindow(this);
layout = new LinearLayout(this);
main = (LinearLayout) findViewById(R.id.parent);
value = new TextView(this);
if(click) {
popUp.showAtLocation(main, 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);
value.setText(R.string.message);
layout.addView(value, params);
popUp.setContentView(layout);
setContentView(main);
TextView status = (TextView) findViewById(R.id.status);
status.setTextSize(28);
status.setText("Status of Popup: Don't worry, you're never going to get this.");
}
我想知道的是:
- 这个错误是什么意思?
- 为什么会出现?
- 我该如何解决?
- 如何创建一个简单的弹出窗口 window,它会在单击按钮时出现?*
*我希望能够创建一个至少接受一个参数(即 String
)的函数,然后创建一个包含 window 的弹出窗口 window =28=],以及一个关闭弹出窗口的按钮 window。
编辑:不确定这是否与弹出窗口问题有关,但是当我 运行 应用程序时,出现此错误:
07-13 19:51:48.448 133-133/? E/[EGL-ERROR]: egl_image* _egl_create_image_ANDROID_native_buffer(egl_display*, egl_context*, EGLClientBuffer, EGLint*, void*):593: CHUN try create image with crop 0,0,0,0
[ 07-13 19:51:48.448 133: 133 E/ ]
CHUN map external image rgb 1024 x 600
第二次编辑:我在上面添加了相关代码。
如果您正在研究如何实现对话框,我通常做的是创建一个单独的布局文件,class 文件,然后从需要显示的地方调用它。对话框显示在中间的另一个 activity 之上,据我所知,它们不能移动。
当你想显示对话框时,你可以调用:
private void openMyDialog() {
MyDialog dialog = new MyDialog(this);
dialog.show();
}
MyDialog.java 需要扩展 Dialog
并实现 android.view.View.OnClickListener
。它将包含保存或控制布局上的元素所需的任何代码。
MyDialog.java:
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
public class MyDialog extends Dialog implements android.view.View.OnClickListener {
public Activity activity;
public MyDialog() {
super(null);
}
public MyDialog(Activity activity) {
super(activity);
this.activity = activity;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.my_dialog);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
default:
break;
}
dismiss();
}
}
my_dialog.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#1C1C1C">
<!-- Whatever your layout will consist of can go here -->
</RelativeLayout>
我希望这能回答您的问题。如果没有,请随时对此 post 发表评论。我不知道如何解决你的错误(因为它不是完整的错误)但我知道如何实现自定义对话框(或弹出窗口)来超越你的其他 activity.
目前,我有一个按钮,在 Linear Layout
内,如下所示:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/open_popup"
android:onClick="createPopup"/>
</LinearLayout>
我还有一个 createPopup 扩展(它确实在单击按钮时执行)。
public void createPopup(View view) {
}
我试图创建一个 PopupWindow
,里面有一个 TextView
。然后我调用 showAtLocation(parent, gravity, x, y)
,其中 parent
是根 LinearLayout
。 gravity
是 Gravity.BOTTOM
,x
和 y
都设置为 10
。
当我点击按钮时,我在调用 showAtLocation()
的地方收到 IllegalStateException
错误。这是 createPopup()
函数:
PopupWindow popUp;
LinearLayout layout;
LinearLayout main;
TextView value;
LayoutParams params;
boolean click = true;
public void createPopup(View view) {
popUp = new PopupWindow(this);
layout = new LinearLayout(this);
main = (LinearLayout) findViewById(R.id.parent);
value = new TextView(this);
if(click) {
popUp.showAtLocation(main, 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);
value.setText(R.string.message);
layout.addView(value, params);
popUp.setContentView(layout);
setContentView(main);
TextView status = (TextView) findViewById(R.id.status);
status.setTextSize(28);
status.setText("Status of Popup: Don't worry, you're never going to get this.");
}
我想知道的是:
- 这个错误是什么意思?
- 为什么会出现?
- 我该如何解决?
- 如何创建一个简单的弹出窗口 window,它会在单击按钮时出现?*
*我希望能够创建一个至少接受一个参数(即 String
)的函数,然后创建一个包含 window 的弹出窗口 window =28=],以及一个关闭弹出窗口的按钮 window。
编辑:不确定这是否与弹出窗口问题有关,但是当我 运行 应用程序时,出现此错误:
07-13 19:51:48.448 133-133/? E/[EGL-ERROR]: egl_image* _egl_create_image_ANDROID_native_buffer(egl_display*, egl_context*, EGLClientBuffer, EGLint*, void*):593: CHUN try create image with crop 0,0,0,0
[ 07-13 19:51:48.448 133: 133 E/ ]
CHUN map external image rgb 1024 x 600
第二次编辑:我在上面添加了相关代码。
如果您正在研究如何实现对话框,我通常做的是创建一个单独的布局文件,class 文件,然后从需要显示的地方调用它。对话框显示在中间的另一个 activity 之上,据我所知,它们不能移动。
当你想显示对话框时,你可以调用:
private void openMyDialog() {
MyDialog dialog = new MyDialog(this);
dialog.show();
}
MyDialog.java 需要扩展 Dialog
并实现 android.view.View.OnClickListener
。它将包含保存或控制布局上的元素所需的任何代码。
MyDialog.java:
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
public class MyDialog extends Dialog implements android.view.View.OnClickListener {
public Activity activity;
public MyDialog() {
super(null);
}
public MyDialog(Activity activity) {
super(activity);
this.activity = activity;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.my_dialog);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
default:
break;
}
dismiss();
}
}
my_dialog.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#1C1C1C">
<!-- Whatever your layout will consist of can go here -->
</RelativeLayout>
我希望这能回答您的问题。如果没有,请随时对此 post 发表评论。我不知道如何解决你的错误(因为它不是完整的错误)但我知道如何实现自定义对话框(或弹出窗口)来超越你的其他 activity.