2016-04-05 75 views
1

當你點擊文本視圖時,我做了一個彈出窗口,我跟隨了一個指南如何創建彈出窗口,我工作正常,只是彈出窗口的位置不是我想要看起來,彈出窗口使其左上角顯示在點位置,但我希望左下角處於這樣的指定點,搜索後我發現重力對此負責,請參閱developer.android,但是當我改變重力Gravity.BOTTOM|Gravity.LEFT彈出顯示文本彈出窗口顯示位置,改變重力給出錯誤的位置

彈出XML遠高於

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:id="@+id/popup" 
    android:layout_height="wrap_content" 

    android:orientation="vertical" 
    android:gravity="center" 
    android:padding="7dp" 
    android:background="#d1a2a2"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="Medium Text" 
     android:id="@+id/textView37" 
     android:gravity="center" 
     android:textAlignment="gravity" 
     android:textStyle="bold" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="Medium Text" 
     android:id="@+id/textView41" /> 
</LinearLayout> 

這裏是我的代碼有

vfy.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       //Open popup window 
       if (p != null) 
        showPopup(MainActivity.this, p); 
      } 
    }); 

這些方法

@Override 
    public void onWindowFocusChanged(boolean hasFocus) { 

     int[] location = new int[2]; 
     TextView button = (TextView) findViewById(R.id.textView2); 

     // Get the x, y location and store it in the location[] array 
     // location[0] = x, location[1] = y. 
     button.getLocationOnScreen(location); 

     //Initialize the Point with x, and y positions 
     p = new Point(); 
     p.x = location[0]; 
     p.y = location[1]; 
    } 

    //............ 
    private void showPopup(final Activity context, Point p) { 


     // Inflate the popup_layout.xml 
     LinearLayout viewGroup = (LinearLayout) context.findViewById(R.id.popup); 
     LayoutInflater layoutInflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View layout = layoutInflater.inflate(R.layout.popup, viewGroup); 

     // Creating the PopupWindow 
     final PopupWindow popup = new PopupWindow(context); 
     popup.setContentView(layout); 
     popup.setWindowLayoutMode(ViewGroup.LayoutParams.WRAP_CONTENT, 
       ViewGroup.LayoutParams.WRAP_CONTENT); 
     popup.setFocusable(true); 

     // Some offset to align the popup a bit to the right, and a bit down, relative to button's position. 
     int OFFSET_X = 30; 
     int OFFSET_Y = 30; 

     // Clear the default translucent background 
     popup.setBackgroundDrawable(new BitmapDrawable()); 

     // Displaying the popup at the specified location, + offsets. 
     popup.showAtLocation(layout, Gravity.NO_GRAVITY, p.x + OFFSET_X, p.y + OFFSET_Y); 

     // Getting a reference to Close button, and close the popup when clicked. 
     TextView close = (TextView) layout.findViewById(R.id.textView37); 
     close.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       popup.dismiss(); 
      } 
     }); 
    } 

回答