Establecer el diseño propio en la ventana emergente de android
Tengo un problema con la ventana emergente. Quiero crear una ventana emergente con mi propio diseño. Este es el código:
public class PopupWindowView extends PopupWindow{ PopupWindow popup; boolean click = true; LayoutParams params; RelativeLayout mainLayout; TextView tv; LinearLayout layout; ImageView chooseFlag; public void createPopupWindow(Activity act){ popup = new PopupWindow(act); chooseFlag = (ImageView) act.findViewById(R.id.login_choose_flag); mainLayout = (RelativeLayout) act.findViewById(R.id.login_layout); tv = new TextView(act); layout = new LinearLayout(act); //layout = (LinearLayout) findViewById(R.id.popuplayout); chooseFlag.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (click) { int[] values = new int[2]; v.getLocationOnScreen(values); popup.showAtLocation(mainLayout, Gravity.NO_GRAVITY, 10, 10); popup.update(values[0], values[1], 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); } }
Y este es el diseño que quiero establecer en mi ventana emergente:
- La actividad debe ser transparente, pero tiene fondo negro
- Botón de Android con icono y texto
- ¿Lista de animaciones de la transición de la visión de androide?
- RecyclerView comportamiento extraño inflar las células
- Scrollview desplazamiento automático en la tecla Enter del teclado de entrada suave
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:id="@+id/popuplayout" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/patient_button_bg"> </LinearLayout> </LinearLayout>
En mi clase no puedo usar el método findbyid
porque esto no es Actividad. ¿Cómo puedo configurar mi propio diseño en viuda emergente en mi clase?
Editar: este es el rastro de la pila donde me sale error:
03-01 09:48:48.761: E/AndroidRuntime(16776): FATAL EXCEPTION: main 03-01 09:48:48.761: E/AndroidRuntime(16776): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 03-01 09:48:48.761: E/AndroidRuntime(16776): at android.view.ViewGroup.addViewInner(ViewGroup.java:3337) 03-01 09:48:48.761: E/AndroidRuntime(16776): at android.view.ViewGroup.addView(ViewGroup.java:3208) 03-01 09:48:48.761: E/AndroidRuntime(16776): at android.view.ViewGroup.addView(ViewGroup.java:3188) 03-01 09:48:48.761: E/AndroidRuntime(16776): at android.widget.PopupWindow.preparePopup(PopupWindow.java:969) 03-01 09:48:48.761: E/AndroidRuntime(16776): at android.widget.PopupWindow.showAtLocation(PopupWindow.java:840) 03-01 09:48:48.761: E/AndroidRuntime(16776): at android.widget.PopupWindow.showAtLocation(PopupWindow.java:813) 03-01 09:48:48.761: E/AndroidRuntime(16776): at pl.asseco.amms.mobile.tools.PopupWindowView$1.onClick(PopupWindowView.java:44) 03-01 09:48:48.761: E/AndroidRuntime(16776): at android.view.View.performClick(View.java:3558) 03-01 09:48:48.761: E/AndroidRuntime(16776): at android.view.View$PerformClick.run(View.java:14152) 03-01 09:48:48.761: E/AndroidRuntime(16776): at android.os.Handler.handleCallback(Handler.java:605) 03-01 09:48:48.761: E/AndroidRuntime(16776): at android.os.Handler.dispatchMessage(Handler.java:92) 03-01 09:48:48.761: E/AndroidRuntime(16776): at android.os.Looper.loop(Looper.java:137) 03-01 09:48:48.761: E/AndroidRuntime(16776): at android.app.ActivityThread.main(ActivityThread.java:4514) 03-01 09:48:48.761: E/AndroidRuntime(16776): at java.lang.reflect.Method.invokeNative(Native Method) 03-01 09:48:48.761: E/AndroidRuntime(16776): at java.lang.reflect.Method.invoke(Method.java:511) 03-01 09:48:48.761: E/AndroidRuntime(16776): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 03-01 09:48:48.761: E/AndroidRuntime(16776): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 03-01 09:48:48.761: E/AndroidRuntime(16776): at dalvik.system.NativeStart.main(Native Method)
Editar actividad que utiliza popup:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); getActionBar().hide(); mainMenuGenerator = new MainMenuGenerator(); mainMenuGenerator.generateMainMenu(this); mainMenuGenerator.hideIcons(); popup = new PopupWindowView(); popup.createPopupWindow(this); }
- ScrollView en ambas direcciones android
- Mostrar diseño cuando se abre el teclado virtual
- Listview en el lado de rleft y tabhost en el lado derecho con la proporción de 20:80 compartir pantalla
- No conseguir el pulgar con géneros - jugador de música universal
- ¿Cuándo sabemos cuándo se han establecido las opiniones de una actividad
- Oculte automáticamente la disposición del reproductor multimedia en android
- Cómo colocar una imagen sobre otra en la aplicación android?
- Múltiples padres en estilos de Android xml
Prueba este código:
private void showSortPopup(final Activity context, Point p) { // Inflate the popup_layout.xml LinearLayout viewGroup = (LinearLayout) context.findViewById(R.id.llSortChangePopup); LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View layout = layoutInflater.inflate(R.layout.sort_popup_layout, viewGroup); // Creating the PopupWindow changeSortPopUp = new PopupWindow(context); changeSortPopUp.setContentView(layout); changeSortPopUp.setWidth(LinearLayout.LayoutParams.WRAP_CONTENT); changeSortPopUp.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT); changeSortPopUp.setFocusable(true); // Some offset to align the popup a bit to the left, and a bit down, relative to button's position. int OFFSET_X = -20; int OFFSET_Y = 95; // Clear the default translucent background changeSortPopUp.setBackgroundDrawable(new BitmapDrawable()); // Displaying the popup at the specified location, + offsets. changeSortPopUp.showAtLocation(layout, Gravity.NO_GRAVITY, px + OFFSET_X, py + OFFSET_Y); // Getting a reference to Close button, and close the popup when clicked. Button close = (Button) layout.findViewById(R.id.close); close.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { changeSortPopUp.dismiss(); } }); }
Puede utilizar el siguiente código. Usted necesita usar PopupWindow para esto.
PopupWindow mpopup;
Entonces usted necesita para inflar su punto de vista.
View popUpView = getLayoutInflater().inflate(R.layout.activity_login, null); // inflating popup layout mpopup = new PopupWindow(popUpView, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, true); // Creation of popup mpopup.setAnimationStyle(android.R.style.Animation_Dialog); mpopup.showAtLocation(popUpView, Gravity.CENTER, 0, 0); // Displaying popup
Si su disposición tiene un cierto artículo entonces usted necesita atar ese artículo con su opinión.
TextView some = (TextView) popUpView.findViewById(R.id.some); Button btnCancel = (Button) popUpView.findViewById(R.id.btnCancel);
OnClickListener de su elemento de ventana emergente.
btnCancel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mpopup.dismiss(); } });
Puedes descartar tu PopupWindow usando mpopup.dismiss();
Puede utilizar LayoutInflater
LayoutInflater inflater = (LayoutInflater) act.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.custom_layout, null); //custom_layout is your xml file which contains popuplayout LinearLayout layout = (LinearLayout) view.findViewById(R.id.popuplayout);
Hola, compruebe que este mensaje consiste en una solución a su pregunta
Pruebe este código:
public class ShowPopUp extends Activity { PopupWindow popUp; LinearLayout layout; TextView tv; LayoutParams params; LinearLayout mainLayout; Button but; boolean click = true; 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(mainLayout, 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); } }
prueba esto……
public void popUpWindow() { final Dialog dialog = new Dialog(MainActivity.this); dialog.setContentView(R.layout.client_details); dialog.setTitle("Client Details"); dialog.show(); }
alert=(Button)findViewById(R.id.click); detail=(ImageView)findViewById(R.id.goDetail); alert.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // custom dialog final Dialog dialog = new Dialog(context); dialog.setContentView(R.layout.custom); dialog.setTitle(Html.fromHtml("<font color='#EC407A'>About</font>")); Button dialogButton = (Button) dialog.findViewById(R.id.dialogOK); ImageView img = (ImageView) dialog.findViewById(R.id.goDetail); // if button is clicked, close the custom dialog dialogButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); Toast.makeText(getApplicationContext(),"Dismissed..!!",Toast.LENGTH_SHORT).show(); } }); img.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { i=new Intent(getApplication(),CustomDetail.class); setIntent(i); Toast.makeText(Dashboard.this, "Check detail ", Toast.LENGTH_SHORT).show(); } }); dialog.show(); }