1

目前,我有一個按鈕,一個Linear Layout內,像這樣:單擊按鈕時顯示PopupWindow?

​​

我也有一個createPopup擴展(單擊該按鈕時確實執行)。

public void createPopup(View view) { 

} 

我試圖在其中創建一個PopupWindowTextView。然後我叫showAtLocation(parent, gravity, x, y)其中parent是根LinearLayoutgravityGravity.BOTTOM,xy都被設置爲10

當我點擊按鈕時,我收到了一個IllegalStateException錯誤,我撥打了showAtLocation()。這裏是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."); 
} 

我想知道的是:

  • 是什麼錯誤呢?
  • 它爲什麼會出現?
  • 我該如何解決?
  • 如何創建出現在一個按鈕的點擊一個簡單的彈出窗口?*

*我希望能夠創建一個函數,其中至少需要一個參數(這將是一個String),然後創建一個包含String的彈出窗口,以及一個關閉彈出窗口的按鈕。

編輯:不知道這是否是連接至彈出的問題,但是當我運行應用程序,我得到這個錯誤:

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 

第二個編輯:我已經加入了相關的代碼上面。

+0

發佈錯誤的完整堆棧跟蹤。包括錯誤消息,這很重要。 – JoxTraex

+0

我不知道我是否能夠重現它,但我可以嘗試。 –

+0

當給出一個錯誤時,請確保有五個完整的堆棧跟蹤,對於理解正在發生的事情非常有幫助。 – JoxTraex

回答

2

如果您正在查看如何實現對話框,我通常會創建一個單獨的佈局文件,類文件,並從需要顯示的地方調用它。對話框顯示了中心的其他活動,據我所知,它們不能移動。

當你想顯示對話框,您可以撥打:

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> 

我希望這回答了你的問題。如果沒有,請隨時評論這篇文章。我不知道如何解決你的錯誤(因爲它不是完整的錯誤),但我知道如何實現自定義對話框(或彈出窗口)來檢查你的其他活動。

+0

感謝您的回覆。我正在嘗試您的解決方案,然後我會回過頭來看看它在文檔中的工作原理。你可以添加你正在使用的導入語句嗎? –

+0

我想我粘貼了所有需要的東西......我從一個大型文件中複製了這個文件,該文件包含一些其他的東西,您不需要的其他東西。如果您有任何其他問題,請告訴我! – TheAnonymous010

+0

關於第18行,它說'this.activity = activity'。 Android Studio告訴我它無法解決。你的意思是做'this.setOwnerActivity(activity)'? –