2012-03-03 2 views
2

Возможно использование Dialog класс, но я не хочу этого таким образом. Вместо этого я хочу, чтобы это было сделано, используя PopupWindow класс, который появляется при запуске и отображает сообщение во всплывающем окне. Я беспомощен, просто не могу этого добиться, проведя много дней за этим. Надеюсь, я получу его здесь. Пожалуйста, спасибо. Также обратите внимание на ниже фрагмент кода, если вы не получите то, что я хочу ..Как создать PopupWindow при запуске в android?

public class PopupActivity extends Activity implements OnClickListener { 


LinearLayout ll = new LinearLayout(this); 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(ll); 

} 

    protected void onStart() 
{ 
super.onStart(); 
final PopupWindow pw; 
Button button = new Button(this); 
button.setText("Hello"); 
pw = new PopupWindow(button, 245, 284, true); 
button.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     pw.dismiss();    
    } 
}); 

pw.showAsDropDown(ll, 10, -50); 
} 

Приведенный выше код дает мне FORCE CLOSE:/Помощь ребята ..

+0

Опубликовать трассировку стека и сообщить нам, в какой строке находится ошибка. Затем мы можем сообщить вам, что не так с вашим кодом. – Shellum

ответ

2

это то, как вы можете показать всплывающее окно.

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:orientation="vertical" 
    android:id="@+id/layoutTemp"> 

</LinearLayout> 

popup_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:padding="10dip" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#FFFFFF"> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="10dip" 
     android:text="Test Pop-Up" /> 

</LinearLayout> 

main.java

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    new Handler().postDelayed(new Runnable() { 
     public void run() { 
      showPopup(); 
     } 
    }, 100); 
} 


public void showPopup(){ 
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    PopupWindow pw = new PopupWindow(inflater.inflate(R.layout.popup_layout, null, false), 100, 100, true); 
    pw.showAtLocation(findViewById(R.id.layoutTemp), Gravity.CENTER, 0, 0); 
} 

Идея заключается в том, что ваше всплывающее окно будет отображаться после загрузки вашей активности, в противном случае оно приведет к возникновению исключения Не удалось добавить окно - токен null недействителен; работает ли ваша деятельность?. Если вы не показываете всплывающее окно одним нажатием кнопки, вот почему я показываю его после задержки в 100 миллисекунд (что почти незаметно).

+0

Да, это правильно. Вот почему я загружаю его через 100 миллисекунд. – waqaslam

+0

Вы не должны этого делать. Что делать, если по какой-то причине создание занимает более 100 мс? – rndstr

+0

, то либо увеличивайте время, либо лучше сделайте это в onResume – waqaslam

Смежные вопросы