Last active
February 22, 2020 09:45
-
-
Save Pavneet-Sing/50a1550f4ec58413ce6192b65037e647 to your computer and use it in GitHub Desktop.
Framelayout, which will take the size of max sized child
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:app="http://schemas.android.com/apk/res-auto" | |
xmlns:tools="http://schemas.android.com/tools" | |
android:id="@+id/myScrollView" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent"> | |
<androidx.constraintlayout.widget.ConstraintLayout | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" | |
tools:context=".MainActivity"> | |
<TextView | |
android:id="@+id/textView" | |
android:layout_width="0dp" | |
android:layout_height="800dp" | |
android:background="@color/colorAccent" | |
android:text="Some long text" | |
app:layout_constraintEnd_toEndOf="parent" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toTopOf="parent" /> | |
<Button | |
android:id="@+id/button_fragment1" | |
android:layout_width="0dp" | |
android:layout_height="wrap_content" | |
android:layout_marginStart="16dp" | |
android:layout_marginLeft="16dp" | |
android:text="show blue" | |
app:layout_constraintEnd_toStartOf="@+id/button_fragment2" | |
app:layout_constraintHorizontal_bias="0.3" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toBottomOf="@+id/textView" /> | |
<Button | |
android:id="@+id/button_fragment2" | |
android:layout_width="0dp" | |
android:layout_height="wrap_content" | |
android:layout_marginEnd="16dp" | |
android:layout_marginRight="16dp" | |
android:text="show yellow" | |
app:layout_constraintHorizontal_bias="0.3" | |
app:layout_constraintStart_toEndOf="@+id/button_fragment1" | |
app:layout_constraintTop_toBottomOf="@+id/textView" /> | |
<Button | |
android:id="@+id/button_fragment3" | |
android:layout_width="0dp" | |
android:layout_height="wrap_content" | |
android:layout_marginEnd="16dp" | |
android:layout_marginRight="16dp" | |
android:text="show green" | |
app:layout_constraintEnd_toEndOf="parent" | |
app:layout_constraintHorizontal_bias="0.3" | |
app:layout_constraintStart_toEndOf="@+id/button_fragment2" | |
app:layout_constraintTop_toBottomOf="@+id/textView" /> | |
<com.example.pavneet_singh.temp.MaxChildHeightFrameLayout | |
android:layout_width="match_parent" | |
android:minHeight="2dp" | |
android:layout_height="wrap_content" | |
app:layout_constraintTop_toBottomOf="@+id/button_fragment2"> | |
<LinearLayout | |
android:layout_width="match_parent" | |
android:layout_height="wrap_content" | |
android:orientation="vertical"> | |
<FrameLayout | |
android:id="@+id/fragment_container" | |
android:layout_width="match_parent" | |
android:layout_height="wrap_content"/> | |
<TextView | |
android:text="additional text\nMore data" | |
android:layout_width="match_parent" | |
android:textSize="24dp" | |
android:layout_height="match_parent"/> | |
</LinearLayout> | |
</com.example.pavneet_singh.temp.MaxChildHeightFrameLayout> | |
</androidx.constraintlayout.widget.ConstraintLayout> | |
</androidx.core.widget.NestedScrollView> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.content.Context | |
import android.util.AttributeSet | |
import android.widget.FrameLayout | |
import kotlin.math.max | |
/** | |
* Created by Pavneet_Singh on 2020-02-19. | |
*/ | |
class MaxChildHeightFrameLayout @JvmOverloads constructor( | |
context: Context, | |
attrs: AttributeSet? = null, | |
defStyleAttr: Int = 0 | |
) : FrameLayout(context, attrs, defStyleAttr) { | |
private var maxHeight: Int = 0 | |
private val minHeight = attrs?.getAttributeValue( | |
"http://schemas.android.com/apk/res/android", | |
"minHeight" | |
)?.substringBefore(".")?.toInt() ?: 0 | |
override fun getSuggestedMinimumHeight(): Int { | |
var maxChildHeight = 0 | |
for (i in 0 until childCount) { | |
maxChildHeight = max(maxChildHeight, getChildAt(i).measuredHeight) | |
} | |
if (maxHeight != 0 && layoutParams.height < (maxHeight - maxChildHeight) && maxHeight > maxChildHeight) { | |
return maxHeight | |
} else if (maxHeight == 0 || maxHeight < maxChildHeight) { | |
maxHeight = maxChildHeight | |
} | |
return if (background == null) minHeight else max( | |
minHeight, | |
background.minimumHeight | |
) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment