2014-03-31 48 views
2

如何將操作欄添加到DialogFragment?我找到了一種按照我們需要的方式設置活動風格的方法,然後將其顯示爲對話框,如下面的鏈接ActionBar in a DialogFragment我需要在適當的DialogFragment上設置操作欄。可能嗎?如何將操作欄添加到DialogFragment?

+0

不,不是。爲什麼你需要特別的'ActionBar'? – adneal

+0

Thanx adneal爲您的興趣,我可以解決我的問題,因爲操作欄可以添加到片段和對話框片段是片段類的子類。 –

+0

有一種方法可以附加工具欄,與工具欄相同。這裏:http://stackoverflow.com/a/38917527/878126 –

回答

4

由於Up ActionBar action on DialogFragment 表明:有沒有辦法的動作條連接到DialogFragment即使你可以設置它不會註冊爲動作條給它的DialogFragment的主題,Dialog.getActionBar()將始終返回null。

但總是有這樣的情況,我真的想使用DialogFragment(其中包含ActionBar樣式)而不是Activity。只需添加一個佈局看起來像一個動作條到DialogFragment的佈局

以下的步驟: 1)DialogFragment佈局:about_dialog.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@color/white" > 

<include android:id="@+id/fake_action_bar" 
    layout="@layout/fake_action_bar_with_backbotton" /> 

2)實現諸如佈局的動作條:fake_action_bar_with_backbotton。 XML

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/fake_action_bar" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:minHeight="?attr/actionBarSize" 
    app:navigationIcon="@drawable/ic_menu_back" 
    android:background="@color/background_material_dark" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

注:@繪製/ ic_menu_back從SDK \平臺\複製Android的21 \ DATA \水庫\繪製,華電國際

3)更新DialogFragment代碼

public class AboutDialogFragment extends DialogFragment { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // use Theme_Holo_Light for full screen 
     // use Theme_Holo_Dialog for not full screen 
     // first parameter: DialogFragment.STYLE_NO_TITLE no title 
     setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Holo_Light_DarkActionBar); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.about_dialog, container, false); 

     // set the listener for Navigation 
     Toolbar actionBar = (Toolbar) v.findViewById(R.id.fake_action_bar); 
     if (actionBar!=null) { 
      final AboutDialogFragment window = this; 
      actionBar.setTitle(R.string.about_title); 
      actionBar.setNavigationOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        window.dismiss(); 
       } 
      }); 
     } 
     return v; 
    } 
} 

希望它可以幫助!