質問を投稿する前に、これに関連する多くのスレッドを見ました。しかし、誰も私のために働いていませんでした。子として他の多くのレイアウトとフラグメントを持つRelativeLayoutがあります。ボタンをクリックすると、「content_view」のすべての子とcontent_view自体が無効になります。私は試した
contentView.setDisabled(false);
これはうまくいきませんでした。私も試しました
for (int i = 0; i < layout.getChildCount(); i++) {
View child = layout.getChildAt(i);
child.setEnabled(false);
}
これでもうまくいきませんでした。私は何が間違っているのですか?以下の私の.xmlコードを見つけてください。すべてのビューの上にビューを配置してみました。それでも私の問題は解決しませんでした。
<RelativeLayout
Android:layout_height="match_parent"
Android:layout_width="match_parent"
Android:orientation="vertical"
Android:id="@+id/content_view"
Android:background="#ffffff">
<LinearLayout
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_below="@+id/channel_actionbar"
Android:layout_marginLeft="0dp"
Android:layout_marginTop="0dp"
Android:duplicateParentState="true">
<FrameLayout
Android:layout_height="match_parent"
Android:layout_width="match_parent"
Android:id="@+id/body_container"
Android:layout_below="@+id/channel_actionbar"
Android:duplicateParentState="true">
<RelativeLayout
Android:layout_height="match_parent"
Android:layout_width="match_parent"
Android:id="@+id/channelList"
Android:duplicateParentState="true">
<com.mobile.subview.ScrollViewWithScrollListener
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:id="@+id/scrollView"
Android:layout_alignParentTop="false"
Android:duplicateParentState="true">
<RelativeLayout
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:duplicateParentState="true">
<FrameLayout
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:id="@+id/imagePlaceHolder"
Android:duplicateParentState="true"></FrameLayout>
<TableLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:id="@+id/channelTable"
Android:layout_below="@+id/imagePlaceHolder"
Android:duplicateParentState="true"></TableLayout>
<com.mobile.subview.CustomTextView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="You do not qualify for any engagements or channels. Please check back later."
app:typeface="fonts/HelveticaNeue"
app:customStyle="Regular"
Android:id="@+id/noChannelsMessage"
Android:textColor="#000"
Android:textSize="@dimen/contentTextSize"
Android:visibility="gone"
Android:duplicateParentState="true"/>
</RelativeLayout>
</com.mobile.subview.ScrollViewWithScrollListener>
<com.mobile.subview.ParallaxImage
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:id="@+id/header"
Android:adjustViewBounds="true"
Android:layout_alignParentTop="true"
Android:scaleType="fitStart"
Android:visibility="invisible"
Android:duplicateParentState="true"/>
</RelativeLayout>
<RelativeLayout
Android:layout_height="match_parent"
Android:layout_width="match_parent"
Android:layout_below="@+id/channel_actionbar"
Android:id="@+id/sibling_view"
Android:visibility="gone"
Android:duplicateParentState="true"></RelativeLayout>
</FrameLayout>
</LinearLayout>
<RelativeLayout
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:visibility="invisible"
Android:id="@+id/retailersContainer"
Android:layout_marginLeft="0dp"
Android:duplicateParentState="true"
Android:layout_below="@+id/channel_actionbar">
<fragment
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:name="com.mobile.subview.List"
Android:id="@+id/retailers"
Android:duplicateParentState="true"/>
<FrameLayout
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_below="@+id/retailers"
Android:id="@+id/retailerClickBlocker"
Android:duplicateParentState="true"></FrameLayout>
</RelativeLayout>
<RelativeLayout
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="@dimen/actionBarHeight"
Android:layout_alignParentTop="true"
Android:id="@+id/channel_actionbar"
Android:background="#F8F8F8"
Android:layout_marginLeft="0dp"
Android:duplicateParentState="true">
<ImageButton
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/shared_navmenu_button"
Android:id="@+id/show_menu_button"
Android:layout_centerVertical="true"
Android:background="@null"
Android:scaleType="fitCenter"
Android:layout_marginLeft='5px'
Android:duplicateParentState="true"/>
<com.mobile.subview.CustomTextView
Android:id="@+id/channel_title"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerInParent="true"
Android:textSize="@dimen/titleTextSize"
Android:textColor="#000"
Android:text="Test Title"
app:typeface="fonts/HelveticaNeue"
app:customStyle="Medium"
Android:visibility="gone"
Android:duplicateParentState="true"/>
<ImageView
Android:id="@+id/logo"
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:layout_centerInParent="true"
Android:src="@drawable/shared_navbar_logo2x"
Android:visibility="gone"
Android:scaleType="fitCenter"
Android:duplicateParentState="true"/>
<com.mobile.subview.CustomButton
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentRight="true"
Android:id="@+id/channel_done_btn"
app:typeface="fonts/HelveticaNeue"
app:customStyle="Regular"
Android:visibility="gone"
Android:duplicateParentState="true"/>
<com.mobile.subview.CustomButton
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentRight="true"
app:typeface="fonts/HelveticaNeue"
app:customStyle="Regular"
Android:id="@+id/channel_share_btn"
Android:visibility="gone" />
<RelativeLayout
Android:layout_width="fill_parent"
Android:layout_height="1dp"
Android:background="#D6D6D6"
Android:id="@+id/divider"
Android:layout_alignParentBottom="true"
Android:duplicateParentState="true"/>
</RelativeLayout>
<View
Android:visibility="gone"
Android:id="@+id/click_preventing_view"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="#66000000"
Android:clickable="false" />
</RelativeLayout>
レイアウトは非常にネストされているため、ビューを再帰的に無効にする必要があります。メソッドを使用する代わりに、次のようなものを試してください。
private static void disable(ViewGroup layout) {
layout.setEnabled(false);
for (int i = 0; i < layout.getChildCount(); i++) {
View child = layout.getChildAt(i);
if (child instanceof ViewGroup) {
disable((ViewGroup) child);
} else {
child.setEnabled(false);
}
}
}
次に、電話します。
disable(content_view);
再帰を使用する代わりに答えが期待されているとしても、以下のコードでうまくいくと思います。これは私がそれを否定するために使用したものです。 parentlayoutを渡し、ブールパラメータとして表示するか非表示にするかを指定しました
private void disable(LinearLayout layout, boolean enable) {
for (int i = 0; i < layout.getChildCount(); i++) {
View child = layout.getChildAt(i);
child.setEnabled(enable);
if (child instanceof ViewGroup) {
ViewGroup group = (ViewGroup) child;
for (int j = 0; j < group.getChildCount(); j++) {
group.getChildAt(j).setEnabled(enable);
}
}
}
Kotlinのバージョンは次のとおりです。
使用 Android KTX
fun View.changeEnableChildren(enable: Boolean) {
isEnabled = enable
(this as? ViewGroup)?.let {
forEach {
changeEnableChildren(enable)
}
}
}
なし Android KTX
fun View.changeEnableChildren(enable: Boolean) {
isEnabled = enable
(this as? ViewGroup)?.let {
for (i in 0..it.childCount) {
changeEnableChildren(enable)
}
}
}
注:再帰メソッドは StackOverFlowErrorを引き起こす可能性があります。その場合、changeEnableChildren(enable)
をisEnabled=enable
に置き換える必要があります。