gpt4 book ai didi

java - onCreate() 之后以编程方式更改主题

转载 作者:行者123 更新时间:2023-12-02 12:07:15 25 4
gpt4 key购买 nike

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_create: //run NoteActivity in new note mode
startActivity(new Intent(this, NoteActivity.class));
break;
case R.id.action_theme:
setTheme(R.style.Theme2);
setContentView(R.layout.activity_main);
Intent i = getIntent();
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);

// TODO: show settings activity

break;
}

return super.onOptionsItemSelected(item);
}

我的 Activity 顶部有一个菜单项。我想用它来改变主题时按下。我想在用户启动程序后执行此操作,并且最终将用于循环显示一堆不同的主题!现在我只想让它与一个人一起工作。我怎样才能做到这一点?

我的回答

主要 Activity

SharedPreferences pref;
SharedPreferences.Editor editor;
int check;
int newcheck;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

pref = getApplicationContext().getSharedPreferences("test", Context.MODE_PRIVATE);
check = pref.getInt("x", 0);
if(check == 0){
setTheme(R.style.AppTheme);
}else{
setTheme(R.style.Theme2);
}

setContentView(R.layout.activity_main);
noteActivity = new NoteActivity();
mListNotes = (ListView) findViewById(R.id.main_listview);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {
case R.id.action_create: //run NoteActivity in new note mode
startActivity(new Intent(this, NoteActivity.class));
break;
case R.id.action_theme:
pref = getApplicationContext().getSharedPreferences("test", Context.MODE_PRIVATE);
editor = pref.edit();
newcheck = pref.getInt("x",0);
if(newcheck == 0) {
newcheck = 1;
}else if(newcheck == 1){
newcheck = 0;
}
editor.clear();//clears the editor to avoid errors
editor.putInt("x",newcheck);//add in new int
editor.commit();//commit

//restart the activity
Intent i = getIntent();
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();//close activity - avoid crash
startActivity(i);//start activity

//TODO show settings activity
break;
}
return super.onOptionsItemSelected(item);
}

最佳答案

据我了解您的问题,您可能会考虑考虑采用父Activity并在其中设置Fragment,以便您可以更改主题您的 Fragment 的其中更改主题的控制来自您的父 Activity。因此,您可以通过以下方式实现此行为。

  • Activity 中获取一个 Fragment 容器,并在 ActivityonCreate 函数中启动该容器中的 Fragment.
  • 由于您有一个菜单选项按钮来决定要在 Fragment 中部署哪个主题,因此您可能会考虑通过执行另一个 fragment 事务来再次替换您的 Fragment。单击菜单选项。
  • 您可以考虑将选定的主题保存在 SharedPreferences 中,以便每次 Fragment 启动时,您都可以通过在 onCreateView< 中设置主题来正确设置主题从 SharedPreferences 读取所选主题后,您的 Fragment 的/code> 函数。

现在,如果您正在考虑如何在 Fragment 中设置主题,那么 this post在这方面可能会帮助你。为了您的方便,我从那里复制代码。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

// create ContextThemeWrapper from the original Activity Context with the custom theme
final Context contextThemeWrapper = new ContextThemeWrapper(getActivity(), R.style.yourCustomTheme);

// clone the inflater using the ContextThemeWrapper
LayoutInflater localInflater = inflater.cloneInContext(contextThemeWrapper);

// inflate the layout using the cloned inflater, not default inflater
return localInflater.inflate(R.layout.yourLayout, container, false);
}

我希望你已经明白了。如果您还有其他需要澄清的地方,请告诉我。

关于java - onCreate() 之后以编程方式更改主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46817166/

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