diff --git a/README.md b/README.md index 5639a22..3cdddcb 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ See https://github.com/googlesamples/android-ConstraintLayoutExamples - [ ] Dimension constraints * [x] Ratio * [x] Percent dimension - * [ ] Min and Max + * [x] Min and Max * [ ] `MATCH_CONSTRAINT` dimensions _(Added in 1.1)_ * [ ] `WRAP_CONTENT` : enforcing constraints _(Added in 1.1)_ * [ ] Widgets dimension constraints diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 36749ba..25c7c52 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -34,6 +34,9 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/hossainkhan/android/demo/data/LayoutDataStore.kt b/app/src/main/java/com/hossainkhan/android/demo/data/LayoutDataStore.kt index 0d6a2b3..cfa02ef 100644 --- a/app/src/main/java/com/hossainkhan/android/demo/data/LayoutDataStore.kt +++ b/app/src/main/java/com/hossainkhan/android/demo/data/LayoutDataStore.kt @@ -111,6 +111,18 @@ class LayoutDataStore @Inject constructor( "The ratio can be expressed either as:\n" + "\n * a float value, representing a ratio between width and height" + "\n * a ratio in the form \"width:height\", for example: `layout_constraintDimensionRatio=\"16:9\"`"), + + /* + * https://developer.android.com/reference/android/support/constraint/ConstraintLayout#DimensionConstraints + */ + LayoutInformation( + layoutResourceId = R.layout.preview_dimension_min_max, + thumbnailResourceId = R.drawable.thumb_dimension_min_max, + title = "Dimension: Min & Max (width/height)", + description = "You can define minimum and maximum sizes for the ConstraintLayout itself:\n\n" + + "* Standard attributes can should be use - `minWidth`, `minHeight`, `maxWidth`, `maxHeight`.\n" + + "* Those minimum and maximum dimensions will be used by ConstraintLayout when its dimensions are set to `WRAP_CONTENT`"), + LayoutInformation( layoutResourceId = R.layout.preview_dimension_percent, thumbnailResourceId = R.drawable.thumb_dimension_percentage, @@ -118,6 +130,7 @@ class LayoutDataStore @Inject constructor( description = "To use percent, you need to set the following:\n\n" + "* The dimension should be set to MATCH_CONSTRAINT (0dp)\n" + "* Then set the `layout_constraintWidth_percent` or `layout_constraintHeight_percent` attributes to a value between 0.0 and 1.0"), + LayoutInformation( layoutResourceId = R.layout.preview_virtual_helper_guideline, thumbnailResourceId = R.drawable.thumb_virtual_helper_guideline, diff --git a/app/src/main/java/com/hossainkhan/android/demo/di/ActivityBindingModule.kt b/app/src/main/java/com/hossainkhan/android/demo/di/ActivityBindingModule.kt index 0ff5138..c05546f 100644 --- a/app/src/main/java/com/hossainkhan/android/demo/di/ActivityBindingModule.kt +++ b/app/src/main/java/com/hossainkhan/android/demo/di/ActivityBindingModule.kt @@ -17,6 +17,7 @@ package com.hossainkhan.android.demo.di import com.hossainkhan.android.demo.ui.layoutpreview.LayoutChainStyleActivity +import com.hossainkhan.android.demo.ui.layoutpreview.LayoutDimensionMinMaxActivity import com.hossainkhan.android.demo.ui.layoutpreview.LayoutGuidelineBarrierActivity import com.hossainkhan.android.demo.ui.layoutpreview.LayoutGuidelineGroupActivity import com.hossainkhan.android.demo.ui.layoutpreview.LayoutPreviewBaseActivity @@ -68,4 +69,8 @@ abstract class ActivityBindingModule { @ActivityScope @ContributesAndroidInjector abstract fun layoutGuidelineGroupActivity(): LayoutGuidelineGroupActivity + + @ActivityScope + @ContributesAndroidInjector + abstract fun layoutDimensionMinMaxActivity(): LayoutDimensionMinMaxActivity } \ No newline at end of file diff --git a/app/src/main/java/com/hossainkhan/android/demo/ui/browse/LayoutBrowseViewModel.kt b/app/src/main/java/com/hossainkhan/android/demo/ui/browse/LayoutBrowseViewModel.kt index 53e3918..3e1f0e4 100644 --- a/app/src/main/java/com/hossainkhan/android/demo/ui/browse/LayoutBrowseViewModel.kt +++ b/app/src/main/java/com/hossainkhan/android/demo/ui/browse/LayoutBrowseViewModel.kt @@ -23,6 +23,7 @@ import com.hossainkhan.android.demo.R import com.hossainkhan.android.demo.data.AppDataStore import com.hossainkhan.android.demo.data.LayoutInformation import com.hossainkhan.android.demo.ui.layoutpreview.LayoutChainStyleActivity +import com.hossainkhan.android.demo.ui.layoutpreview.LayoutDimensionMinMaxActivity import com.hossainkhan.android.demo.ui.layoutpreview.LayoutGuidelineBarrierActivity import com.hossainkhan.android.demo.ui.layoutpreview.LayoutGuidelineGroupActivity import com.hossainkhan.android.demo.ui.layoutpreview.LayoutVisibilityGoneActivity @@ -65,6 +66,9 @@ class LayoutBrowseViewModel( R.layout.preview_virtual_helper_group -> { browseNavigator.loadLayoutPreview(LayoutGuidelineGroupActivity::class.java, layoutResId) } + R.layout.preview_dimension_min_max -> { + browseNavigator.loadLayoutPreview(LayoutDimensionMinMaxActivity::class.java, layoutResId) + } else -> { // By default it loads the preview activity with the layout requested. browseNavigator.loadLayoutPreview(layoutResId) diff --git a/app/src/main/java/com/hossainkhan/android/demo/ui/layoutpreview/LayoutDimensionMinMaxActivity.kt b/app/src/main/java/com/hossainkhan/android/demo/ui/layoutpreview/LayoutDimensionMinMaxActivity.kt new file mode 100644 index 0000000..7375ff3 --- /dev/null +++ b/app/src/main/java/com/hossainkhan/android/demo/ui/layoutpreview/LayoutDimensionMinMaxActivity.kt @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2019 Hossain Khan + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hossainkhan.android.demo.ui.layoutpreview + +import android.os.Bundle +import android.widget.Button +import android.widget.TextView +import com.hossainkhan.android.demo.R + +/** + * Activity showcasing how virtual guideline group containing multiple views and how it can be changed. + * + * See https://developer.android.com/reference/android/support/constraint/Barrier + */ +class LayoutDimensionMinMaxActivity : LayoutPreviewBaseActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + // Setup additional view that is only available in this screen. + val toggleButton = findViewById