2011-05-10 13 views
29

Para crear un simple PopupWindow de trabajo, tenemos que hacer lo siguiente:PopupWindow en Android

popup_example.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"> 

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

    </LinearLayout> 

código Java

LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

PopupWindow pw = new PopupWindow(inflater.inflate(R.layout.popup_example, null, false),100,100, true); 

pw.showAtLocation(this.findViewById(R.id.main), Gravity.CENTER, 0, 0); 

Mi requisito es que necesito un

<TEXTVIEW android:layout_height="wrap_content" android:layout_width="fill_parent" /> 

y una

<BUTTON android:id="@+id/end_data_send_button" android:text="Cancel"/> 

en mi popup_example.xml. ¿Cómo puedo manejar estos dos componentes en mi código de Java?

screenshot

+6

Sobre la base de lo que está mostrando, éstos probablemente debería haber un diálogo y no un PopupWindow. –

+3

... ahora más que nunca, DialogFragments está disponible http://developer.android.com/guide/topics/ui/dialogs.html – samosaris

+0

Oye, ¿puedo usar la ventana emergente para mostrar una imagen ampliada (en clic de la imagen) que se muestra dinámicamente en una vista de lista? Gracias. –

Respuesta

51

Aquí, le doy un ejemplo de demostración. Vea esto y personalícelo según su necesidad.

public class ShowPopUp extends Activity { 

    PopupWindow popUp; 
    LinearLayout layout; 
    TextView tv; 
    LayoutParams params; 
    LinearLayout mainLayout; 
    Button but; 
    boolean click = true; 

    @Override 
    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(layout, 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); 
    } 
    } 

Hope esto va a resolver su problema.

2
Button endDataSendButton = (Button)findViewById(R.id.end_data_send_button); 

Del mismo modo se puede obtener la vista de texto mediante la adición de un identificador a la misma.

+0

@ user746108 pw.showAtLocation (this.findViewById (R.id.text_view), Gravity.CENTER, 0, 0); TextView solo se muestra en la ventana emergente ... ¿Cómo puedo arreglar la ubicación del botón – jennifer

4

¿Ya terminaste de inflar el diseño? ¡Tal vez puedas probar esto!

View myPoppyView = pw.getContentView(); 
Button myBelovedButton = (Button)myPoppyView.findViewById(R.id.my_beloved_button); 
//do something with my beloved button? :p 
4

Construyo mi propia clase, y luego la llamo desde mi actividad, anulando los métodos pequeños como showAtLocation. Lo encontré más fácil cuando tengo de 4 a 5 ventanas emergentes en mi actividad para hacer esto.

public class ToggleValues implements OnClickListener{ 

    private View pView; 
    private LayoutInflater inflater; 
    private PopupWindow pop; 
    private Button one, two, three, four, five, six, seven, eight, nine, blank; 
    private ImageButton eraser; 
    private int selected = 1; 
    private Animation appear; 

    public ToggleValues(int id, Context c, int screenHeight){ 
     inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     pop = new PopupWindow(inflater.inflate(id, null, false), 265, (int)(screenHeight * 0.45), true); 
     pop.setBackgroundDrawable(c.getResources().getDrawable(R.drawable.alpha_0)); 
     pView = pop.getContentView(); 

     appear = AnimationUtils.loadAnimation(c, R.anim.appear); 

     one = (Button) pView.findViewById(R.id.one); 
     one.setOnClickListener(this); 
     two = (Button) pView.findViewById(R.id.two); 
     two.setOnClickListener(this); 
     three = (Button) pView.findViewById(R.id.three); 
     three.setOnClickListener(this); 
     four = (Button) pView.findViewById(R.id.four); 
     four.setOnClickListener(this); 
     five = (Button) pView.findViewById(R.id.five); 
     five.setOnClickListener(this); 
     six = (Button) pView.findViewById(R.id.six); 
     six.setOnClickListener(this); 
     seven = (Button) pView.findViewById(R.id.seven); 
     seven.setOnClickListener(this); 
     eight = (Button) pView.findViewById(R.id.eight); 
     eight.setOnClickListener(this); 
     nine = (Button) pView.findViewById(R.id.nine); 
     nine.setOnClickListener(this); 
     blank = (Button) pView.findViewById(R.id.blank_Selection); 
     blank.setOnClickListener(this); 
     eraser = (ImageButton) pView.findViewById(R.id.eraser); 
     eraser.setOnClickListener(this); 
    } 

    public void showAtLocation(View v) { 
     pop.showAtLocation(v, Gravity.BOTTOM | Gravity.LEFT, 40, 40); 
     pView.startAnimation(appear); 
    } 

    public void dismiss(){ 
     pop.dismiss(); 
    } 

    public boolean isShowing() { 
     if(pop.isShowing()){ 
      return true; 
     }else{ 
      return false; 
     } 
    } 

    public int getSelected(){ 
     return selected; 
    } 

    public void onClick(View arg0) { 
     if(arg0 == one){ 
      Sudo.setToggleNum(1); 
     }else if(arg0 == two){ 
      Sudo.setToggleNum(2); 
     }else if(arg0 == three){ 
      Sudo.setToggleNum(3); 
     }else if(arg0 == four){ 
      Sudo.setToggleNum(4); 
     }else if(arg0 == five){ 
      Sudo.setToggleNum(5); 
     }else if(arg0 == six){ 
      Sudo.setToggleNum(6); 
     }else if(arg0 == seven){ 
      Sudo.setToggleNum(7); 
     }else if(arg0 == eight){ 
      Sudo.setToggleNum(8); 
     }else if(arg0 == nine){ 
      Sudo.setToggleNum(9); 
     }else if(arg0 == blank){ 
      Sudo.setToggleNum(0); 
     }else if(arg0 == eraser){ 
      Sudo.setToggleNum(-1); 
     } 
     this.dismiss(); 
    } 

} 
+0

cómo se llama a esta clase ToggleValues ​​desde una acción de clic de botón –

3
LayoutInflater inflater = (LayoutInflater) SettingActivity.this.getSystemService(SettingActivity.LAYOUT_INFLATER_SERVICE); 
PopupWindow pw = new PopupWindow(inflater.inflate(R.layout.gd_quick_action_slide_fontsize, null),LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT, true); 
pw.showAtLocation(SettingActivity.this.findViewById(R.id.setting_fontsize), Gravity.CENTER, 0, 0); 
View v= pw.getContentView(); 
TextView tv=v.findViewById(R.id.....); 
Cuestiones relacionadas