Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ConstraintLayoutをもうちょっと深く知ってみる
Search
takahirom
September 15, 2017
190
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
AndroidアプリのAI実装をAndroidifyで学ぶ ー Google公式サンプルによる体験と実装 ー
takahirom
0
140
AIエージェントによるテストフレームワーク Arbigent
takahirom
0
1k
Google の LLM ライブラリ を Android アプリで 使うには?
takahirom
1
2.1k
Robolectric Native Graphics and Roborazzi
takahirom
1
2.3k
Androidアプリで安定して動作させ継続的に開発するために設計の原則を利用して開発した話
takahirom
3
1.4k
Android Tools & Performance
takahirom
1
1.2k
Jetpack Compose State Practices
takahirom
1
1.5k
Inside Jetpack Compose
takahirom
1
1.1k
What’s new in Android Jetpack and Tools
takahirom
0
430
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
530
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2k
sira's awesome portfolio website redesign presentation
elsirapls
0
280
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
370
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
370
Music & Morning Musume
bryan
47
7.2k
Building an army of robots
kneath
306
46k
Typedesign – Prime Four
hannesfritz
42
3.1k
Context Engineering - Making Every Token Count
addyosmani
9
970
Thoughts on Productivity
jonyablonski
76
5.2k
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ָ䖉黅׃ְ ˖ ،صً٦ءّٝ知⽃חדֹ