动态更改View对象的属性

时间:2015-03-06 17:31:12

标签: android android-layout view layout-inflater

在我的活动创作中,我设置了AlphaAnimation以执行一些视觉效果。现在我设置了LayoutAnimationListener并覆盖了onAnimationEnd()方法。动画正确执行,并且onAnimationEnd()的回调也正常。在onAnimationEnd()方法中,我想在Activity的布局的两个子对象上执行另一个动画。这两个EditText是在XML中使用属性android:visibility="gone"定义的。对于初学者,我想要做的是将它们设置为VISIBLE

我尝试从parent获取引用,更改其setVisibility(View.VISIBLE);,最后使父视图无效。

此尝试似乎不起作用。您将在下面找到以下代码:

@Override
        public void onAnimationEnd(Animation animation) {
            Log.d(TAG, "onAnimationEnd()");
            // TODO move icon up, make edittext's appear.

            RelativeLayout layout = (RelativeLayout) View.inflate(
                    getApplicationContext(), R.layout.splash_dialog_layout,
                    null);
            LinearLayout linear = (LinearLayout) layout.getChildAt(0);
            Log.d(TAG, "Children" + linear.getChildCount());

            email = (EditText) linear.findViewById(R.id.splash_Email);
            email.setVisibility(View.VISIBLE);

            pass = (EditText) linear.findViewById(R.id.splash_password);
            pass.setVisibility(View.VISIBLE);

            linear.invalidate();
            layout.invalidate();

            Splash_Activity.layout.invalidate();
        }
    };

我尝试从父级中删除AllViews并逐个添加并再次失效,但这似乎也无效。

对于我来说,如果看来通货膨胀如何运作,可能会产生误解吗?

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

对布局进行膨胀会创建一个新的视图层次结构,这意味着您获得的视图实际上与屏幕上显示的视图不同,即使它们具有相同的ID。

您可以通过多种方式获取屏幕视图,但最简单的方法可能是查询包含Activity的内容。

Activity.this.findViewById(R.id.splash_Email);
相关问题