2014-02-23 106 views
1

我想實現一個幫助覆蓋我的應用程序。 它應該是這樣的:How do I create a help overlay like you see in a few Android apps and ICS?覆蓋對話框 - 對齊視圖

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的RelativeLayout顯示在我通過setContentView()設置的現有佈局上。 現在我想在現有佈局的相應視圖附近調整coach_mark.xml的視圖,以便動態地對分辨率和屏幕尺寸做出反應。這是我所嘗試過的:

RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
       RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
     lp.addRule(RelativeLayout.BELOW,R.id.view_of_main_layout); 
     view_of_the_overlay.setLayoutParams(lp); 

但是,視圖只顯示在屏幕中間。 我唯一可以實現的就是將視圖對齊到屏幕底部,但這不是我想要做的。

感謝您的幫助。

回答

1

您可以使用PopupWindow:

PopupWindow popup=new PopupWindow(this); 
popup.setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
popup.setWindowLayoutMode(FrameLayout.LayoutParams.WRAP_CONTENT,FrameLayout.LayoutParams.WRAP_CONTENT); 
popup.setContentView(R.layout.coach_mark); 
View view=findById(R.id.view_of_main_layout); 
int[] viewLocation=new int[2]; 
view.getLocationInWindow(viewLocation) 
popup.showAtLocation(view, Gravity.TOP|Gravity.LEFT, viewLocation[0],viewLocation[1]); 

你也可以調整與最後兩個變量,是X和Y offest彈出位置。他們的價值觀也可能是負面的。

+0

好的我已經試過了,但現在疊加層的視圖只顯示在左下角。 – Gingerbread123321

+0

showAtLocation有4個參數,使用第一個作爲錨點視圖,第二個用於重力,並使用偏移量x和y作爲最終位置。 –

+0

但我用view_of_main_layout作爲錨點。所以如果我不輸入一個特殊的偏移量,彈出窗口應該顯示在錨點的左下角,而不是屏幕上,我是對嗎? – Gingerbread123321