如何只更改TextView的背景alpha而不更改整个视图



注意:这可能是重复的帖子。但以前没有任何解决方案对我有效…

我试图从RecyclerView适配器内部设置TextView(仅(背景不透明度(而不是同时设置textColor和background(。上一个问题的答案对我不起作用。

以前建议的输出

案例1:

holder.textView.setBackgroundColor(Color.argb(50, 0,255,0)); //this set alpha to whole view(both background + textColor).

案例2:

holder.textView.setAlpha(50); //this also set alpha to whole view(both background + textColor).

案例3:

holder.textView.getBackground().setAlpha(alpha); //NullPointerException

输出

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.graphics.drawable.Drawable.setAlpha(int)' on a null object reference

这是我的RecyclerView:

...
@RequiresApi(api = Build.VERSION_CODES.O)
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
TextView textView = new TextView(parent.getContext());
return new ViewHolder(textView);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.textView.setAlpha(50);
}
static class ViewHolder extends RecyclerView.ViewHolder {
private TextView textView;
@RequiresApi(api = Build.VERSION_CODES.O)
public ViewHolder(@NonNull View itemView) {
super(itemView);
this.textView = (TextView) itemView;
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
textView.setLayoutParams(layoutParams);
textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
textView.setPadding(4,4,4,4);
textView.setAutoSizeTextTypeUniformWithConfiguration(6,24,1, TypedValue.COMPLEX_UNIT_DIP);
}
}
...

试试这个:

....
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
ShapeDrawable drawable = new ShapeDrawable();
drawable.getPaint().setColor(Color.GREEN); //Your color;
drawable.getPaint().setAlpha(75); //BackGround Alpha between 0 to 100;
holder.textView.setBackground(drawable);
}

最新更新