如何在android中使一组视图不可见

时间:2016-03-11 12:47:17

标签: android

我试图创建一组视图(包含多个文本视图和按钮 - 全部在不同的父布局,但在同一个活动中)不可见如果特定条件被评估为假。

这样做的传统方法是:

findViewById(R.id.myview).setVisibility(View.INVISIBLE);

我的问题是,我是否必须逐一为所有观点执行此操作,我希望它们不可见,然后在我希望它们可见时将它们切换回来? 或者,有没有办法避免代码重复?

3 个答案:

答案 0 :(得分:3)

如果View位于不同的父级,则无法直接执行,但如果您愿意,可以实施一种方法来更改一堆View的可见性保持代码清洁:

List<View> relatedViews = new ArrayList<>();

// ...

relatedViews.add(view1);
relatedViews.add(view2);
relatedViews.add(view3);

// ...

changeVisibility(relatedViews, View.INVISIBLE);

// ...

private void changeVisibility(List<View> views, int visibility) {
    for (View view : views) {
        view.setVisibility(visibility);
    }
}

作为旁注,您可能希望将展示次数更改为View.GONE而不是View.INVISIBLE,因此它不会占用布局中的任何空间。

答案 1 :(得分:1)

你可以使用这样的东西。这不是最优雅的解决方案,但有效。

这个想法是为每个视图提供您要隐藏相同内容的描述,因为在相同的布局中,您不能对多个视图使用相同的ID。使用相同的内容描述,您可以在布局中找到所有视图并隐藏它们。 这是一个将第一个布局视为线性的示例。你可以明显改变;)

public class TestActivity extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_test);

            LinearLayout rootLayout = (LinearLayout)findViewById(R.id.rootLayout);

            int childcount = rootLayout.getChildCount();
            for (int i=0; i < childcount; i++){
                View v = rootLayout.getChildAt(i);
                if(v.getContentDescription() != null && v.getContentDescription().equals("invisibleView")){
                    v.setVisibility(View.INVISIBLE);
                   //I suggest you to use GONE instead of INVISIBLE to remove the space of the view
                }
            }

        }
}
你的xml中的

给你想隐藏这个属性的对象

android:contentDescription="invisibleView"

答案 2 :(得分:0)

使用varargs方法显示或隐藏多个视图。

例如,如果您有view1,view2 .....等视图

然后只需致电setVisibility(View.VISIBLE,view1,view2)

public static void setVisibility(int visibility, View... views){
    for (View view : views){
       view.setVisibility(visibility);
    }
}