You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中如何通过用户输入修改layout资源的背景颜色?

实现方案

注意:APK编译打包后,res目录下的XML布局文件是只读属性,运行时无法直接修改XML内的配置。你可以直接修改已加载到内存中的布局实例的背景属性,视觉效果和修改XML配置完全一致。

核心修改点

  • 移除你当前AddColor按钮点击事件里的setContentView(R.layout.pickcolor)代码,该代码会重新加载布局,会清空用户已输入的内容,没有实际作用
  • 校验用户输入的十六进制颜色代码合法性,避免格式错误导致崩溃
  • 获取布局实例后直接调用setBackgroundColor方法设置颜色

修改后的完整代码

package com.gade.tabletcolor;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;

public class PickColor extends AppCompatActivity {

    View rootLayout;
    EditText addColor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pick_color);

        ImageButton button = findViewById(R.id.imageBtn11);
        Button AddColor = findViewById(R.id.colorBtn);
        addColor = findViewById(R.id.txtColor);
        // 获取当前Activity的内容根布局,也可以换成你自己布局根节点的id来findViewById
        rootLayout = findViewById(android.R.id.content);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                nextpage();
            }
        });

        AddColor.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String colorStr = addColor.getText().toString().trim();
                // 校验输入是否为空
                if (colorStr.isEmpty()) {
                    Toast.makeText(PickColor.this, "请输入十六进制颜色值", Toast.LENGTH_SHORT).show();
                    return;
                }
                // 兼容不带#的输入
                if (!colorStr.startsWith("#")) {
                    colorStr = "#" + colorStr;
                }
                // 校验颜色格式是否合法
                try {
                    int color = Color.parseColor(colorStr);
                    rootLayout.setBackgroundColor(color);
                    Toast.makeText(PickColor.this, "背景色修改成功", Toast.LENGTH_SHORT).show();
                } catch (IllegalArgumentException e) {
                    Toast.makeText(PickColor.this, "请输入合法的十六进制颜色值", Toast.LENGTH_SHORT).show();
                }
            }
        });

    }

    public void nextpage(){
        Intent intent = new Intent(this,MainActivity.class);
        startActivity(intent);
    }
}

持久化存储说明

如果需要下次打开App依然保留用户设置的背景色,可以把用户输入的合法颜色值存入SharedPreferences,在onCreate方法加载布局后读取存储的颜色值直接设置即可。

内容的提问来源于stack exchange,提问作者Peter Gade Carstensen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:18:04