PopupWindow(フローティングボックス)の基本的な使い方
このセクションの紹介:
このセクションで説明するのは、情報を表示するために使用される最後の UI コントロールである PopupWindow (中断されたボックス) です (知りたい場合) 彼はどのように見えますか? 携帯電話で QQ を開き、リスト内の項目を長押しすると、小さな黒いメッセージがポップアップします。 この種類のダイアログ ボックスは PopupWindow です。AlertDialog ダイアログ ボックスとは異なり、その位置は任意です。
さらに、AlertDialog は非スレッド ブロックですが、PopupWindow はスレッド ブロックです。公式はこんな一文を紹介している PopupWindow:
任意のビューを表示するために使用できるポップアップ ウィンドウです
現在のアクティビティの上に表示されるフローティング コンテナです。
おそらく: ポップアップ ウィンドウ コントロールを意味します。任意のビューを表示するために使用され、現在のアクティビティの上にフローティングされます
このコントロールについて学びましょう~
公式ドキュメント: PopupWindow
1. 関連メソッドの解釈
1) よく使用されるいくつかの構築メソッド
ドキュメントを見ると、PopupWindow の構築メソッドが 9 つも提供されていることがわかります。ここでは実際のものだけを掲載します。 開発で一般的に使用されるいくつかの構築メソッド:
- public PopupWindow (Context context)
- public PopupWindow(View contentView, int width, int height)
- public PopupWindow(View contentView)
- public PopupWindow(View contentView, int width, int height, boolean focusable)
パラメータの説明は不要ですが、contentViewはPopupWindowで表示されるViewであり、フォーカスが表示されているかどうかを示します
2)一般的に使用されるメソッド
より一般的に使用されるメソッドのいくつかを次に示します。他のメソッドについては、ドキュメントをご自身で確認してください。
- setContentView(View contentView): PopupWindowで表示されるViewを設定します
- getContentView(): PopupWindowで表示されるViewを取得します
- showAsDropDown(View anchor): 特定のコントロールからの相対的な位置(真下) left)、オフセットなし
- showAsDropDown(View anchor, int xoff, int yoff): 特定のコントロールの位置に対して、オフセットがあります
- showAtLocation(Viewparent, int Gravity, int x, int y ): 親コントロールの位置 (たとえば、中央の Gravity.CENTER、下の Gravity.BOTTOM など) に対して、オフセットを設定することも、オフセットを設定しないこともできます。 PS: 親パラメータはアクティビティ内のビューのみである必要があります。
- setWidth/setHeight: 幅と高さを設定します。構築メソッドで幅と高さを指定することもできます。 特定の値を書き込むだけでなく、WRAP_CONTENT または MATCH_PARENT を使用することもできます。 PopupWindow の width プロパティと height プロパティは、最初の層の View に直接対応します。
- setFocusable(true): PopupWindow がポップアップした後、すべてのタッチ スクリーンと物理ボタンが PopupWindows によって制御されます。 対処する。他のイベントへの応答は、PopupWindow が消えた後に発生する必要があります (ホームなどのシステム レベルのイベントを除く)。 たとえば、このような PopupWindow が表示された場合、戻るキーを押すとまず PopupWindow が消え、もう一度押すと終了します。 アクティビティ、正確に言うと、アクティビティを終了したい場合は、まず PopupWindow を非表示にする必要があります。これは、PopupWindow を押しても戻ることはできません。これは、PopupWindow の背景が設定されているときに行う必要があります。
- setAnimationStyle(int): アニメーション効果を設定します
2. コードサンプル
を使用してレンダリングを実行します:
キーコードを実装します:
まず、アニメーション ファイル: anim_pop.xml:
<set xmlns:android="http://schemas.android.com/ apk/res/android">
<alpha android:fromAlpha="0"
android:toAlpha="1"
android:duration="2000">
次はpopupWindowの布局:item_popip.xml:
<LinearLayout xmlns:android="http://schemas. android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="../style/images/ic_pop_bg"
android:orientation="vertical"> ;
<ボタン
android:id="@+id/btn_xixi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="嘻嘻"
android:textSize="18sp" />
<ボタン
android:id="@+id/btn_hehe"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding= "5dp"
android:text="呵呵"
android:textSize="18sp" />
</LinearLayout>
MainActivity.java:
private Button btn_show;
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = MainActivity.this;
btn_show = (ボタン) findViewById(R.id.btn_show);
btn_show.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
initPopWindow(v) );
}
});
}
private void initPopWindow(View v) {
View view = LayoutInflater.from(mContext).inflate(R.layout.item_ポップアップ、null、false);
ボタン btn_xixi = ( Button) view.findViewById(R.id.btn_xixi);
Button btn_hehe = (Button) view.findViewById(R.id.btn_hehe);
//1.构造一个PopupWindow、パラメータ依次是追加的View,宽高
Final PopupWindow popWindow = new PopupWindow(view,
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);
popWindow.setAnimationStyle(R.anim) .anim_pop); //設置追加アニメーション画
//これらは点击非PopupWindow領域、PopupWindow会消失、下面がない場合
//代金の话、你会発行现、当你ハンドルPopupWindow表示了、免论你按何次後退键
//PopupWindow并不会关闭、而して退出不出程序、加上下述代码可解决这个题
Popwindow.Settouch (True);
Popwindow.SettouchInterceptor (new view.onTouchListener () {
@vPerride
Public Boolean Ovelean t -VENT) {re Return false
// True に戻ると、Touch イベントはインターセプトされると、Popupwindow の onTouchevent は呼び出されないため、外部領域をクリックして閉じることができなくなります
use with use using Event _ BTN_XIXI.SetonClickListener (New View.onClickListener) () {
@v@Public Void Onclick (View v) {
TOAST.MAKETEXT (MAINACTIVIS.THIS, "あなたは「クリックヒヒ〜」、toast.length_short) .show ( );
{
Toast.makeText(MainActivity .this, "クリックしましたね、はは~"、トースト .LENGTH_SHORT).show();
PopWindow.dismiss();
}
}); デモは、簡単なニーズにも対応できるはずです。 PopupWindow について詳しく知りたい場合は、次の参考文献を読むことができます:
Android PopupWindow の使い方と分析
Android PopupWindow の詳細な説明