2015-05-02 19 views
7

Tôi có chế độ xem mà tôi đang tạo một PopupWindow. Trong số PopupWindow này, tôi có một hộp văn bản (EditText). Khi nhấp để chỉnh sửa văn bản, bàn phím mở ra và toàn bộ chế độ xem tăng lên, nhưng phần đầu của chế độ xem sẽ chuyển sang chế độ xem dưới chế độ xem chế độ xem thanh hành động một cách mượt mà. Càng xa càng tốt.Android- thêm chế độ xem vào bố cục khiến bố cục ở phía trước ActionBar

bây giờ tôi đã thêm một sản phẩm nào GridView mà không cần bất kỳ cấu hình thêm cho PopupWindow, và bây giờ là kịch bản tương tự xảy ra nhưng toàn bộ phần trên của quan điểm đi trên của quan điểm thanh tác vụ và không được mịn màng (popup trở thành một mớ hỗn độn, khi bàn phím biến mất vị trí bật lên thay đổi trong vài giây và có "dư thừa" từ bàn phím trong một giây). Nó cũng xảy ra với ListView.

Tôi muốn phần trên cùng của chế độ xem đi theo 'ActionBar` suôn sẻ, như thường lệ.

Bất kỳ ý tưởng nào?

CẬP NHẬT: Bằng cách thêm GridView lập trình tôi đã giải quyết một phần thiết bị trên một vài thiết bị, nhưng trên một số thiết bị, nó vẫn xảy ra.

Hiển thị 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); 

TỐT:

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> 

tôi thêm các GridView lập trình:

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

bạn có thể vui lòng đăng một số ảnh chụp màn hình không? Tôi gặp khó khăn khi cố gắng hình dung xem vấn đề trông như thế nào, nếu có thể đăng một bài viết, nơi bạn có thể dự đoán công việc 'popupwindow' (trên một số thiết bị như bạn nói) và một nơi không phải là – TomTsagk

+0

Tôi đã thêm ảnh chụp màn hình tốt và xấu. – user2162550

+0

Bạn có thể vui lòng cung cấp bố cục của mình không ?. Ngoài ra nó có thể là tốt hơn để sử dụng Dialog/DialogFragment –

Trả lời

0

Tôi đồng ý với câu trả lời được đăng bởi Pasquale Anatriello. Mặc dù u có thể Bạn có thể thử phương pháp khác nhau:

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

tôi đề nghị bạn nên để Popup vẽ chỉ sau Action Bar, lấy trục y bù đắp và hấp dẫn hàng đầu, nói: yOffset là Tương đương với actionbar chiều cao, nếu bạn có hành động thanh ~ chiều cao x 10% chiều cao thiết bị, [layout_weight = 1.0]. Thậm chí nếu nó không hoạt động, hãy tạo Chế độ xem tùy chỉnh [nói Bố cục tuyến tính] xuất hiện và biến mất và hoạt động như cửa sổ bật lên và cung cấp tính linh hoạt như bạn muốn, tự xử lý nhấp chuột, biến nó thành nút chuyển, xem mã cho hoạt ảnh ::

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

Vấn đề của bạn ở đây là cửa sổ popup. Không có cách nào để làm cho nó đi dưới thanh hành động vì thanh hành động được hiển thị trong cửa sổ khác bên dưới cửa sổ mới mà bạn đang tạo. hơn nữa, sử dụng một cửa sổ popup cho bố cục phức tạp đó sẽ không bao giờ thực hiện hiệu quả. Bạn có nghĩ đến việc gói bản đồ và bố cục bạn đang đặt trong cửa sổ bật lên trong bố cục tùy chỉnh không? Đó có thể là giải pháp dễ dàng hơn

+0

'sử dụng cửa sổ bật lên cho bố cục phức tạp đó sẽ không bao giờ thực hiện hiệu quả' - tại sao? – user2162550

Các vấn đề liên quan