Android adding a view to the layout, forcing the layout to be in front of the ActionBar

I have a view in which I create a PopupWindow . In this PopupWindow , I have a text box ( EditText ). When you click on the text editing, the keyboard opens and the whole view is enlarged, but the upper part of the view looks smoothly under the taskbar. So far so good.

Now I added an empty GridView without any additional settings to PopupWindow , and now the same scenario happens, but the entire top of the view goes on top of the action bar (the pop-up window becomes a mess when the keyboard disappears and the pop-up location changes for a couple of seconds, and the second is β€œleftovers”). This also happens with ListView .

I want the top of the view to go under the "ActionBar" smoothly, as it should be.

Any ideas?

UPDATE: By adding a GridView programmatically, I partially enabled it on multiple devices, but on some devices this still happens.

Display 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); 

OK:

enter image description here

BADLY:

enter image description here

Markup:

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

I add a GridView programmatically:

  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); 
+7
android android-actionbar view popupwindow
source share
2 answers

I agree with the answer posted by Pasquale Anatorio. Although you can, you can try different methods:

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

I suggest that you let you draw popUp only after the Action Bar, accept the y-axis offset and gravity, say: yOffset is equivalent to the height of the action bar if you have an action bar ~ height x 10% of the height of the device, [layout_weight = 1.0]. Even if this doesn’t work, create a custom View [say Linear Layout] that appears and disappears and acts as a popup window and gives you the flexibility to handle the clicks yourself, do it like a switch, see the animation code:

 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); 
0
source share

Your problem here is a popup. You cannot do this under the action bar, because the action bar appears in another window, which is under the new window that you are creating. moreover, using a popup for this complex layout will never work effectively. Have you thought about packing your card and the layout that you insert into the popup in your custom layout? This will probably be an easier solution.

+1
source share

All Articles