我们如何在Android中以编程方式隐藏包含布局?

时间:2014-11-20 05:27:27

标签: android android-layout

我必须在我的应用程序中包含一个布局。所以我用过

<include
    android:id="@+id/support_layout"
    android:width="match_parent"
    android:height="match_parent"
    layout="@layout/support"/>

我使用View在我的java文件中引用了这个包含标记。

View v = (View) findViewById(R.id.support_layout);

但是在我的代码的某些方面我必须隐藏这个布局。 所以我使用 v.GONE

但它不是隐藏。 我想以编程方式引用XML中的那些文本和按钮属性。 我怎么能这样做?

有我的support.xml:

<LinearLayout
    android:id="@+id/support_layout"
    android:width="match_parent"
    android:height="match_parent">

    <TextView
        android:id="@+id/txt"
        android:width="match_parent"
        android:height="wrap_content"/>

    <Button
        android:id="@+id/btn" 
        android:width="match_parent"
        android:height="wrap_content"
        android:text="Button"/>

</LinearLayout>

6 个答案:

答案 0 :(得分:14)

我们需要看到您隐藏{1}}的实际实施情况。

但是,直接阅读你的问题,我认为你可能会以错误的方式做到这一点。

要隐藏或隐藏视图,请使用以下命令:

View

请记住,这并不能完全删除视图;它仍会保留在你的布局中,你可以得到它的引用,甚至试图操纵它。

要完全删除它,请改用:

yourView.setVisibility(View.INVISIBLE);

现在,如果你调用它,你的视图将被完全从布局中删除。您将无法再获得对它的引用。

答案 1 :(得分:9)

将该视图放入线性布局并隐藏线性布局。它会起作用。

<LinearLayout
android:id="@+id/support_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

<include
    layout="@layout/support"
    android:height="match_parent"
    android:width="match_parent" /> </LinearLayout>

不要忘记编写Linearlayout而不是View。

简而言之,而不是

View v = (View) findViewById(R.id.support_layout);

这样做

LinearLayout v = (LinearLayout) findViewById(R.id.support_layout);

答案 2 :(得分:3)

你可以隐藏这个&#34;包含&#34;调用setVisibility()的布局:

v.setVisibility(View.GONE)

稍后通过调用显示它:

v.setVisibility(View.VISIBLE)

要从支持布局引用按钮和文本视图,您可以在随附的视图中使用findViewById方法(我不确定,但我认为它甚至不是强制性的,您可以直接在您的活动中调用它&#39 ; s观点):

View supportLayout = (View) findViewById(R.id.support_layout);
Textview txv = (TextView) findViewById(R.id.txt);
Button btn = (Button) findViewById(R.id.btn);

(如果它不起作用请尝试:按钮btn =(按钮)supportLayout.findViewById(R.id.btn);)

- 仅供参考 -

当你为attributs添加标签时override ones of the included layout(有support_layout LinearLayout),所以你不需要这样做

答案 3 :(得分:3)

由于 <include/> 不是 android 中的 View 类型,而 visibilityView 的属性,因此我们无法从包含的布局引用中访问可见性。

但是,如果您将 kotlin 与视图绑定一起使用,我们可以获得包含布局的根引用,例如 binding.supportLayout.root,它可能是 View (ConstraintLayout, RelativeLayout, LinearLayout etc.) 之一

现在我们有了视图的引用意味着我们可以像下面的代码一样使用它们的可见性。

binding.supportLayout.root.visibility = View.GONE

希望你有这个想法。

答案 4 :(得分:0)

感谢新的 ConstraintLayout。 这就是我如何使用 widget.Group

    <include
        android:id="@+id/bottom_bar_action"
        layout="@layout/bottom_bar_back_action"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

    <androidx.constraintlayout.widget.Group
        android:id="@+id/bottom_bar_group"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:constraint_referenced_ids="bottom_bar_action" />

然后您可以通过执行 binding.bottomBarGroup.visibility = View.GONE 来隐藏包含布局。干杯

答案 5 :(得分:0)

您必须像这样使用 includedLayoutId.viewId.visibility = View.GONE 在这种情况下您可以访问包含的视图,例如:

loading.xml

<com.airbnb.lottie.LottieAnimationView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/loading"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:lottie_autoPlay="true"
    app:lottie_fileName="loading.json"
    app:lottie_loop="true" />

在 fragment_a.xml 中:

 <include layout="@layout/loading"
            android:id="@+id/anim_loading"
            android:layout_width="match_parent"
            android:layout_height="@dimen/_80sdp"/>

最后使用它animLoading.loading.visibility = View.GONE