PopupWindow en android

Para crear un PopupWindow simple de trabajo, necesitamos hacer lo siguiente:

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 necesite un

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

Y un

 <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 Java?

captura de pantalla

Aquí, te estoy dando un ejemplo de demostración. Vea esto y modifiqúelo para requisitos particulares 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); } } 

Espero que esto solucione su problema.

Se hace con el diseño de inflado? Tal vez usted puede probar esto !!

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

Construyo mi propia clase, y luego la llamo de mi actividad, reemplazando pequeños métodos como showAtLocation. He encontrado su más fácil cuando tengo 4 a 5 popups 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(); } } 
 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.....); 
 Button endDataSendButton = (Button)findViewById(R.id.end_data_send_button); 

Del mismo modo, puede obtener la vista de texto agregando un identificador a ella.

  • Agregar programaticamente efecto de animación a un popupWindow (agregado por programa) en android
  • Cómo desenfocar / atenuar una actividad cuando se muestra una ventana emergente en android
  • PopupWindow en una coordenada específica sin vista de anclaje
  • ¿Cómo mostrar el PopupWindow siempre encima del botón (vista)?
  • SetOnItemClickListener de ListView de Android de PopupWindow no se llama
  • EditText en una ventana emergente
  • ListPopupWindow: getWindowVisibleDisplayFrame (Rect) null excepción
  • Creación de un fragmento en una ventana emergente - en Android
  • PopupWindow sobre el teclado virtual
  • ¿Qué es un evento de presionar las mejillas?
  • Reproductor de vídeo flotante (como el reproductor de youtube) en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.