2016-03-17 8 views
6

के साथ ओवरलैप हो रहा official Guideपूर्णस्क्रीन DialogFragment StatusBar

समस्या है, कि मेरे टूलबार स्थिति पट्टी के साथ ओवरलैप हो और मैं समझ नहीं है कि यह कैसे हल करने के लिए के साथ एक पूर्ण स्क्रीन संवाद बनाया।

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

यदि आप कृपया कर सकते हैं तो अपना 'लेआउट/टूलबार.एक्सएमएल' शामिल करें। –

+0

@AlexTownsend शामिल है, ध्यान देने के लिए धन्यवाद। – Altoyyr

+1

क्या आपकी गतिविधि लेआउट 'fitsSystemWindows =" true "' कहीं भी है? –

उत्तर

2

तरह लग रहा है को हटाने के बाद से StatusBarTransparency को हटाने के बाद StatusBar का पारदर्शिता रंग मैंने पाया, अब स्टेटसबार सफेद होने के बिना पैडिंग जोड़ना संभव है।

मेरे डायलॉगफ्रैगमेंट के RelativeLayout अब ऐसा दिखाई देता है।

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

एप्लिकेशन/src/मुख्य/res/values-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> 

चेतावनी
मैं नेक्सस के अलावा अन्य उपकरणों पर यह परीक्षण नहीं किया 5.

4

मुझे यह सही समस्या थी और इसे हल करने में कामयाब रहा। समस्या लेनदेन में है। मैड (कंटेनर आईडी, टुकड़ा) भाग।

आपने इसे सेट किया है: transaction.add(android.R.id.content, fragment), और यह एंड्रॉइड.R.id.content की सेटिंग है जो ओवरलैप का कारण बन रहा है।

इसके बजाय, इसे कॉलिंग गतिविधि में अभिभावक के सामग्री फ्रेम की आईडी पर सेट करें।

उदाहरण के लिए, मेरे कोड में मुख्य गतिविधि माता पिता लेआउट एक DrawerLayout drawer_layout की आईडी के साथ किया गया था, तो मेरे ठीक

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

सही समाधान –

संबंधित मुद्दे