2015-05-02 11 views
7

Ho una vista in cui sto creando un PopupWindow. In questo PopupWindow, ho una casella di testo (EditText). Quando si fa clic per modificare il testo, la tastiera si apre e l'intera vista sale, ma la parte superiore della vista diventa sotto la visualizzazione della barra delle azioni senza intoppi. Fin qui tutto bene.Android: aggiunta di una vista al layout che determina il layout davanti a ActionBar

ora aggiunto un vuoto GridView senza ulteriore configurazione al PopupWindow, e ora lo stesso scenario accade ma tutta la parte superiore della visualizzazione va sopra della visuale colonna azione e non liscia (la comparsa diventa un casino, quando la tastiera scompare la posizione del popup cambia per un paio di secondi e ci sono "avanzi" dalla tastiera per un secondo). Succede anche con ListView.

Voglio che la parte superiore della vista vada sotto l'ActionBar senza problemi, come dovrebbe.

Qualche idea?

AGGIORNAMENTO: Aggiungendo lo GridView in modo programmatico l'ho parzialmente risolto su un paio di dispositivi, ma su alcuni dispositivi è ancora in corso.

Visualizzazione della popupwindow:

pView=inflater.inflate(R.layout.activity_packbuild, (ViewGroup)mainActivity.findViewById(R.layout.activity_main)); 

pw = new PopupWindow(
      pView, 
      ma.f.getView().getMeasuredWidth(), 
      ma.f.getView().getMeasuredHeight(), 
      true); 

pw.showAtLocation(mainActivity.getWindow().getDecorView().findViewById(android.R.id.content), Gravity.BOTTOM, 0, 0); 

BUONO:

enter image description here

BAD:

enter image description here

Layout:

<?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" 
android:id="@+id/lID"> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/rID" 
    android:background="@drawable/back5"> 


    <ImageView 
     android:layout_width="125px" 
     android:layout_height="200px" 
     android:id="@+id/mImageView" 
     android:background="@drawable/com_facebook_picker_default_separator_color" 
     android:layout_alignParentTop="true" 
     android:layout_weight="1" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="300dp" /> 

    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/editText" 
     android:layout_below="@+id/mImageView" 
     android:layout_marginTop="22dp" 
     android:layout_toRightOf="@+id/lButton" 
     android:layout_toLeftOf="@+id/rButton" /> 

    <ImageView 
     android:layout_width="125px" 
     android:layout_height="200px" 
     android:id="@+id/imageViewRR" 
     android:background="@drawable/com_facebook_picker_default_separator_color" 
     android:layout_alignTop="@+id/mImageView" 
     android:layout_toRightOf="@+id/mImageView" 
     android:layout_marginLeft="20dp" /> 

    <ImageView 
     android:layout_width="125px" 
     android:layout_height="200px" 
     android:id="@+id/imageViewLL" 
     android:background="@drawable/com_facebook_picker_default_separator_color" 
     android:layout_alignTop="@+id/mImageView" 
     android:layout_toLeftOf="@+id/mImageView" 
     android:layout_marginRight="20dp" /> 

    <ImageButton 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:id="@+id/lButton" 
     android:layout_below="@+id/editText" 
     android:layout_alignLeft="@+id/imageViewLL" 
     android:layout_alignStart="@+id/imageViewLL" /> 

    <ImageButton 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:id="@+id/rButton" 
     android:layout_alignTop="@+id/lButton" 
     android:layout_alignRight="@+id/imageViewRR" 
     android:layout_alignEnd="@+id/imageViewRR" 
     android:layout_marginTop="5dp" /> 

    <ImageButton 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:id="@+id/picButton" 
     android:layout_alignTop="@+id/galleryButton" 
     android:layout_alignLeft="@+id/editText" 
     android:layout_alignStart="@+id/editText" 
     android:background="@drawable/camera2" /> 

    <ImageButton 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:id="@+id/videoButton" 
     android:background="@drawable/video" 
     android:layout_alignTop="@+id/galleryButton" 
     android:layout_centerHorizontal="true" /> 

    <ImageView 
     android:layout_width="125px" 
     android:layout_height="200px" 
     android:id="@+id/imageViewR" 
     android:background="@drawable/com_facebook_picker_default_separator_color" 
     android:layout_above="@+id/editText" 
     android:layout_alignRight="@+id/sendButon" 
     android:layout_alignEnd="@+id/sendButon" /> 

    <ImageView 
     android:layout_width="125px" 
     android:layout_height="200px" 
     android:id="@+id/imageViewL" 
     android:background="@drawable/com_facebook_picker_default_separator_color" 
     android:layout_alignTop="@+id/mImageView" 
     android:layout_alignLeft="@+id/editText" /> 

    <ImageButton 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:id="@+id/galleryButton" 
     android:background="@drawable/gallery" 
     android:layout_alignTop="@+id/rButton" 
     android:layout_alignRight="@+id/imageViewR" /> 

    <ImageButton 
     android:layout_width="100px" 
     android:layout_height="100px" 
     android:id="@+id/toButton" 
     android:layout_above="@+id/imageViewR" 
     android:layout_alignLeft="@+id/picButton" 
     android:layout_alignStart="@+id/imageViewL" 
     android:background="@drawable/fbfriends2" 
     android:layout_alignRight="@+id/imageViewLL" 
     android:layout_alignEnd="@+id/imageViewLL" 
     android:layout_marginBottom="20dp" /> 

    <ImageButton 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:id="@+id/sendButon" 
     android:background="@drawable/go" 
     android:layout_alignTop="@+id/toButton" 
     android:layout_alignRight="@+id/editText" 
     android:layout_alignEnd="@+id/editText" /> 

    <ImageButton 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:id="@+id/plusButtonL" 
     android:background="@drawable/plusp" 
     android:layout_alignTop="@+id/videoButton" 
     android:layout_toRightOf="@+id/imageViewLL" /> 

    <ImageButton 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:id="@+id/minusButtonR" 
     android:background="@drawable/minusp" 
     android:layout_alignTop="@+id/videoButton" 
     android:layout_toLeftOf="@+id/imageViewRR" /> 

    <ImageButton 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:id="@+id/plusButton" 
     android:background="@drawable/plusp" 
     android:layout_alignTop="@+id/videoButton" 
     android:layout_centerHorizontal="true" /> 

    <ImageButton 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:id="@+id/minusButton" 
     android:background="@drawable/minusp" 
     android:layout_alignTop="@+id/videoButton" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="300dp" /> 

