Android 以编程方式更改按钮的文本颜色

Android change text color of button programmatically

我在 linearlayout horizo​​ntalscrollview 中动态创建按钮,单击时我得到选定的按钮位置。

我想知道如何更改所选按钮的文字颜色?

这是我的代码。

String[] categories = {"SUN","MON", "TUS", "WED", "THU", "FRI", "SAT", "SUN","MON", "TUS", "WED", "THU", "FRI", "SAT"};
private LinearLayout ll;
Button btn;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ll = (LinearLayout) findViewById(R.id.hsvLinearLayout);

    for(int i = 0; i < categories.length; i++) {
        btn = new Button(this);
        btn.setText(categories[i]);
        btn.setBackgroundColor(Color.parseColor("#ffffff"));
        btn.setOnClickListener(buttonClick);
        ll.addView(btn);
        int idx = ll.indexOfChild(btn);
        btn.setTag(Integer.toString(idx));
       // btn.setId(idx);
    }
}

OnClickListener buttonClick = new OnClickListener() {
    public void onClick(View v) {
        String idxStr = Integer.toString(ll.indexOfChild(v));
        //(String)v.getTag();
        Toast.makeText(MainActivity.this, idxStr, 6000).show();
    }
};

试试这个

已编辑答案

 ((Button)view).setTextColor(Color.parseColor("#000000"));

检查类型并指定文本颜色

 OnClickListener buttonClick = new OnClickListener() {
        public void onClick(View v) {
            String idxStr = Integer.toString(ll.indexOfChild(v));
            if(v instanceof Button){
               ((Button)v).setTextColor(Color.parseColor("#000000"));
            }
            Toast.makeText(MainActivity.this, idxStr, 6000).show();
        }
    };

请检查以下答案here and here .

如您所见,您可以通过 xml 为按钮的所有状态创建一个样式文件,以编程方式完成此操作。

希望对您有所帮助

这个有效:

button.setTextColor(getColor(R.color.blue))

我只是检查所有已经发布的解决方案。没有人工作。

他们也生产error这样

btnjava.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setTextColor(int)' on a null object reference

Real Solution :

Step-1: When you try to change setTextColor then always use try/catch, to prevent app from Crash.

Step-2: No matter you define your Button already, define(like R.id.btnId) again before setTextColor code line.

public class MainActivity extends AppCompatActivity {
        Button btn;

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

            btn=findViewById(R.id.btnId);
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // use try/catch for handle any kind of error
                    try {
                        Button btnForTextColorChange= (Button) findViewById(R.id.btnId);
                        // must define Button again before setTexColor code line
                        btnForTextColorChange.setTextColor(getResources().getColor(R.color.white));
                    } catch (Exception e){
                        Log.e(TAG, "Error:"+e);
                    }
                    
                }
            });
    }

[抱歉英语不好]

快乐编码:)

这对我有用:

btnItem.setTextColor(ContextCompat.getColor(context, R.color.black))