Android - 隐藏视图

时间:2011-03-08 05:38:47

标签: android transparency relativelayout viewgroup

好的,所以我做了一些环顾四周,我看到你是如何做到这一点的,但对我来说,它只是没有用。

我需要能够在XML和代码中设置RelativeLayout的alpha。对于我的XML,我有以下

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/player_controls"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:alpha="0.0">
    <RelativeLayout
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:id="@+id/player_controls_touch_me"
        >
        </RelativeLayout>
</RelativeLayout>

我收到错误:no resource identifier found for attribute 'alpha' in package 'android'

另外,基于Android文档,我应该可以在任何View对象上调用setAlpha(double),但是当我尝试在RelativeLayout上进行调用时,它告诉我没有为此对象定义此方法。

为什么我无法在Android中控制RelativeLayout对象的Alpha透明度?我错过了什么吗?谢谢!

更新

虽然使用visibility属性可以工作,但它阻止我能够单击ViewGroup。这对我很重要,因为我正在使用ViewGroup的OnTouchListener。

我想要做的是拥有一个带有媒体控件的图层,最初是隐藏的。当用户点击屏幕上的任何内容时,我希望控件淡入,当他们再次点击屏幕时,我希望控件淡出。我有这个部分已经工作了。我正在使用一个视图组,该视图组位于我的整个应用程序之上,并附带一个OnTouchListener,可以确定它是否已被触及。我的问题是,在动画运行淡出控件后,它们会重新出现。如果我使用@Hydrangea建议,我可以让它淡出并立即变得不可见。这给了我想要的效果,但是ViewGroup是不可点击的,用户无法让控件返回(或消失,取决于我们先决定做什么)。

我希望这是有道理的。

7 个答案:

答案 0 :(得分:16)

您需要使用Alpha动画来淡入淡出。这将保持您的布局的触摸事件。这是一个例子

public class Main extends Activity {
/** Called when the activity is first created. */

private boolean mShowing = false;

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

    findViewById(R.id.textview).setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View arg0) {
            if(mShowing){
            Animation animation = new AlphaAnimation(1.0f, 0.0f);
            animation.setFillAfter(true);
            arg0.startAnimation(animation);
            } else {
                Animation animation = new AlphaAnimation(0.0f, 1.0f);
                animation.setFillAfter(true);
                arg0.startAnimation(animation);
            }

            mShowing = !mShowing;
        }

    });
}

}

这是随附的xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:id="@+id/textview"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    android:clickable="true"
    />
</LinearLayout>

答案 1 :(得分:3)

除非你需要0到1之间的alpha级别,否则我建议,如果你真的想让这个项目不可见,那么使用setVisibility();

android:visibility="invisible"

我检查了android:alpha行,我的ide也找不到它。我猜不出为什么,但......文件似乎很清楚。

答案 2 :(得分:3)

alpha 3.0属性是Android 3.0中的新功能,它不是隐藏视图的最有效方式。使用View.setVisibility()或android:visibility来实现您的目标。

答案 3 :(得分:1)

您可以通过设置(背景)颜色来设置alpha。颜色值的格式可以是#aarrggbb(alpha,red,green,blue)。

答案 4 :(得分:1)

您可以在正确答案中添加以下选项:

animation.setDuration(xxx);

到每个动画实例。通过这种方式,您的动画看起来会更好。

答案 5 :(得分:0)

根据您的描述,您应该能够创建一个仅包含相对布局的视图,并将onClickListener设置为它。这样,您可以将相对布局的可见性设置为不可见,但仍会注册单击。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/clickable_layout"
    android:layout_height="match_parent"
    android:layout_width="match_parent" >
    <RelativeLayout
        android:id="@+id/player_controls"
        android:layout_height="match_parent"
        android:layout_width="match_parent" >
        <RelativeLayout
            android:layout_height="match_parent"
            android:layout_width="match_parent"
            android:id="@+id/player_controls_touch_me"
        >
        </RelativeLayout>
    </RelativeLayout>
</FrameLayout>

答案 6 :(得分:0)

onTouchEvent中使用Activity,然后即使“不可见”,您也可以通过触摸事件来控制您的RelativeLayout。