Android setColorFilter显示空对象引用
我创建了一个名为btn.xml的布局资源文件,它包含ImageView。 在主活动中,我在content_main.xml中膨胀btn.xml,并尝试设置膨胀视图的背景。但它在一个空对象引用上显示了:Drawable.setColorFilter(int,android.graphics.PorterDuff$Mode)” 在mainActivity中编写java代码:Android setColorFilter显示空对象引用,android,android-drawable,Android,Android Drawable,我创建了一个名为btn.xml的布局资源文件,它包含ImageView。 在主活动中,我在content_main.xml中膨胀btn.xml,并尝试设置膨胀视图的背景。但它在一个空对象引用上显示了:Drawable.setColorFilter(int,android.graphics.PorterDuff$Mode)” 在mainActivity中编写java代码: View v; RelativeLayout rlt; @Override protected void onCreate(B
View v;
RelativeLayout rlt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
LayoutInflater myInflater = (LayoutInflater) getApplicationContext().getSystemService(getApplicationContext().LAYOUT_INFLATER_SERVICE);
v = myInflater.inflate(R.layout.btn,null,false);
// Here is the probelm :
v.getBackground().setColorFilter(Color.parseColor("#00ff00"), PorterDuff.Mode.DARKEN);
rlt = (RelativeLayout) findViewById(R.id.rlt);
rlt.addView(v);
}
content_main.xml布局:
您的线性布局没有任何背景 您可能应该像这样使用setBackgroundColor(int resid):
v.setBackgroundColor(Color.parseColor("#00ff00"));
注意:显式投射膨胀视图更安全。以下是完整的代码:
LinearLayout v;
RelativeLayout rlt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
LayoutInflater myInflater = (LayoutInflater) getApplicationContext().getSystemService(getApplicationContext().LAYOUT_INFLATER_SERVICE);
// Explicit Cast to LinearLayout
v = (LinearLayout) myInflater.inflate(R.layout.btn,null,false);
// setting background:
v.setBackgroundColor(Color.parseColor("#00ff00"));
rlt = (RelativeLayout) findViewById(R.id.rlt);
rlt.addView(v);
}
在btn.xml文件中,如您所见,您没有将任何可绘制设置为视图(linearlayout),因此出现了空对象引用错误
setColorFilter()方法指定一种颜色和Porter-Duff模式作为可绘制的的颜色过滤器
比如,;如果要更改imageview可绘制(或任何视图可绘制)颜色,应使用setColorFilter()方法
imageview.getDrawable().setColorFilter(color, mode);
如果要更改视图的背景色,则应使用setBackgroundColor()方法
view.setBackgroundColor(getResources().getColor(R.color.anycolor));
我编辑了postbtn.xml,它没有背景。为什么您希望getBackground返回非空值?我是android编程新手,所以我该怎么办?我不想改变xml中的背景,但在代码中,你能回答我吗?问题是,你没有背景。因此获取背景显然会返回空值。如果要设置背景,请使用适当的访问器-例如:setBackgroundResource()Resources$NotFoundException:Resource ID#0xff00ff00
setBackgroundResource
将ID作为参数,而不是任意颜色谢谢,它可以工作,但这并不是我想要的结果。我想对以按下模式显示的视图产生一些影响,例如,当我按下视图时,它会变得更暗,以便用户可以看到它确实被按下了。。。。在ImageView上使用setColorFilter(int,android.graphics.PorterDuff$Mode)可以很好地工作