programing

몇 가지 Android 앱 및 ICS에서 볼 수있는 것처럼 도움말 오버레이를 만들려면 어떻게해야합니까?

nasanasas 2020. 9. 1. 07:34
반응형

몇 가지 Android 앱 및 ICS에서 볼 수있는 것처럼 도움말 오버레이를 만들려면 어떻게해야합니까?


ICS가 처음로드 될 때 표시되는 것과 같은 도움말 오버레이를 만들거나 ES 파일 탐색기 또는 Apex Launcher와 같은 앱 (더 많은 것이 있지만 지금은 생각할 수 없습니다)을 만들고 싶습니다. 이것은 하나의 뷰가 다른 뷰 위에 놓여있는 상대적인 레이아웃입니까? 나는 그런 일을하기위한 샘플 코드를 찾을 수 없었다. 누구든지 이것이 어떻게 수행되는지 알고 있거나 아이디어가 있습니까?

ES 파일 탐색기 ES 파일 탐색기


일반적으로를 호출한다고 가정 setContentView(R.layout.main)하지만 처음 실행할 때이 오버레이를 원합니다.

1 단계 : FrameLayoutJava 코드를 생성 하여 setContentView().

단계 # 2 :이 LayoutInflater팽창하는 R.layout.mainFrameLayout.

3 단계 : LayoutInflater오버레이를 FrameLayout.

4 단계 : 사용자가 버튼 (또는 기타)을 탭하여 오버레이를 닫으면을 호출 removeView()하여 FrameLayout.

오버레이는의 나중 자식 FrameLayout이므로의 콘텐츠 위에 떠있게됩니다 R.layout.main.


"코치 마크"는 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>

You can do that pretty quickly. You add, for exemple a LinearLayout where you put a picture with alpha which correspond to your help information and what do you want to draw like an overlay. In you xml of your activity you put this layout in a RelativeLayout after the layout of your activity with the Gone visibility. When you want to draw the help information, you just neeed to set this visibility to visible.

I hope, I'm clear, if you have any question,I'm be please to answer them.


See my another answer how programmatically show an overlay layout on top of the current activity. Activity's layout.xml does not need to know anything about the overlay skin. You can put overlay semi-transparent, cover only part of the screen, one or more textview and buttons on it... How to overlay a button programmically?

  • create res/layout/paused.xml RelativeLayout template or use any layout toplevel
  • create a function to show overlay skin
  • key is to get handle to layout.xml, use LayoutInflater class to parse xml to view object, add overlay view to current layout structure
  • My example uses a timer to destroy overlay object by completely removing it from the view structure. This is probably what you want as well to get rid of it without a trace.

My goal was that main activities are not aware of any overlay skin, overlays come and go, many different overlays, still able to use overlay1.xml text files as a template, and content should programmatically be updated. I do pretty much what CommonsWare told us my post shows the actual program code to get started.

면책 조항 : OPs "귀하의 의견에 감사드립니다. 이것은 내가 그것을 어떻게 생각했는지입니다. 아래 답변에 크레딧을 주어야합니다"코멘트는 내 답변이 아니라 CommonsWare 답변을 의미합니다. Stackoverflow는 사후 순서를 변경했습니다.

참고 URL : https://stackoverflow.com/questions/10216937/how-do-i-create-a-help-overlay-like-you-see-in-a-few-android-apps-and-ics

반응형