.setText(" text ") 在 android studio 中无法正常工作
.setText(" text ") is not working properly in android studio
我是 android 开发的新手 我想创建一个将浅色模式转换为深色模式的应用程序 我有一个名为启用深色模式的按钮 我想在按下该按钮时启用深色模式,我打开了暗模式,但我还想在单击按钮后更改按钮中的文本以启用亮模式。当我使用 setText()
方法更改 onclick
方法中的文本时
只有当我按下按钮 2 次时,框中的文本才会改变,但我希望文本在第一次按下按钮后立即改变
这是我的 java 代码
public class MainActivity extends AppCompatActivity {
private Button darkmode;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
darkmode = (Button) findViewById(R.id.darkmodebutton);
darkmode.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
darkmode.setText("enable light mode");
}
});
}
}
谁能帮帮我,拜托
这是应用程序的行为 我制作了一个 gif
我认为应用程序生命周期会在主题更改时重置。您可以使用生命周期感知状态变量来跟踪主题状态。
您可以阅读更多相关信息 here。
Boolean isLightThemeEnabled = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
theme = savedInstanceState.getString("THEME_KEY");
}
// YOUR USUAL CODE
// MAKE SURE TO UPDATE THE THEME STATE VARIABLE
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
if(!isLightThemeEnabled) {
darkmode.setText("enable light mode");
}
else {
.....
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putString("THEME_KEY", isLightThemeEnabled);
super.onSaveInstanceState(outState);
}
我对此的看法:
您没有显示将其更改为光模式,我相信这会反映出相同的行为。
当您使用 setDefaultNightMode()
更改默认模式时,会在执行此行的那一刻重新创建 activity,这意味着您的代码永远不会到达第二行 setText()
当它更改默认模式时,如下图所示。您可以在 official docs.
中进一步阅读
但是,当模式已经改变时,第一行 setDefaultNightMode()
什么都不做,因为模式已经改变,导致第二次改变文本,这意味着改变文本,要么应该有一个回调机制,或者你必须在更改模式之前更改文本。
此外,您可以在 activity 重新启动和创建时获取当前模式,并根据当前模式设置文本,这绝对是首选。
因此,要检查 Actvity 创建或娱乐模式,您可以这样做:
int currentNightMode = getResources().getConfiguration().uiMode
& Configuration.UI_MODE_NIGHT_MASK
when(currentNightMode) {
Configuration.UI_MODE_NIGHT_NO ->
// Night mode is not active, we're in day time
Configuration.UI_MODE_NIGHT_YES ->
// Night mode is active, we're at night!
Configuration.UI_MODE_NIGHT_UNDEFINED ->
// We don't know what mode we're in, assume notnight
}
并根据上述情况设置按钮的文本。
你的回答让我读到了我也想实现的这个,我找到了一篇很好的文章,从中引用了代码,阅读这里 -
DayNight — Adding a dark theme to your app
我是 android 开发的新手 我想创建一个将浅色模式转换为深色模式的应用程序 我有一个名为启用深色模式的按钮 我想在按下该按钮时启用深色模式,我打开了暗模式,但我还想在单击按钮后更改按钮中的文本以启用亮模式。当我使用 setText()
方法更改 onclick
方法中的文本时
只有当我按下按钮 2 次时,框中的文本才会改变,但我希望文本在第一次按下按钮后立即改变
这是我的 java 代码
public class MainActivity extends AppCompatActivity {
private Button darkmode;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
darkmode = (Button) findViewById(R.id.darkmodebutton);
darkmode.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
darkmode.setText("enable light mode");
}
});
}
}
谁能帮帮我,拜托 这是应用程序的行为 我制作了一个 gif
我认为应用程序生命周期会在主题更改时重置。您可以使用生命周期感知状态变量来跟踪主题状态。
您可以阅读更多相关信息 here。
Boolean isLightThemeEnabled = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
theme = savedInstanceState.getString("THEME_KEY");
}
// YOUR USUAL CODE
// MAKE SURE TO UPDATE THE THEME STATE VARIABLE
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
if(!isLightThemeEnabled) {
darkmode.setText("enable light mode");
}
else {
.....
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putString("THEME_KEY", isLightThemeEnabled);
super.onSaveInstanceState(outState);
}
我对此的看法:
您没有显示将其更改为光模式,我相信这会反映出相同的行为。
当您使用 setDefaultNightMode()
更改默认模式时,会在执行此行的那一刻重新创建 activity,这意味着您的代码永远不会到达第二行 setText()
当它更改默认模式时,如下图所示。您可以在 official docs.
但是,当模式已经改变时,第一行 setDefaultNightMode()
什么都不做,因为模式已经改变,导致第二次改变文本,这意味着改变文本,要么应该有一个回调机制,或者你必须在更改模式之前更改文本。
此外,您可以在 activity 重新启动和创建时获取当前模式,并根据当前模式设置文本,这绝对是首选。
因此,要检查 Actvity 创建或娱乐模式,您可以这样做:
int currentNightMode = getResources().getConfiguration().uiMode
& Configuration.UI_MODE_NIGHT_MASK
when(currentNightMode) {
Configuration.UI_MODE_NIGHT_NO ->
// Night mode is not active, we're in day time
Configuration.UI_MODE_NIGHT_YES ->
// Night mode is active, we're at night!
Configuration.UI_MODE_NIGHT_UNDEFINED ->
// We don't know what mode we're in, assume notnight
}
并根据上述情况设置按钮的文本。
你的回答让我读到了我也想实现的这个,我找到了一篇很好的文章,从中引用了代码,阅读这里 - DayNight — Adding a dark theme to your app