回答:
通常はを呼び出すと仮定しますsetContentView(R.layout.main)が、最初の実行では、このオーバーレイが必要です。
ステップ1:FrameLayoutJavaコードでを作成し、それをに渡しsetContentView()ます。
ステップ#2を使用LayoutInflaterしてにインフレートR.layout.mainしますFrameLayout。
ステップ#3:を使用LayoutInflaterしてオーバーレイをに組み込みますFrameLayout。
ステップ#4:ユーザーがボタン(または何か)をタップしてオーバーレイを閉じるときに、removeView()からオーバーレイを削除するように呼び出しますFrameLayout。
オーバーレイはの子であるFrameLayoutので、のコンテンツの上にフロートしR.layout.mainます。
ViewGroup「コーチマーク」レイヤーのカスタムはそれを処理できShowcaseView、そのパターンの缶詰実装を提供するライブラリー(例えば、)があります。
「コーチマーク」はUXトークの「ヘルプオーバーレイ」です:-)
coach_mark.xmlはコーチマークレイアウトです
coach_mark_master_viewはで最上位ビュー(ルート)のIDであるcoach_mark.xml
public void onCoachMark(){
final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.setContentView(R.layout.coach_mark);
dialog.setCanceledOnTouchOutside(true);
//for dismissing anywhere you touch
View masterView = dialog.findViewById(R.id.coach_mark_master_view);
masterView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
}
});
dialog.show();
}
coach_mark.xmlのサンプルを(Oded Breinerによって提供されたこの優れたソリューションに)追加することで、pplがコピー&ペーストして簡単に動作する例をすばやく確認できるようにします。
ここにcoach_mark.xmlのサンプルがあります。-> drawable / coach_marksを画像に変更します。
coach_mark.xml
<?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:orientation="vertical"
android:id="@+id/coach_mark_master_view">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/coach_marks_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:layout_gravity="center_horizontal"
android:src="@drawable/coach_marks" />
</RelativeLayout>
</LinearLayout>
オプションで、このテーマを使用してパディングを削除します。
<style name="WalkthroughTheme" parent="Theme.AppCompat">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
A dialog is a small window that prompts [...]. A dialog does not fill the screen and is normally used for modal events [...].。このコードを使用すると、マスタービューが画面のごく一部に圧縮されます。私が設定した場合android:layout_width="640dp" android:layout_height="480dp"(つまり、テストしている画面の実際の値)、それは正しく動作します。(もちろん、これは実行可能な解決策ではありません)
new Dialog(getContext(), R.style.WalkthroughTheme);
あなたはそれをかなり迅速に行うことができます。たとえば、LinearLayoutを追加します。ここには、ヘルプ情報に対応するアルファ付きの画像を置き、オーバーレイのように何を描きたいかを指定します。アクティビティのxmlで、このレイアウトを、Gone可視性のあるアクティビティのレイアウトの後にRelativeLayoutに配置します。ヘルプ情報を描画したいときは、この可視性を可視に設定する必要があります。
ご不明な点がございましたら、お気軽にお答えください。
プログラムで現在のアクティビティの上にオーバーレイレイアウトを表示する方法については、別の回答を参照してください。アクティビティのlayout.xmlは、オーバーレイスキンについて何も知る必要はありません。オーバーレイを半透明にして、画面の一部のみをカバーし、その上に1つ以上のテキストビューとボタンを配置できます... プログラムでボタンをオーバーレイする方法は?
私の目標は、メインのアクティビティがオーバーレイスキン、オーバーレイの出入り、さまざまなオーバーレイを認識せず、overlay1.xmlテキストファイルをテンプレートとして使用でき、プログラムでコンテンツを更新することです。CommonsWareが私に言ったほとんどのことをします。私の投稿は、開始するための実際のプログラムコードを示しています。
免責事項:OPs「入力ありがとうございます。これは、私がそれを行ったことを想像した方法です。私は以下の答えを信用しなければなりません」コメントは私の答えではなく、CommonsWareの答えを意味します。Stackoverflowは投稿の順序を変更しました。