2016-03-17 18 views
6

stworzyłem okno pełnego ekranu z official GuideFullscreen DialogFragment pokrywa się z StatusBar

Problem polega na tym, że mój pasek nakłada się na pasku stanu, a ja nie mogę dowiedzieć się, jak rozwiązać ten problem.

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(); 
      } 
     }); 
} 
} 

Układ

<?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> 

Toolbar

<?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> 

aktywność tworzenia Dialog

@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

EDIT

Po usunięciu StatusBarTransparency od V21-styles wygląda to enter image description here

+0

Dodaj "layout/toolbar.xml", jeśli możesz. –

+0

@AlexTownsend Jest dołączony, dziękuję za uwagę. – Altoyyr

+1

Czy Twój układ aktywności używa '' fitsSystemWindows = "true" 'gdziekolwiek? –

Odpowiedz

2

Po usunięciu przezroczystość koloru StatusBar Zauważyłem, że teraz można dodać dopełnienie bez paska stanu, który będzie biały.

Teraz mój telefon DialogFragment wygląda następująco: RelativeLayout.

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

app/src/main/RES/wartości-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> 

Ostrzeżenie
nie testowałem tego na innych urządzeniach niż Nexus 5.

4

Miałem ten problem i udało mi się go rozwiązać. Problem występuje w części transaction.add (containerId, fragment).

Masz to ustawione na: transaction.add(android.R.id.content, fragment) i jest to ustawienie dla android.R.id.content, które powoduje nakładanie się.

Zamiast tego ustaw go na identyfikator ramki treści nadrzędnej w działaniu wywołującym.

Na przykład w moim kod główny układ aktywność rodzic był DrawerLayout z id drawer_layout, więc moja poprawka była

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

Mam nadzieję, że to pomaga czy ktokolwiek inny szukając tego rozwiązania.

+0

idealne rozwiązanie –

Powiązane problemy