2016-03-17 163 views
6

重疊我創建了一個全屏幕的對話框與official Guide全屏DialogFragment與狀態欄

的問題是,我的工具欄與狀態欄重疊,我無法弄清楚如何解決這個問題。

DialogFragment

public class CreateAccountDialogFragment extends BaseDialogFragment { 

    @Inject 
    CreateAccountViewModel viewModel; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     //InjectDependencies.... 
     View rootView = createDataBinding(inflater, container); 
     createToolbar(rootView); 

     return rootView; 
    } 

    private View createDataBinding(LayoutInflater inflater, ViewGroup container) { 
     CreateAccountDialogFragmentBinding binding = 
       DataBindingUtil.inflate(inflater, R.layout.create_account_dialog_fragment, container, false); 
     binding.setViewModel(viewModel); 
     return binding.getRoot(); 
    } 

    private void createToolbar(View rootView) { 
     Toolbar toolbar = (Toolbar) rootView.findViewById(R.id.toolbar); 

     // Set an OnMenuItemClickListener to handle menu item clicks 
     toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { 
      @Override 
      public boolean onMenuItemClick(MenuItem item) { 
       if (item.getItemId() == R.id.action_save) { 
        viewModel.createAccount(); 
       } 
       return true; 
      } 
     }); 

     // Inflate a menu to be displayed in the toolbar 
     toolbar.inflateMenu(R.menu.create_account_menu); 
     toolbar.setTitle(R.string.create_account); 
     toolbar.setNavigationIcon(R.drawable.ic_cancel); 

     toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       dialogFragment.dismiss(); 
      } 
     }); 
} 
} 

佈局

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android"> 
    <data> 
     <variable 
      name="viewModel" 
      type="org.altoware.weity.viewmodels.CreateAccountViewModel"/> 
    </data> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@android:color/background_light"> 

     <include layout="@layout/toolbar"/> 

     <LinearLayout 
      android:layout_width="250dp" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" 
      android:orientation="vertical"> 

      <org.altoware.weity.views.BindableEditText 
       android:id="@+id/editTextUsername" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:addTextChangedListener="@{viewModel.onUsernameChanged}" 
       android:hint="Username" 
       android:singleLine="true"/> 

      <org.altoware.weity.views.BindableEditText 
       android:id="@+id/editTextPassword" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:addTextChangedListener="@{viewModel.onPasswordChanged}" 
       android:hint="Password" 
       android:inputType="textPassword" 
       android:singleLine="true"/> 

     </LinearLayout> 
    </RelativeLayout> 

工具欄

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android" 
              xmlns:app="http://schemas.android.com/apk/res-auto" 
              xmlns:tools="http://schemas.android.com/tools" 
              android:layout_width="match_parent" 
              android:layout_height="wrap_content" 
              android:theme="@style/AppTheme.AppBarOverlay" 
              tools:showIn="@layout/activity_login"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:popupTheme="@style/AppTheme.PopupOverlay"/> 

</android.support.design.widget.AppBarLayout> 

活動創建對話框

@Subscribe 
public void showNewAccountDialog(OttoMessages.Login.ShowNewAccountDialog evt) { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    CreateAccountDialogFragment newFragment = 
      new CreateAccountDialogFragment(); 

    boolean isLargeLayout = false; 
    if (isLargeLayout) { 
     newFragment.show(fragmentManager, "dialog"); 
    } else { 
     FragmentTransaction transaction = fragmentManager.beginTransaction(); 
     transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
     transaction.add(android.R.id.content, newFragment) 
       .addToBackStack(null).commit(); 
    } 
} 

Screenshot

編輯

從V21的樣式看起來這 enter image description here

+0

如果可以的話,請包括你的'layout/toolbar.xml'。 –

+0

@AlexTownsend包括在內,謝謝你的注意。 – Altoyyr

+1

您的活動佈局是否在任何地方使用'fitsSystemWindows =「true」'? –

回答

2

取出後取出StatusBarTransparency後我發現StatusBar的透明度顏色,現在可以在沒有狀態欄變白的情況下添加填充。

我的DialogFragment的RelativeLayout現在看起來像這樣。

<RelativeLayout 
     android:paddingTop="24dp" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@android:color/background_light"> 

應用程序/ SRC /主/ RES /值-V21/styles.xml

<resources>> 
     <style name="AppTheme.NoActionBar"> 
      <item name="windowActionBar">false</item> 
      <item name="windowNoTitle">true</item> 
      <item name="android:windowDrawsSystemBarBackgrounds">true</item> 

      <!-- REMOVE THIS LINE 
      <item name="android:statusBarColor">@android:color/transparent</item> 
      --> 
     </style> 
    </resources> 

警告
我沒有比Nexus上的其它設備進行測試此5.

4

我有這個確切的問題,並設法解決它。問題出在transaction.add(containerId,fragment)部分。

您已將它設置爲: transaction.add(android.R.id.content, fragment),並且它是導致重疊的android.R.id.content的設置。

而是將其設置爲調用活動中父級內容框架的標識。

例如,在我的代碼的主要活動父佈局是DrawerLayout,與drawer_layout的ID,所以我定盤

MyDialogFragment fragment = new MyDialogFragment(); 
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
transaction.add(R.id.drawer_layout, frag) 
      .addToBackStack(null).commit(); 

我希望它可以幫助你或其他人尋找這種解決方案。

+0

完美的解決方案 –

相關問題