事実上ボタンであるビューがあります。 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);
消えますが、それでもスペースを占有します。このような:
このボタンはListView
のヘッダーで、このxmlで定義されます:
<?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
追伸私のリストビューは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>
これは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を非表示 with Visible.GONE
その後、ルートFrameLayoutはその高さを折りたたむと、非空白スペースヘッダーを持つ「非表示」になります。
layout_width
およびlayout_height
を、アイテムを非表示にする0
に設定して、これを実行します
//if item's parent layout is LinearLayout, change according to your item xml
holder.itemView.setLayoutParams(new LinearLayout.LayoutParams(0,0));
このスレッドのすべての返信は、新しいラッパービューを提案していますが、これにはコストがかかります。ビューを完全に非表示にする正しい方法は、可視性を[〜#〜] gone [〜#〜]に設定しながらマージンを0に設定することです。このコードサンプルでは、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);
}
これがまだ必要な場合、それに対処するための素晴らしい方法があります:
parentView.removeView(childView);
ここに例を示します:
final WhatEverLayout parentView, childView;
parentView = (WhatEverLayout)findViewById(R.id.parentView_xml);
childView =(WhatEverLayout)findViewById(R.id.childView_xml);
parentView.removeView(childView);
これが私の解決策です。 「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
}
header_layout.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">
<LinearLayout
Android:id="@+id/mHeaderView"
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<TextView
Android:id="@+id/mNoHelpLayout"
Android:layout_width="match_parent"
Android:layout_height="176dip"
Android:background="#ffffffff"
Android:gravity="center"
/>
</LinearLayout>
</LinearLayout>
Javaコード:
LayoutInflater mInflater =(LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View outerView = mInflater.inflate(R.layout.header_layout, null);
mHeaderView = (LinearLayout) outerView.findViewById(R.id.mHeaderView);
mHeaderView.setVisiable()を使用して、outerView.setVisiable()ではなく、visiableを制御します。わたしにはできる。
あなたができることはifステートメントを設定することです。可視性を「GONE」に設定する条件がいつでもビューをラップコンテンツとして設定し、スペースが解放されると、私はそれを行い、シークバーのために働きました
If you want to show itemView
if (ItemBean.isShow())
{
holder.itemView.setVisibility(View.VISIBLE);
holder.itemView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
} else
{
holder.itemView.setLayoutParams(new LinearLayout.LayoutParams(0, 0));
holder.itemView.setVisibility(View.GONE);
}