2015-07-29 6 views
9

से स्टेटस बार रंग सेट करें मैं एक ऐप बना रहा हूं जो स्टेटस बार रंग को गतिशील रूप से बदलता है।डायलॉगफ्रैगमेंट

किसी भी खंड से बुलाए जाने पर मुख्य गतिविधि वर्ग में मेरी विधि ठीक काम करती है। टुकड़े गतिविधि पेजर में रखा जाता है:

public void setStatusBarColorIfPossible(int color) { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
     getWindow().setStatusBarColor(color); 
    } 
} 

हालांकि, DialogFragment जो किसी भी टुकड़ा और बनाया फुलस्क्रीन में बन जाता है में, मेरे विधि बुला कोई प्रभाव नहीं है। स्टेटस बार तुरंत काला है (जैसा कि style.xml में सेट है) और मैं इसे बदल नहीं सकता।

public class AddOrEditWeekPlanDialog extends DialogFragment { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setStyle(DialogFragment.STYLE_NORMAL, R.style.MyDialog); 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     Dialog d = getDialog(); 
     if (d!=null){ 
      int width = ViewGroup.LayoutParams.MATCH_PARENT; 
      int height = ViewGroup.LayoutParams.MATCH_PARENT; 
      d.getWindow().setLayout(width, height); 
     } 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View root = inflater.inflate(R.layout.fragment_dialog, container, false); 
     Button button = (Button)root.findViewById(R.id.button); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       ((ThermostatActivity) getActivity()).setStatusBarColorIfPossible(0xFF0D47A1); 
      } 
     }); 

     return root; 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 

    } 
} 

styles.xml:

// Set in manifest for main activity 
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
</style> 

// Set in dialog class 
<style name="MyDialog" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="android:windowIsFloating">false</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
</style> 

resources.xml:

<resources> 
    <color name="colorPrimary">#FFB72020</color> 
    <color name="colorPrimaryDark">#000</color> 
    <color name="textColor">#fff</color> 
    <color name="tabsScrollColor">#fff</color> 
</resources> 

किसी को भी मुझे समझा सकता है क्यों?

उत्तर

11

आदेश setStatusBarColor करने के लिए आप ध्वज स्थापित करने की आवश्यकता में: FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS

"चिह्नित करें यह दर्शाता है कि इस विंडो प्रणाली सलाखों के लिए पृष्ठभूमि ड्राइंग के लिए जिम्मेदार है।" (गूगल एपीआई स्तर 21)

इस कोड का प्रयास करें:

public void setStatusBarColorIfPossible(int color) { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
     getWindow().setStatusBarColor(color); 
    } 
} 
+5

यह संवाद को एनएवी बार के तहत भी सामग्री खींचने का कारण बनता है। BottomSheetDialog का उपयोग करने वालों के लिए, यह विशेष रूप से समस्याग्रस्त है क्योंकि यह आपके संवाद पर नेविगेशन बार बटन रखता है। – Brian

+1

क्या आपको कोई समाधान मिल रहा है? धन्यवाद @ ब्रायन – UserNameYo

0

उपयोग FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS और getDecorView में सूचकांक 0 में बच्चे hight बदल जाते हैं।

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     if (getDialog().getWindow() != null) { 

       // Flag 
       getDialog().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 

       // DeviceScreenHeight 
       WindowManager windowManager = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); 
       DisplayMetrics displayMetrics = new DisplayMetrics(); 
       windowManager.getDefaultDisplay().getMetrics(displayMetrics); 
       int deviceScreenHeight = displayMetrics.heightPixels; 

       // Change height child At index zero 
       ((ViewGroup) getDialog().getWindow().getDecorView().getRootView()).getChildAt(0).getLayoutParams().height = deviceScreenHeight; 

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