Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ConstraintLayoutをもうちょっと深く知ってみる
Search
takahirom
September 15, 2017
200
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ConstraintLayoutをもうちょっと深く知ってみる
takahirom
September 15, 2017
More Decks by takahirom
See All by takahirom
AIエージェントで 変わるAndroid開発環境
takahirom
3
890
AndroidアプリのAI実装をAndroidifyで学ぶ ー Google公式サンプルによる体験と実装 ー
takahirom
0
160
AIエージェントによるテストフレームワーク Arbigent
takahirom
0
1.1k
Google の LLM ライブラリ を Android アプリで 使うには?
takahirom
1
2.2k
Robolectric Native Graphics and Roborazzi
takahirom
1
2.4k
Androidアプリで安定して動作させ継続的に開発するために設計の原則を利用して開発した話
takahirom
3
1.5k
Android Tools & Performance
takahirom
1
1.3k
Jetpack Compose State Practices
takahirom
1
1.5k
Inside Jetpack Compose
takahirom
1
1.1k
Featured
See All Featured
Done Done
chrislema
186
16k
Color Theory Basics | Prateek | Gurzu
gurzu
1
470
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
470
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
500
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.9k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
320
4 Signs Your Business is Dying
shpigford
187
23k
Product Roadmaps are Hard
iamctodd
55
13k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
340
For a Future-Friendly Web
brad_frost
183
10k
Transcript
$POTUSBJOU-BZPVU ֲ㼰׃帾ֻ濼ג UBLBIJSPN
˖ "OESPJEָ㥨ֹ ˖ UBLBIJSPNהְֲせד 2JJUBהַ剅ְגְךד ״׃ֶֻ격ְ׃תׅ 荈䊹稱➜
˖ (PPHMF*0،فٔך،صً٦ءّٝ ˖ $POTUSBJOU-BZPVUד㹋鄲ׁגְ׃ ְ ˖ װגְ ַֹֽ
˖ $POTUSBJOU ⵖ秈 ⢪ٖ؎،ؐز ˖ ؿٓحزזٖ؎،ؐزחדֹ ˖ ٖ؎،ؐزؒر؍ةה鸬䵿ׅ ˖ "OESPJE4UVEJPךرؿٕؓز
˖ זו ְְהְֿםְ֮ $POTUSBJOU-BZPVUהכ
˖ ֿתד׳ה׃ٖ؎،ؐزכ⡲ֿהָ ֽ֮וծ ׯה锃ץֿהכזְ➂ぢֽ ˖ 荈ⴓָ锃ץגגծ锃ץתדח濼זַֿ ה⚥䗰ח稱➜ ˖ 2JJUBחⰕ׃גְךדגְֻׁ ˖
ջ$POTUSBJOU-BZPVUֲ㼰׃帾ֻ濼גռ ➙傈鑧׃ְֿה
㛇劤涸זהֿ ָֿ䠐ׅהֿכ
㛇劤涸זהֿ
$POTUSBJOU-BZPVUYדך堣腉 ♧鿇 ˖ #JBT ˖ $IBJO ˖ (VJEF-JOF ˖ $POTUSBJOU4FU
˖ (0/&ךהֹך䮙⹛חאְג
#JBT ˖ YFEַXSBQ@DPOUFOU ךהֹח鏣㹀〳腉 ˖ 㞮歲简ַוְּ ꨄגְַⵖ䖴
$POTUSBJOU4FU⢪ג #JBT㢌刿 ConstraintSetΛ͏͜ͱͰ ConstraintLayoutͷϓϩύςΟΛ มߋ͢Δ͜ͱ͕Ͱ͖Δ(ޙड़)
#JBT ˖ 兛媮ך䊩㺔ׇדծ 歗ָ杞ֻזהֹךو٦آٝ然⥂דֹ
$POTUSBJOU-BZPVUYדך堣腉 ♧鿇 ˖ #JBT ˖ $IBJO ˖ (VJEF-JOF ˖ $POTUSBJOU4FU
˖ (0/&ךהֹך䮙⹛חאְג
$IBJO ˖ ➭ך7JFXה㣐ֹׁ侭ִ ״ֲז䕎דךٖ؎،ؐزָ 〳腉 ˖ 㛇劤כ̒ך⹛歗ך乼⡲ד0,
$IBJO ˖ $IBJO4UZMFהְֲ銲稆 $)"*/@413&"% $)"*/@413&"%@*/4*%& $)"*/@1"$,&%ה ⴖ剏ִגְ ⟃♴ך״ֲז䕎דYNMד鎸鶢ׁ app:layout_constraintHorizontal_chainStyle="spread_inside"
$IBJOXFJHIU -JOFBS-BZPVUדֶזׄךXFJHIU⢪ִ ח׃גְ ཁૉΛmatch constraint(0dp)ʹͨ͠ঢ়ଶͰ app:layout_constraintHorizontal_weight="1"
$POTUSBJOU-BZPVUYדך堣腉 ♧鿇 ˖ #JBT ˖ $IBJO ˖ (VJEF-JOF ˖ $POTUSBJOU4FU
˖ (0/&ךהֹך䮙⹛חאְג
(VJEF-JOF ˖ رؠ؎ٝ♳ד㛇彊הז简䒷ֽגծ ַֿ7JFXꂁ縧דֹ ˖ EQ䭷㹀ֽדזֻךⶴさד䭷㹀דֹ ⚵ְהֿ䬃ׅהⴖ剏ִדֹ app:layout_constraintGuide_percent="0.5"
$POTUSBJOU-BZPVUYדך堣腉 ♧鿇 ˖ #JBT ˖ $IBJO ˖ (VJEF-JOF ˖ $POTUSBJOU4FU
˖ (0/&ךהֹך䮙⹛חאְג
$POTUSBJOU4FU ϓϩάϥϜ͔ΒConstraintΛઃఆ͢ΔͨΊͷΫϥε LayoutParamsͱͷҧ͍ɺ શͯͷViewͷConstraintΛऔಘɺมߋɺөͰ͖Δ
$POTUSBJOU4FU ➙֮$POTUSBJOU-BZPVUַ$POTUSBJOU4FU《䖤 val constraintSet = ConstraintSet() constraintSet.clone(constraintLayout)
$POTUSBJOU4FU ٖ؎،ؐزַ$POTUSBJOU4FU《䖤 val constraintSet = ConstraintSet() constraintSet.clone(context, R.layout.bigimage)
$POTUSBJOU4FU $POTUSBJOU4FU$POTUSBOU-BZPVUח僥 constraintSet.applyTo(constraintLayout)
$POTUSBJOU4FU⢪ג#JBT 㢌刿
$POTUSBJOU4FU⢪ג#JBT 㢌刿 val constraintSet = ConstraintSet() constraintSet.clone(constraintLayout) val bias =
0.5F constraintSet .setVerticalBias(R.id.button, bias) constraintSet.applyTo(constraintLayout) $POTUSBJOU-BZPVUך؎ٝأةٝأַ $POTUSBJOU4FU《䖤
$POTUSBJOU4FU⢪ג#JBT 㢌刿 val constraintSet = ConstraintSet() constraintSet.clone(constraintLayout) val bias =
0.5F constraintSet .setVerticalBias(R.id.button, bias) constraintSet.applyTo(constraintLayout) JE䭷㹀׃ג#JBT㢌刿ׅ
$POTUSBJOU4FU⢪ג#JBT 㢌刿 val constraintSet = ConstraintSet() constraintSet.clone(constraintLayout) val bias =
0.5F constraintSet .setVerticalBias(R.id.button, bias) constraintSet.applyTo(constraintLayout) ٖ؎،ؐزח僥
$POTUSBJOU4FU⢪ג $POTUSBJOU-BZPVUךٖ؎،ؐز㢌刿 ˖ ➭חׁתׂתזًاحسָ֮㢌刿דֹ
$POTUSBJOU-BZPVUYדך堣腉 ♧鿇 ˖ #JBT ˖ $IBJO ˖ (VJEF-JOF ˖ $POTUSBJOU4FU
˖ (0/&ךהֹך䮙⹛חאְג
(0/&ךהֹך䮙⹛חאְג ConstraintLayoutView͕GONEͷͱ͖ͷڍಈαϙʔτ ͍ͯ͠Δ ConstraintLayoutͷதͷView͕GONEʹͳͬͨͱ͖ͦͷ View͕0 x 0ͰMargin0ʹ
(0/&ךהֹך䮙⹛חאְג (0/&חז7JFX撑׃גְٖ؎،ؐزד (0/&חזהֹךو٦آٝך㣐ֹׁ鏣㹀ֿׅהָדֹ app:layout_goneMarginLeft="200dp"
$POTUSBJOU-BZPVU#FUBדך 堣腉
$POTUSBJOU-BZPVU#FUBדך 堣腉
$POTUSBJOU-BZPVU#FUBדך 堣腉 ˖ #BSSJFS ˖ (SPVQ ˖ 1MBDFIPMEFS ˖ QFSDFOUEJNFOTJPO
#BSSJFS ֿך״ֲזٖ؎،ؐزד 〸ך&EJU5FYU䲧ִ䕎ד⡲ה 兛鸐כ♳ך䕎חזתׅ ְֲֲֿ儗ח#BSSJFSָ⢪ִתׅկ رٌד⢪ְ倯鍑铡
#BSSJFS #BSSJFSך♴ח7JFX䭯גֻ 鼘ׇֽׁחٖ؎،ؐز ⡲؎ً٦آ "EE7FSUJDBM#BSSJFSד#BSSJFS鷄⸇
#BSSJFS #BSSJFS⡲㜥䨽 䭷㹀 5FYU7JFXך〸⩎ח #BSSJFS⡲ְךד SJHIUתכFOE䭷㹀
#BSSJFS ָֿ#BSSJFS ˖ ת׆➙אְגְ 5FYU7JFXפך $POTUSBJOUꤐ
#BSSJFS ָֿ#BSSJFS ˖ ➿ח#BSSJFSח $POTUSBJOUאֽ
#BSSJFSך⢪ְ䨽 ٖ؎،ؐز勴⟝ד "#ذأزהַדծ(0/&׃גⴖ剏ִהַ׃גְ儗זו
$POTUSBJOU-BZPVU#FUBדך 堣腉 ˖ #BSSJFS ˖ (SPVQ ˖ 1MBDFIPMEFS ˖ QFSDFOUEJNFOTJPO
(SPVQ (SPVQ⢪ֲה♧孡ח(SPVQד䭷㹀׃ ךךWJTJCJMJUZ㢌ִדֹ $IBJOדך⢽
(SPVQ ⢪ְ倯כ㛇劤涸ח#BSSJFSה♧筰 ⟃♴ך؝٦سד♧孡ח7JFXך7JTJCJMJUZ㢌刿 findViewById<Group>(R.id.Group).visibility = View.GONE
$POTUSBJOU-BZPVU#FUBדך 堣腉 ˖ #BSSJFS ˖ (SPVQ ˖ 1MBDFIPMEFS ˖ QFSDFOUEJNFOTJPO
1MBDFIPMEFS ˖ ֿ㹋鄲׃ְגז וֲװגװתׅ $POTUSBJOU-BZPVU⢪ֲהֽֿד㹋鄲דֹתׅ val onClickListener: (View) -> Unit
= { view -> TransitionManager.beginDelayedTransition(root as ViewGroup) placeholder.setContentId(view.id) } imageA.setOnClickListener(onClickListener) imageB.setOnClickListener(onClickListener) imageC.setOnClickListener(onClickListener) imageD.setOnClickListener(onClickListener)
1MBDFIPMEFS ˖ ת׆➙㔐כ،؎ذيך$IBJO⡲
1MBDFIPMEFS 如ח1MBDFIPMEFS鏣縧ׅ <android.support.constraint.Placeholder android:id="@+id/placeholder" ... app:content="@+id/image_d" ... /> ֿֿדכ㣐ֹֻׅ״ֲח1MBDFIPMEFSח $POTUSBJOU鏣㹀
䊩〸ַךꥴז׃זו app:content=“@+id/image_d” ך״ֲח$IBJOך⚥ח֮7JFXךJE 鏣㹀ֿׅהד䊩ך״ֲז邌爙חז
1MBDFIPMEFS 5SBOTJUJPO.BOBHFSCFHJO%FMBZFE5SBOTJUJPO ד،صً٦ءׇׁّٝאאծ QMBDFIPMEFSTFU$POUFOU*Eׅל䊩ך״ֲחז val onClickListener: (View) -> Unit
= { view -> TransitionManager.beginDelayedTransition(root as ViewGroup) placeholder.setContentId(view.id) } imageA.setOnClickListener(onClickListener) imageB.setOnClickListener(onClickListener) imageC.setOnClickListener(onClickListener) imageD.setOnClickListener(onClickListener)
$POTUSBJOU-BZPVU#FUBדך 堣腉 ˖ #BSSJFS ˖ (SPVQ ˖ 1MBDFIPMEFS ˖ QFSDFOUEJNFOTJPO
QFSDFOUEJNFOTJPO ˖ 簚埆ךنةٝ ֿז䠬ׄד䭷㹀ׅל㹋植דֹ android:layout_width="0dp" app:layout_constraintWidth_default="percent" app:layout_constraintWidth_percent=“0.5" %FQSFDBUFEחז 1FSDFOU4VQQPSU-JCSBSZך縧ֹ䳔ִָ䯴ֲ
$POTUSBJOU-BZPVUה ،صً٦ءّٝ
$POTUSBJOU-BZPVUה ،صً٦ءّٝ $POTUSBJOU-BZPVU⢪ٖ؎،ؐز א欽䠐ׅ ،صً٦ءّٝה،صً٦ءّٝ䖓ך ٖ؎،ؐز
$POTUSBJOU-BZPVUה ،صً٦ءّٝ
$POTUSBJOU-BZPVUך؎ٝأةٝأַ $POTUSBJOU4FU《䖤
ٖ؎،ؐزؿ؋؎ַٕ $POTUSBJOU4FU《䖤
וך$POTUSBJOU4FU⢪ֲַ寸
5SBOTJUJPO.BOBHFSCFHJO%FMBZFE5SBOTJUJPOד 如ךٖ؎،ؐز㢌刿儗ח،صً٦ءّׅٝ״ֲחׅ DPOTUSBJOU4FUBQQMZ5P ד$POTUSBJOU4FUח僥
$POTUSBJOU-BZPVUה ،صً٦ءّٝ $POTUSBJOU4FUה5SBOTJUJPO.BOBHFSCFHJO%FMBZFE5SBOTJUJPO 穈さׇֿהד،صً٦ءّٝדֹ ➙㔐כٖ؎،ؐزַ$POTUSBJOU4FU《䖤׃ָծ فؚٗٓيַ$POTUSBJOU4FUְׄג ،صً٦ءׇֿׁّٝה〳腉 (PPHMF*0،فٔכֿח$VTUPN5SBOTJUJPO穈さׇג ה갹䓸גְ
➙㔐כ铡僇׃זְ
$POTUSBJOU-BZPVUך䭁䓸䚍 #BSSJFSװ(SPVQכ$POTUSBJOU)FMQFSؙٓأ竰䪫׃ג㹋植ׁגְ 7JFXךٓ؎ؿ؟؎ؙٕךة؎ىؚٝדծ 䭷㹀ׁ7JFX⢪ג乼⡲⳿勻 ؕأةي׃ך知⽃ח⡲ג Ⱅ䒭ח؟ه٦ز׃גְ <com.github.takahirom.constraint_layout_samples.Blink android:layout_width="wrap_content" android:layout_height="wrap_content" app:constraint_referenced_ids="textView,imageView"
/>
$POTUSBJOU-BZPVUך䭁䓸䚍 VQEBUF1SF-BZPVU ؔ٦غ٦ٓ؎س׃גⳢ椚䊴׃鴥דְ ׯה׃⢪ְ倯כسًُؗٝزָ⳿גַחזֲ
תה ˖ ְזٖ؎،ؐزך堣腉ָⰅגְגծ 穠圓ְזػة٦ٝח黝䘔דֲֹ ˖ ֮玎䏝䭁䓸דֹ״ֲח⡲ג֮ ˖ $POTUSBJOU-BZPVUָ䖉黅׃ְ ˖ ،صً٦ءّٝ知⽃חדֹ