以前のxmlレイアウトには、内部に要素がほとんどない複数のビューグループがあります。各ビューグループを非表示にすると、その子要素もすべて非表示になります。フラットな構造にしたかったので、ConstraintLayoutを試しました。クールスプレッドと要素を連鎖させて適切に整列させる方法を知っています。フラット構造はラップされていないため、LinearLayout、今では非表示にする3つのビューがあります。これを達成する代替手段があるかどうかを知りたいです。
制約レイアウトなし
<RelativeLayout....
..........
..........
<LinearLayout
Android:visibility="gone"
tools:visibility="visible"
Android:id="@+id/filter_area"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<Android.support.v7.widget.AppCompatTextView
Android:id="@+id/lblTerminal"
Android:background="@color/lightGray"
style="@style/PurpleSubtitle"
Android:drawableRight="@drawable/i_down_yellow"
Android:drawableEnd="@drawable/i_down_yellow"
Android:padding="10dp"
Android:text="@string/lblTerminal"
Android:layout_weight="5"
Android:layout_width="0dp"
Android:layout_height="wrap_content" />
<View
Android:background="@Android:color/black"
Android:layout_width="1dp"
Android:layout_height="match_parent"/>
<Android.support.v7.widget.AppCompatTextView
Android:id="@+id/lblCategory"
Android:background="@color/lightGray"
Android:padding="10dp"
Android:drawableRight="@drawable/i_down_yellow"
Android:drawableEnd="@drawable/i_down_yellow"
style="@style/PurpleSubtitle"
Android:text="@string/lblCategory"
Android:layout_weight="5"
Android:layout_width="0dp"
Android:layout_height="wrap_content" />
</LinearLayout>
.......
.......
</RelativeLayout>
制約レイアウトを使用
<Android.support.constraint.ConstraintLayout
.....
.....
.....
#happy that i no longer need LinearLayout for align properly
<Android.support.v7.widget.AppCompatTextView
Android:id="@+id/lblTerminal"
Android:background="@color/lightGray"
style="@style/PurpleSubtitle"
Android:drawableRight="@drawable/i_down_yellow"
Android:drawableEnd="@drawable/i_down_yellow"
Android:padding="10dp"
Android:text="@string/lblTerminal"
Android:layout_weight="5"
Android:layout_width="0dp"
Android:layout_height="50dp"
app:layout_constraintTop_toBottomOf="@+id/txt_search"
app:layout_constraintRight_toLeftOf="@+id/view3"
app:layout_constraintLeft_toLeftOf="@+id/guideline2"
app:layout_constraintHorizontal_chainStyle="spread"/>
<View
Android:background="@Android:color/black"
Android:layout_width="1dp"
Android:layout_height="50dp"
Android:id="@+id/view3"
app:layout_constraintTop_toBottomOf="@+id/txt_search"
app:layout_constraintRight_toLeftOf="@+id/lblCategory"
app:layout_constraintLeft_toRightOf="@+id/lblTerminal" />
<Android.support.v7.widget.AppCompatTextView
Android:id="@+id/lblCategory"
Android:background="@color/lightGray"
Android:padding="10dp"
Android:drawableRight="@drawable/i_down_yellow"
Android:drawableEnd="@drawable/i_down_yellow"
style="@style/PurpleSubtitle"
Android:text="@string/lblCategory"
Android:layout_width="0dp"
Android:layout_height="50dp"
app:layout_constraintTop_toTopOf="@+id/view3"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toRightOf="@+id/view3" />
......
......
......
</Android.support.constraint.ConstraintLayout>
はい、だから今ConstraintLayoutでもGroupを使用してビューの特定のグループの可視性を処理できます
これは、現在ベータ版であるConstraintLayoutで導入された新機能です。
ベータ版のConstraintLayoutをプロジェクトに追加する方法は次のとおりです。
以下のようにプロジェクトgradleファイルにMavenサポートを追加します
allprojects {
repositories {
maven { url 'https://maven.google.com' }
jcenter()
}
}
その後、アプリのgardle依存関係にConstarintLayoutライブラリの依存関係を追加します
compile 'com.Android.support.constraint:constraint-layout:1.1.0-beta3'
次のようにConstraintLayouにグループを追加する必要があります
<Android.support.constraint.Group
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
app:constraint_referenced_ids="button7,button3,button2"
Android:id="@+id/group" />
グループ参照IDのどこか
app:constraint_referenced_ids="button7,button3,button2"
実行時に処理するコンマ区切りのビューIDが含まれているため、アクティビティでは、次のようにグループをバインドして可視性を処理します
import Android.support.constraint.Group; //import statement in activity
Group group=(Group)findViewById(R.id.group);//bind view from xml
group.setVisibility(View.VISIBLE);//this will visible all views
group.setVisibility(View.GONE);//this will set Gone to all views
group.setVisibility(View.INVISIBLE);//this will set INVISIBLE to all view
2018年4月12日にリリースされたConrtsaintLayout 1.1.0安定版の編集https://androidstudio.googleblog.com/2018/04/constraintlayout-110.html
implementation 'com.Android.support.constraint:constraint-layout:1.1.0'
編集Android X Android xパッケージを使用している場合は、ここでパッケージ情報を見つけることができます
Constraintlayoutのベータ版を使用している場合は、@ pavanの answer に従ってください。
AndroidXを使用している場合は、以下の手順に従ってconstraintlayoutとGroupを統合してください。
1)プロジェクトにAndroidX制約レイアウトの依存関係を追加します。
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
2)プロジェクトで次のようにConstraintLayout Groupを使用します。
<androidx.constraintlayout.widget.Group
Android:id="@+id/groupDetails"
Android:layout_width="wrap_content"
Android:visibility="gone" // Default visibility for group views
app:constraint_referenced_ids="textViewUserName, ..." // id's which you want to include in group
Android:layout_height="wrap_content"/>
3)可視性を切り替えるためのコーディング部分は次のとおりです。
private lateinit var groupDetails:Group
...
groupDetails = findViewById(R.id.groupDetails)
groupDetails.visibility = View.GONE // Change visibility
AndroidXの使用中に役立つことを願っています。