67

私は事実上ボタンであるビューを持っています。XML レイアウト (add_new.xml) は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <Button
        android:id="@+id/buttonNew"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/bText" 
        android:onClick="addNew"/>
</LinearLayout>

このように可視性をGONEに設定すると

v = getActivity().getLayoutInflater().inflate(R.layout.add_new, null);
v.setVisibility(View.GONE);

消えますが、まだスペースを占有しています。このような:ここに画像の説明を入力

このボタンは、次のListViewxml で定義される のヘッダーです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/porno" >

    <ImageView
        android:id="@+id/icon"
        android:layout_width="30dp"
        android:layout_height="40dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="4dp"
        android:src="@drawable/ic_launcher">
    </ImageView>

    <TextView
        android:id="@+id/label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@+id/label"
        android:textSize="20dp" >
    </TextView>

</LinearLayout> 

また、可視性が GONE に設定されているときに、追加のリスト項目を占有したくありません。ドキュメントに記載されているとおりです。

GONE - このビューは非表示で、レイアウトのためにスペースを取りません。

スペースを占有しないようにする方法についてのアイデアはありますか?

ありがとう、デニスxx

PS私のリストビューはFoldersFragmentの中にありListFragment、これはFoldersFragmentが表示される私のMainActivityのxmlです

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <fragment
        android:id="@+id/foldersFragment"
        android:layout_width="200dip"
        android:layout_height="match_parent"
        class="com.example.fragments.FoldersFragment" >
    </fragment>

    <fragment
        android:id="@+id/detailFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.example.fragments.DetailFragment" >
    </fragment>

</LinearLayout>
4

16 に答える 16

52

私の意見では、これは Android のバグです。次のようにしてこの問題を修正します。

<FrameLayout android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout android:id="@+id/layout_to_hide"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content">
         //Put here your views
    </LinearLayout>
</FrameLayout>

ID LAYOUT_TO_HIDE で LinearLayout を非表示にするだけでVisible.GONE、ルート FrameLayout がその高さを折りたたんで、空白以外のヘッダーで「非表示」になります。

于 2013-12-26T14:20:29.033 に答える
10

これを行うことにより、アイテムを非表示にする場所に設定layout_widthしますlayout_height0

//if item's parent layout is LinearLayout, change according to your item xml
holder.itemView.setLayoutParams(new LinearLayout.LayoutParams(0,0));
于 2017-05-28T11:52:20.417 に答える
9

このスレッドのすべての返信は、コストがかかる新​​しいラッパー ビューを提案しています。ビューを完全に非表示にする正しい方法は、マージンを 0 に設定し、可視性をGONEに設定することです。このコード サンプルでは、​​非表示にしようとしているビューはcardViewです。cardViewの直接の親は RecyclerView です。そのため、RecyclerView.LayoutParams を使用しています。正しいレイアウト パラメータに置き換えることを忘れないでください。

if (cardView.getVisibility() != GONE) {
    cardView.setVisibility(GONE);
    RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) cardView.getLayoutParams();
    layoutParams.setMargins(0, 0, 0, 0);
    cardView.setLayoutParams(layoutParams);
}
于 2016-08-19T18:29:00.983 に答える
4

これがまだ必要な場合は、対処するための優れた方法があります。

parentView.removeView(childView);

ここに例があります:

final WhatEverLayout parentView, childView;
parentView = (WhatEverLayout)findViewById(R.id.parentView_xml);
childView =(WhatEverLayout)findViewById(R.id.childView_xml);
parentView.removeView(childView);
于 2013-12-26T14:13:54.123 に答える
2

これが私の解決策です。「special.xml」という名前の新しいレイアウト ファイルを作成し、コードをファイルにコピーします。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
    android:visibility="gone">

</LinearLayout>

条件を使用して、newview 内の空のレイアウトを膨張させます。view.setVisibility(View.GONE);を使用しないでください。.

if(true){
  view=mInflater.inflate ( R.layout.special,parent, false );
}else{
  view=mInflater.inflate(R.layout.normal,parent,false);
  // The view that you want to be visible
}
于 2015-09-25T06:44:10.253 に答える
2

あなたができることは、ifステートメントを設定することです。可視性を「GONE」に設定する条件がいつでも、ビューをラップコンテンツとして設定すると、スペースが解放されます。

于 2013-10-12T22:15:42.743 に答える
-5

これはバグではないと思います.GONEを使用して、空のスペースを消すだけです。CSS は同じことを行います。display: block対を試してくださいvisibility: hidden

于 2015-06-10T20:40:17.247 に答える