gpt4 book ai didi

android - 从 DialogFragment 设置状态栏颜色

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:25:43 26 4
gpt4 key购买 nike

我正在创建一个动态更改状态栏颜色的应用程序。

我在主 Activity 类中的方法在从任何 fragment 调用时都能正常工作。 fragment 放在 Activity 寻呼机中:

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

但是,在任何 fragment 中创建并全屏的DialogFragment中,调用我的方法没有效果。状态栏立即变黑(在 styles.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();

}
}

样式.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>

资源.xml:

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

谁能告诉我为什么?

最佳答案

为了设置 StatusBarColor,您需要设置标志:FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS

“表示该窗口负责为系统栏绘制背景的标志。” (谷歌 API 级别 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);
}
}

关于android - 从 DialogFragment 设置状态栏颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31700645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com