</RelativeLayout> 

sto aggiungendo il GridView di programmazione:

gv=new GridView(ma); 
      List<Student> hhh=new ArrayList<Student>(); 
      if (FriendPickerApplication.selectedUsers!=null) { 
       if (FriendPickerApplication.selectedUsers.size() > 0) { 
        for (GraphUser gu : FriendPickerApplication.selectedUsers) { 
         hhh.add(new Student("name", gu.getId())); 
        } 
       } 
      } 

      StudentAdapter sta=new StudentAdapter(ma,hhh); 

      //gv=(GridView)pView.findViewById(R.id.gridView2); 
      gv.setVisibility(View.VISIBLE); 
      MainActivity.wantedPicSize=ma.screenWidth/12; //6 
      int wantedSize=MainActivity.wantedPicSize+2; //10 

      RelativeLayout.LayoutParams relativeParams = new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.MATCH_PARENT, 
        RelativeLayout.LayoutParams.MATCH_PARENT); 
      relativeParams.addRule(RelativeLayout.LEFT_OF, btnSend.getId()); 
      relativeParams.addRule(RelativeLayout.RIGHT_OF,picFriends.getId()); 
      relativeParams.addRule(RelativeLayout.ALIGN_TOP, picFriends.getId()); 
      relativeParams.addRule(RelativeLayout.ALIGN_BOTTOM, picFriends.getId()); 
      gv.setLayoutParams(relativeParams); 
      gv.setPadding(5,0,5,0); 
      ((RelativeLayout)pView.findViewById(R.id.rID)).addView(gv); 

      ViewGroup.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.FILL_PARENT, 
        RelativeLayout.LayoutParams.FILL_PARENT);//gv.getLayoutParams(); 

      relativeParams.height = wantedSize+(int)(wantedSize/5); //this is in pixels 
      relativeParams.width = (int)(ma.screenWidth/3.0);//gv.getLayoutParams().width; //(int)((((ma.screenWidth*3)/4)/wantedSize)*wantedSize); 

      gv.setColumnWidth(wantedSize); //+width betwen profiles 
      gv.setVerticalSpacing(5); 
      //gv.setNumColumns((int)((screenWidth/2)/100)); 
      gv.setNumColumns((relativeParams.width/wantedSize)); 
      System.out.print("COLUMNSSSSSSSSSS- "+(relativeParams.width/wantedSize)); 
      gv.setLayoutParams(relativeParams); 
      gv.setVisibility(View.VISIBLE); 

      gv.setAdapter(sta); 
+0

potresti pubblicare alcuni screenshot? Ho difficoltà a cercare di immaginare come appare il problema, se possibile postare uno in cui sono previsti i lavori 'popupwindow' (su alcuni dispositivi come dici tu) e uno dove non è – TomTsagk

+0

Ho aggiunto gli screenshot buoni e cattivi. – user2162550

+0

Potresti fornire il layout? Inoltre potrebbe essere meglio usare Dialog/DialogFragment –

risposta

0

Sono d'accordo con la risposta di Pasquale Anatriello. Anche se u può si può provare diversi metodi:

mPopUpWindow.showAsDropDown(anchor); 
mPopUpWindow.showAsDropDown(anchor, xoff, yoff); 
mPopUpWindow.showAtLocation(parent, gravity, x, y); 

vi consiglio dovrebbe lasciare popup disegnare solo dopo barra delle azioni, prendono Offset asse Y e top gravità, dire: YOffset equivale a ActionBar altezza, se avete azione barra ~ altezza x 10% dell'altezza del dispositivo, [layout_weight = 1.0]. Anche se non ha funzionato crea una visualizzazione personalizzata [dica il layout lineare] che appare e scompare e si comporta come una finestra popup e ti dà la flessibilità che vuoi, gestisci i clic da solo, rendilo come un interruttore, vedi codice per animazione ::

Animation fadeInAnimation = AnimationUtils.loadAnimation(v.getContext(), android.R.anim.fade_in); 
     fadeInAnimation.setDuration(10); 
     v.startAnimation(fadeInAnimation); 

    Animation fadeOutAnimation = AnimationUtils.loadAnimation(v.getContext(), android.R.anim.fade_out); 
     fadeOutAnimation.setDuration(10); 
     v.startAnimation(fadeOutAnimation); 
1

Il tuo problema qui è la finestra pop-up. Non c'è modo di farlo andare sotto la barra delle azioni poiché la barra delle azioni è visualizzata in un'altra finestra che si trova sotto la nuova finestra che stai creando. inoltre, l'utilizzo di una finestra popup per quel layout complesso non ha mai un rendimento efficiente. Hai pensato di avvolgere la tua mappa e il layout che stai inserendo nella finestra popup in un layout personalizzato? Probabilmente sarebbe la soluzione più semplice

+0

'l'uso di una finestra popup per quel layout complesso non funzionerà mai in modo efficiente '- perché? – user2162550

Problemi correlati