Androidブラウザのマルチウィンドウソリューションの詳細説明

高洛峰
リリース: 2017-01-17 14:58:34
オリジナル
1789 人が閲覧しました

私たちの Android プラットフォームは次々にアクティビティで構成されており、各アクティビティは 1 つ以上のビューで構成されています。
したがって、インターフェイスを表示したいとき、最初に考えるのはアクティビティを作成することです。その後、すべての操作はアクティビティ、またはダイアログまたはトーストに実装されます。確かにこの方法は簡単ですが、単純な表示だけで済む場合もあり、Activityを使うのは明らかに冗長です。この場合はどうすればよいでしょうか。

Android アプリケーションも最下層では Linux プロセスですが、上位層ではプロセスの概念が弱まり、Activity のようなインタラクションが抽象化されています。コードはアクティビティを直接制御し、ユーザーの操作もアクティビティです。
アクティビティは、ユーザーインタラクションの観点から抽象化されたオブジェクトであり、概念および使用においてプロセスから分離されています。このプロセスは、アダプション機能に似ています。プロセスは、現在のアプリケーションのアクティビティだけでなく、プロセスの他のインストール パッケージによって指定されたアクティビティも含めることができます。 (システムが必要とする場合を除き) またはコードがプロセスを強制的に強制終了する場合を除き、破棄されません)。

Android ウィンドウのメカニズム全体が WindowManager と呼ばれるインターフェースに基づいていることがわかりました。このインターフェースは画面にビューを追加でき、

画面からビューを削除することもできます。それが直面するオブジェクトは、一方の端が画面、もう一方の端がビューであり、以前のアクティビティ
やダイアログなどを直接無視します。実際、Activity または Diolog の基礎となる実装も WindowManager を通じて行われます。この
WindowManager はグローバルであり、システム全体が唯一のものです。ビューを表示するのは最下層です。

簡単なコードを書きます:

Java コード

WindowManager mWm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);    
Button view = new Button(this);    
view.setText("window manager test!");    
WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();    
mWm.addView(view, mParams);
ログイン後にコピー

一般的に、Android の開発を初めて始めるとき、間違いを犯します。それは、View のコンストラクターで getWidth() と getHeight() を取得することです。 created の場合、Android はそのサイズを知らないため、 getWidth() と getHeight() によって返される結果は 0 です。 実際のサイズはレイアウトの計算時に計算されるため、興味深いことがわかります。つまり、それを取得できます。 onDraw() 長さと幅の理由。



WindowManagerを使用してフローティングウィンドウを実装します

       WindowManager.LayoutParams params;
        params = new WindowManager.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.TYPE_PHONE,//TYPE_APPLICATION,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                PixelFormat.TRANSLUCENT);
        params.gravity = Gravity.TOP;
        manager.addView(tmpView, params);
ログイン後にコピー

フローティングウィンドウに追加する必要があるViewをウィンドウに追加できます:

 if(view.getParent==null)//如果view没有被加入到某个父组件中,则加入WindowManager中
        wManager.addView(view,wmParams);
ログイン後にコピー

このうち、viewは配置する必要があるビューコンポーネントですフローティングウィンドウ。

WindowManager から削除したい場合は、次のステートメントを実行できます:

        if(view.getParent()!=null)
        wManager.removeView(view);
ログイン後にコピー

Android では、上記の方法に従って複数のウィンドウを追加できます。 複数のウィンドウによって引き起こされる問題:

2.問題点

他のアプリケーションがブラウザのメイン アクティビティの前に表示される場合、ブラウザのサブウィンドウがどれだけ前にポップアップしても、ブラウザのライフ サイクルは onPause 状態になります。

Android ブラウザーのマルチウィンドウ ソリューションの詳細な説明については、PHP 中国語 Web サイトに注目してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート