Popupwindowの基本的な使い方

1787 ワード

Popupwindowの基本的な使い方
本文はpopupwindowの基本的な使い方、位置、大きさの設定といくつかの特殊な情況を含みます本文はKotlinを使います
一般的な使い方
//    
 val view = layoutInflater.inflate(R.layout.main_menu_popup, null)
//       :1、   2、  3、            
    val popup = PopupWindow(view, ViewGroup.LayoutParams.WRAP_CONTENT
            , ViewGroup.LayoutParams.WRAP_CONTENT)
//         :             popup                      popup  
    popup.setBackgroundDrawable(resources.getDrawable(R.drawable.dropdown))
    popup.isFocusable = true
//      
    popup.isOutsideTouchable = true
    popup.update()
    val main_menu_over = findViewById(R.id.main_menu_over)
//  popup    ,  :1、popup       main_menu_over        2、                  3、x       dp 4、y       dp
// popup.showAsDropDown(main_menu_over, -view.measuredWidth - 2, 10,Gravity.NO_GRAVITY)
  popup.showAsDropDown(main_menu_over, -view.measuredWidth - 2, 10)

上記のコードでは、popupの位置を設定する際に小さな問題が発生します.popupのxのオフセット量を設定した後も、変わりません.次に例を挙げます:図のように私のpopupは"+"号に対して位置を設定して、コードは以下のpopup.showAsDropDown(main_menu_over, - 2, 10)私はxオフセット量を設定したのに2どうして移動しなかったのですか?「+」は右端にあり、popupのデフォルトは「+」の右下隅座標に対してオフセット量を設定するため、popupの実際の位置は、popupの左枠と画面の右側が重なることです.下の図のように赤い部分(絵があまりできないので、下を見てみます)は私自身が理解しています.間違いがあれば指摘してください.「popupwindowは常に画面に表示されます」.この原因は、ソースコードを見てから、説明しましょう.上記の理由で見たポップは一番右側にあります.このような場合、xオフセット量にpopup自体の幅を加える必要があります.左へ移動マイナス右へ移動プラス//popupコントロールval main_menu_over = findViewById (R.id.main_menu_over)
popup.showAsDropDown(main_menu_over, -view.measuredWidth -2, 10)
//          
    popup.showAsDropDown(main_menu_over, -xDis, 5, Gravity.NO_GRAVITY)
    //                  
//popup.showAtLocation(main_menu_over, Gravity.RIGHT, -118 - 5, 5)

以上がpopupを表示する2つの方法です