Android-向布局添加视图,使布局位于ActionBar的前面

use*_*550 7 android view popupwindow android-actionbar

我有一个观点,我正在创建一个PopupWindow.在这里PopupWindow,我有一个文本框(EditText).单击以编辑文本时,键盘将打开,整个视图会上升,但视图顶部会平滑地位于操作栏视图下方.到现在为止还挺好.

我现在添加了一个空的,GridView没有任何进一步的配置PopupWindow,现在同样的情况发生但视图的整个顶部位于操作栏视图的顶部而不是平滑(弹出窗口变得一团糟,当键盘消失弹出窗口位置改变几秒钟,键盘上有"残留"一秒钟.它也发生在ListView.

我希望视图的顶部能够顺利地进入'ActionBar`.

有任何想法吗?

更新:通过以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);
Run Code Online (Sandbox Code Playgroud)

好:

在此输入图像描述

坏:

在此输入图像描述

布局:

<?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>
Run Code Online (Sandbox Code Playgroud)

我正在以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);
Run Code Online (Sandbox Code Playgroud)

Jay*_*ora 0

我同意 Pasquale Anatriello 发布的答案。虽然你可以你可以尝试不同的方法:

mPopUpWindow.showAsDropDown(anchor);
mPopUpWindow.showAsDropDown(anchor, xoff, yoff);
mPopUpWindow.showAtLocation(parent, gravity, x, y);
Run Code Online (Sandbox Code Playgroud)

我建议你应该让popUp只在Action Bar之后绘制,取y轴偏移和重力顶部,说:yOffset等于actionbar高度,如果你有action bar ~ height x 10% of device height,[layout_weight = 1.0]。即使它没有成功,创建一个自定义视图[比如线性布局],它出现和消失,就像弹出一个窗口一样,并根据需要为您提供灵活性,自己处理点击,使其像切换一样,请参阅动画代码::

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);
Run Code Online (Sandbox Code Playgroud)