相关文章推荐
深情的可乐  ·  Android ...·  1 月前    · 
才高八斗的茶叶  ·  android ...·  1 月前    · 
不要命的汉堡包  ·  WebView全面解析 ·  1 月前    · 
阳刚的硬盘  ·  Android TabLayout ...·  1 月前    · 
沉着的水桶  ·  js map 添加元素-掘金·  1 年前    · 
重感情的黄花菜  ·  kubernetes - ...·  1 年前    · 

.setText(" text ")在android studio中不能正常工作。

1 人关注

我是安卓开发的新手,我想创建一个将光明模式转换为黑暗模式的应用程序,我有一个名为启用黑暗模式的按钮,我想在我按下该按钮时启用黑暗模式,我将黑暗模式打开,但我也想在点击按钮后将按钮中的文字改为启用光明模式。当我使用 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。

1 个评论
我在这里找到了更好的解释 geeksforgeeks.org/…
android
android-studio
settext
Aviroxi
Aviroxi
发布于 2021-02-07
2 个回答
Atick Faisal
Atick Faisal
发布于 2021-02-07
已采纳
0 人赞同

我认为,当主题改变时,应用程序的生命周期会重新设置。你可以使用一个生命周期感知的状态变量来跟踪主题状态。

你可以阅读更多关于它的内容 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);
    
Lalit Fauzdar
Lalit Fauzdar
发布于 2021-02-07
0 人赞同

我对此事的看法。

你没有显示出将其改为灯光模式,我相信这将反映出同样的行为。

发生的情况是,当你使用 setDefaultNightMode() 改变默认模式时,它在这一行被执行的那一刻重新创建了活动,这意味着你的代码在改变默认模式时从未到达第二行 setText() ,正如下面附图中写的那样。你可以在这里进一步阅读 官方文件 .

但是,当模式已经被改变时,第一行的 setDefaultNightMode() 没有任何作用,因为模式已经被改变,这导致第二次改变文本,这意味着要改变文本,要么应该有一个回调机制,要么你必须在改变模式之前改变文本。

此外,你可以在活动重新启动和创建时获得当前的模式,并根据当前的模式设置文本,这绝对是一个好办法。

因此,要检查关于行动力创造或娱乐的模式,你可以这样做。

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