我有一个按钮,alpha设置为0.5,其可见性在布局中消失了。
<Button
android:id="@+id/Button"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/black_color"
android:alpha="0.5"
android:visibility="gone"/>
在某些时候,我希望让它可见(Button.setVisibility(View.VISIBLE);
),但是当我这样做时 - 它不是半透明的(0.5)。看起来好像alpha设置为1。
答案 0 :(得分:5)
此问题通常是父视图中android:animateLayoutChanges="true"
的结果。原因是设置可见性的布局动画也会更改视图的alpha并覆盖setAlpha
所做的更改。
要解决此问题,您可以从父级移除android:animateLayoutChanges="true"
,也可以创建自定义视图以onVisibilityChanged
设置可见性,如下所示:
public class AlphaView extends View {
private static final String TAG = AlphaView.class.getSimpleName();
public AlphaView(Context context) {
super(context);
}
public AlphaView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public AlphaView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public AlphaView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
protected void onVisibilityChanged(@NonNull View changedView, int visibility) {
super.onVisibilityChanged(changedView, visibility);
if (visibility == VISIBLE) {
setAlpha(0.5f);
}
}
}
答案 1 :(得分:0)
将Button
Gone
设置为Visible
后,添加Button
喜欢:
buttonObject.setAlpha(.5f);
答案 2 :(得分:0)
我也遇到了这个问题。这似乎是Android本身的一个错误。我的解决方案是避免设置可见性,并仅调整alpha。我的观点具有“可见”的可见性。在XML中,并从XML alpha标记值设置为0.0开始。然后,当我希望它可见时,我会以编程方式调整alpha:
dimmerView.setAlpha(.15f);
我通过再次将alpha设置为零来消失它。从理论上讲,您可能需要使用bringToFront调整z轴上的各种视图位置(并且在alpha设置为零时您可能想要删除其侦听器的情况下),但在我的实现中它似乎不是必要的。