1

我是 Android 开发的新手,所以我正在开发一个简单的应用程序,它隐藏按下某个按钮的 textview,所以在按钮的 OnClick 事件方法的 java 代码中,我将 textview 设置为不可见,我使用了:

textView.setVisibility(1);

因为1是android参考中描述的“不可见”的值,但它不起作用,所以在我使用之后

textView.setVisibility(View.INVISIBLE);

它有效,那么什么时候使用“1”值?以及为什么 View.INVISIBLE = 4 而不是 1 如android参考所说的那样?

在 android 参考中,我可以看到属性 android:visibility 的值 Invisible 定义为 1

4

2 回答 2

3

两者是有区别的。根据Android参考

textView.setVisibility(1);

textView.setVisibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);

如果要隐藏视图,请使用:

textView.setVisibility(View.INVISIBLE);

或者

textView.setVisibility(4);
于 2013-02-18T02:46:52.240 回答
2

这是一个很好的问题,我检查了Android源代码(frameworks/base/core/java/android/view/View.java)

case com.android.internal.R.styleable.View_visibility:
    final int visibility = a.getInt(attr, 0);
    if (visibility != 0) {
          viewFlagValues |= VISIBILITY_FLAGS[visibility]; //here is the key to your question
          viewFlagMasks |= VISIBILITY_MASK;
    }
    break;

这是 VISIBILITY_FLAGS 的内容:

private static final int[] VISIBILITY_FLAGS = {VISIBLE, INVISIBLE, GONE};

数组元素的值其实就是Android Reference中显示的值

/**
     * This view is visible.
     * Use with {@link #setVisibility} and <a href="#attr_android:visibility">{@code
     * android:visibility}.
     */
    public static final int VISIBLE = 0x00000000;

    /**
     * This view is invisible, but it still takes up space for layout purposes.
     * Use with {@link #setVisibility} and <a href="#attr_android:visibility">{@code
     * android:visibility}.
     */
    public static final int INVISIBLE = 0x00000004;

    /**
     * This view is invisible, and it doesn't take any space for layout
     * purposes. Use with {@link #setVisibility} and <a href="#attr_android:visibility">{@code
     * android:visibility}.
     */
    public static final int GONE = 0x00000008;

所以即使你在 manifest 文件中使用 android:invisible,Android 框架最终还是会调用值为 4 的 setVisibility(...)。

于 2013-02-18T03:12:30.620 回答