在 Android 中更改 TextView 的不透明度

Posted

技术标签:

【中文标题】在 Android 中更改 TextView 的不透明度【英文标题】:Changing TextView Opacity in Android 【发布时间】:2012-02-08 10:59:55 【问题描述】:

所以我试图在我的 android 应用程序中动态更改 TextView 的不透明度。我有一个seekbar,当我将拇指向右滑动时,我在它下面分层的TextView 应该开始变得透明。当拇指到达seekbar 的大约一半时,文本应该是完全透明的。我试图在我的TextView 上使用从View 继承的setAlpha(float) 方法,但Eclipse 告诉我setAlpha() 未定义TextView 类型。我是否以错误的方式调用该方法?还是有其他方法可以改变不透明度?

这是我的代码(classicTextTextViewgameSelectorseekbar):

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch)
    classicText.setAlpha(gameSelector.getProgress());

【问题讨论】:

【参考方案1】:

我认为这是一种以编程方式为 TextView 设置 alpha 或不透明度的简单方法。 通过在 textView 的 getTextColors 之后使用函数 withAlpha

// alpha value between 0..255
// 0 for transparent
classicText.setTextColor(classicText.textColors.withAlpha(100))

【讨论】:

【参考方案2】:

现在XML上有一个属性

android:alpha="0.5"

通过布局改变不透明度

【讨论】:

【参考方案3】:

可能已经晚了,但如果有人现在正在寻找这个,你所要做的就是:

textView.setAlpha();

在括号中输入 0 到 1 之间的数字

【讨论】:

【参考方案4】:

这对我有用:

1.创建类AlphaTextView.class

public class AlphaTextView extends TextView 

  public AlphaTextView(Context context) 
    super(context);
  

  public AlphaTextView(Context context, AttributeSet attrs) 
    super(context, attrs);
  

  public AlphaTextView(Context context, AttributeSet attrs, int defStyle) 
    super(context, attrs, defStyle);
  

  @Override
  public boolean onSetAlpha(int alpha) 
  
    setTextColor(getTextColors().withAlpha(alpha));
    setHintTextColor(getHintTextColors().withAlpha(alpha));
    setLinkTextColor(getLinkTextColors().withAlpha(alpha));
    getBackground().setAlpha(alpha);
    return true;
      

2. 添加这个而不是使用 TextView 在您的 xml 中创建一个 textview:

...
   <!--use complete path to AlphaTextView in following tag-->
   <com.xxx.xxx.xxx.AlphaTextView
         android:layout_
         android:layout_
         android:text="sample alpha textview"
         android:gravity="center"
         android:id="@+id/at"
         android:textColor="#FFFFFF"
         android:background="#88FF88"
        />
...

3. 现在您可以在活动中使用此文本视图,例如:

at=(AlphaTextView)findViewById(R.id.at);

at.onSetAlpha(255); // To make textview 100% opaque
at.onSetAlpha(0); //To make textview completely transperent

【讨论】:

我用它的一个变体来改变文本的阿尔法而不改变背景阿尔法,谢谢!【参考方案5】:

方法改为跟随

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch)

    classicText.setAlpha((float)(gameSelector.getProgress())/(float)(seekBar.getMax()));

【讨论】:

这对 AFAIK 不起作用。我已经尝试过了。TextView 没有名为 setAlpha() 的方法。在回答之前检查一下! 检查方法developer.android.com/reference/android/view/… 这是正确的参考,但你不能直接在你的 Eclipse 中使用这种方法来进行 textview 或查看。请检查你自己。相反,你需要自定义 textview,然后在你的应用程序。 我会,等我有空的时候,但如果是的话,可能是由于TextView有一个额外的属性,所以textview本身的改变可能不会生效,在这种情况下,我们需要设置文本颜色,通过获取 rgb 和 alpha 分量并在 setTextColor 方法中设置新的 alpha。 是的......这是真的!但毕竟,我们需要使用自定义类来使代码和方法更容易!【参考方案6】:

你可以像这样设置 alpha

int alpha = 0;
((TextView)findViewById(R.id.t1)).setTextColor(Color.argb(alpha, 255, 0, 0));

作为您从搜索栏获得的 alpha 值,将设置为文本颜色

【讨论】:

【参考方案7】:

View.setAlpha (float xxx);

xxx - 0 - 255 的范围,0 为透明,255 为不透明。

int progress = gameSelector.getProgress();
int maxProgress = gameSelector.getMax();
float opacity = (progress / maxProgress)*255;
classicText.setAlpha(opacity);

【讨论】:

以上是关于在 Android 中更改 TextView 的不透明度的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中更改 TextView 的 fontFamily

在 Android 中,如何从 AsyncTask 更改 TextView? [复制]

使用 spannableString 在 android 中更改 TextView 文本的颜色

更改 android studio 中的 textview 样式

在方向更改上保存 TextView 的设置 - Android?

从android中的对话框更改TextView文本