2013-03-25 71 views
9

我想設置一些視圖,將顯示教程文本的動作欄(如點擊這裏,發送電子郵件...)。這可能嗎?我問,因爲我知道操作欄使用佈局上的頂部空間,而片段或活動使用剩餘空間。
我的第二個問題是如何顯示操作欄上的所有操作項目。我使用ActionBarSherlock庫,我發現我有一個額外的行動項目的空間,但它不顯示在操作欄上。我在xml中設置了ifRoom選項...如何把覆蓋視圖上方的行動酒吧Sherlock

謝謝!!!

+0

我建議你問第二個問題作爲單獨發佈(並從中刪除),因爲它與主題中陳述的問題沒有直接關係。 – vArDo 2013-03-26 13:23:41

回答

23

有多種方法可以實現類似教程的疊加。可能最簡單的方法是使用特殊準備的Dialog窗口,透明背景且沒有變暗。

使用自定義Dialog教程的覆蓋

首先我們要準備爲Dialog內容。在這個例子中,RelativeLayout裏面會有一個TextView,這是這裏最有用的佈局。 info_overlay.xml文件

內容:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:background="@android:color/darker_gray" 
     android:padding="3dp" 
     android:text="TextView" 
     android:textColor="@android:color/white" /> 

</RelativeLayout> 

現在,我們可以用這個佈局來創建我們Dialog

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Dialog overlayInfo = new Dialog(MainActivity.this); 
     // Making sure there's no title. 
     overlayInfo.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     // Making dialog content transparent. 
     overlayInfo.getWindow().setBackgroundDrawable(
       new ColorDrawable(Color.TRANSPARENT)); 
     // Removing window dim normally visible when dialog are shown. 
     overlayInfo.getWindow().clearFlags(
       WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
     // Setting position of content, relative to window. 
     WindowManager.LayoutParams params = overlayInfo.getWindow().getAttributes(); 
     params.gravity = Gravity.TOP | Gravity.LEFT; 
     params.x = 100; 
     params.y = 20; 
     // If user taps anywhere on the screen, dialog will be cancelled. 
     overlayInfo.setCancelable(true); 
     // Setting the content using prepared XML layout file. 
     overlayInfo.setContentView(R.layout.info_overlay); 
     overlayInfo.show(); 
    } 

結果

下面是上述解決方案工作的屏幕截圖。注意TextView超過ActionBar

enter image description here

關於解決

  • 的幾個注意事項如果你有一個專門的按鈕退出教程中,你大概可以使用setCancelable(false)避免教程意外關閉。
  • 該解決方案可與任何動作條解決方案的任何主題(無論是操作系統提供的,Android的支持庫的ActionBar福爾摩斯

其他解決方案/傭工

看看Showcase View library因爲它專注於以簡單的方式創建類似教程的屏幕。但我不確定它是否可以輕鬆地覆蓋操作欄。

+0

我剛看到它..我明天會測試它,但我認爲這是正確的!感謝關於我的問題的全面迴應。 – Jovan 2013-03-27 16:36:18

+0

@Jovan希望它有幫助。請將您的第二個問題關於操作欄中項目的可見性以分開發布。它肯定會得到SO用戶的更多關注。 – vArDo 2013-03-29 10:37:51

+0

@vArDo非常感謝您的解決方案 – RajeshVijayakumar 2013-05-01 07:24:12