Android-добавление вида к макету, заставляя макет находиться перед ActionBar

У меня есть представление, в котором я создаю PopupWindow . В этом PopupWindow меня есть текстовое поле ( EditText ). При нажатии на редактирование текста открывается клавиатура, и весь вид поднимается вверх, но верхняя часть представления отображается под панелью действий плавно. Все идет нормально.

Я теперь добавил пустой GridView без какой-либо дополнительной настройки в PopupWindow , и теперь происходит тот же сценарий, но вся верхняя часть представления выходит поверх представления панели действий и негладна (всплывающее окно становится беспорядком, когда клавиатура исчезает Местоположение всплывающего окна меняется на пару секунд, а на второй – «остатки» с клавиатуры). Это также происходит с ListView .

Я хочу, чтобы верхняя часть представления проходила под «ActionBar» плавно, как и должно быть.

Есть идеи?

UPDATE: добавив GridView программно, я частично решил его на нескольких устройствах, но на некоторых устройствах это все равно.

Отображение 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); 

ХОРОШО:

Введите описание изображения здесь

ПЛОХО:

Введите описание изображения здесь

Планировка:

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

Я добавляю GridView программно:

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

Я согласен с ответом, опубликованным Паскуалом Анаторио. Хотя вы можете попробовать разные методы:

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

Я предлагаю вам позволить рисовать popUp только после Action Bar, принять смещение оси y и точку тяжести, скажем: yOffset эквивалентен высоте панели действий, если у вас есть панель действий ~ высота x 10% высоты устройства, [layout_weight = 1.0]. Даже если это не сработало, создайте пользовательский View [say Linear Layout], который появляется и исчезает и действует как всплывающее окно и дает вам гибкость, как вам нужно, обрабатывать клики самостоятельно, сделать его как переключатель, см. Код для анимации ::

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

Ваша проблема здесь в всплывающем окне. Невозможно сделать это под панелью действий, поскольку панель действий отображается в другом окне, которое находится под новым окном, которое вы создаете. Более того, использование всплывающего окна для этого сложного макета никогда не будет эффективно работать. Вы думали об упаковке своей карты и макета, который вы кладете в всплывающее окно в пользовательском макете? Вероятно, это будет более легкое решение