AAML: Android рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рд░реНрдХрдЕрдк рднрд╛рд╖рд╛

рдЖрдкрдХреЛ рдпрд╣ рдмреЗрд╡рдХреВрдл рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрдИрдбреАрдИ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдореИрдВ рд╕рд╛рд░рд╛ рдХрд╛рдо vim + tmux + Terminal рдореЗрдВ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ IDE рдХреЗ рд╕рднреА рдлрд╛рдпрджреЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реВрдВ, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреЗ рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред

рдЬрдм рдореИрдВ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЕрдХреНрд╕рд░ рдПрдХреНрд╕рдПрдордПрд▓ (рдорд╛рд░реНрдХрдЕрдк, рд╕реНрдЯрд╛рдЗрд▓, рд▓рд╛рдЗрдиреЗрдВ, ...) рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рддреЛ рдПрдХ рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рдореЗрдВ, рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рдФрд░ рдореИрдВрдиреЗ рдХреБрдЫ рдШрдВрдЯреЗ рдмрд┐рддрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рд╕рд░рд▓ рдорд╛рд░реНрдХрдЕрдк рд▓реИрдВрдЧреНрд╡реЗрдЬ (рдЬреИрд╕реЗ CSS рдХреЗ рд▓рд┐рдП рд╕реНрдЯрд╛рд░реНрдХреНрд╕ рдпрд╛ рд╕реНрдЯрд╛рдЗрд▓рд╕) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ XML рдЬрдирд░реЗрдЯрд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдлрд┐рд░ рднреА, NIH рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрддреНрддреЗрдЬрдХ рдЙрддреНрддреЗрдЬрдирд╛ рд╣реИред

AAML рднрд╛рд╖рд╛ (рдПрдХ рдЕрдиреНрдп рдПрдВрдбреНрд░реЙрдЗрдб рдорд╛рд░реНрдХрдЕрдк рднрд╛рд╖рд╛) рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдирд┐рдХрд▓реАред рддрддреНрд╡реЛрдВ рдХреА рд╢реБрд░реБрдЖрдд рдПрдХ рдмреГрд╣рджрд╛рдиреНрддреНрд░ рд╕реЗ рд╣реЛрддреА рд╣реИред Commas (рдпрд╛ рд▓рд╛рдЗрди рдмреНрд░реЗрдХ) рдЕрд▓рдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБред рдЯреИрдм (рдпрд╛ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди, рдпрд╛ рджреЛрдиреЛрдВ) рддрддреНрд╡реЛрдВ рдХреЗ рдШреЛрдВрд╕рд▓реЗ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рддреЗ рд╣реИрдВред рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдПрдХ рдкрд╛рдЙрдВрдб рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВред рдХреБрдЫ рд╕рд░рд▓ рд▓реЗрдЖрдЙрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:

# Main layout :LinearLayout layout fill, padding 0dp 16dp, orientation vertical :EditText layout fill wrap hint @string/to :EditText layout fill wrap hint @string/subject :EditText layout fill 0dp 1 gravity top hint @string/message :Button#btn_send layout 100dp wrap gravity right text @string/send 

рдРрд╕реЗ AAML рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд:

 <?xml version="1.0" encoding="utf-8"?> <!-- Main layout --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingTop="0dp" android:paddingRight="16dp" android:paddingBottom="0dp" android:paddingLeft="16dp" android:orientation="vertical"> <EditText android:layout_width="fill_parent" android:layout_height="match_parent" android:hint="@string/to" /> <EditText android:layout_width="fill_parent" android:layout_height="match_parent" android:hint="@string/subject" /> <EditText android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" android:gravity="top" android:hint="@string/message" /> <Button android:id="@+id/btn_send" android:layout_width="100dp" android:layout_height="match_parent" android:gravity="right" android:text="@string/send" /> </LinearLayout> 

DRY рд╕рд┐рджреНрдзрд╛рдВрдд рдореИрдХреНрд░реЛрдЬрд╝ рдФрд░ рдЙрдкрдирд╛рдо рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЙрдкрдирд╛рдо рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдирд╛рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ - рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ ("рд░реИрдк_ рдХреЙрдиреНрдЯреЗрдВрдЯ" рдХреЗ рдмрдЬрд╛рдп "рд░реИрдк" рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП), рдПрдХ рдорд╛рди (рдПрдХ рдмрд╛рд░ рдлрд╝реЙрдиреНрдЯ рдХреЗ рд░рдВрдЧ рдпрд╛ рдЖрдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдФрд░ рдЙрд░реНрдл тАЛтАЛрдХрд╛ рдЙрдкрдпреЛрдЧ рдЪрд░ рдХреЗ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП), рдЖрджрд┐ред

рдореИрдХреНрд░реЛрдВ рдХрдИ рддрд░реНрдХ рджреЗрддреЗ рд╣реИрдВред рд╕рдЪ рд╣реИ, рдирд╛рдо рддрд░реНрдХреЛрдВ рдХреЛ рдирд╣реАрдВ рджрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╕реНрдерд┐рддрд┐ рд╕рдВрдмрдВрдзреА рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдмреИрд╢ ($ 1, $ 2, $ 3, рдЖрджрд┐) рдореЗрдВред рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ рдФрд░ рдЙрдкрдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 #  :def wrap wrap_content :def fill match_parent :def match match_parent #  :def layout:3 layout_widht $1, layout_height $2, layout_weight $3 :def layout:2 layout_widht $1, layout_height $2 :def layout:1 layout $1 $1 :def padding:4 paddingTop $1, paddingRight $2, paddingBottom $3, paddingLeft $4 :def padding:2 padding $1 $2 $1 $2 :def padding:1 padding $1 $1 

рд╕рдВрднрд╡рддрдГ, рдРрд╕реЗ рдореИрдХреНрд░реЛ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ XML (рд▓реЗрдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП - рдПрдХ, рддрд╛рд░ рдХреЗ рд▓рд┐рдП - рдЕрдиреНрдп, рдЖрджрд┐) рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдЬрдЧрд░ рдореЗрдВ AAML рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд┐рддред рдЗрд╕рдХреА рдХреЛрдИ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреЛрдб рдХреА рдХреЗрд╡рд▓ 200 рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВред рдпрд╣ рджреЛ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдПрдХ .aam рдлрд╝рд╛рдЗрд▓ рдХреЛ * .xml рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреБрди: рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк xml рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рдбрд╛рд▓рддрд╛ рд╣реИред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдпрджрд┐ рдЖрдк рдПрдирд╛рдо / рд▓реЗрдЖрдЙрдЯ, рдПрдирд╛рдо / рдорд╛рди, рдПрдирд╛рдорд▓ / рдПрдХреНрд╕рдПрдордПрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд▓реЗрдЖрдЙрдЯ / рд▓реЗрдЖрдЙрдЯ рдЖрджрд┐ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк custom_rules.xml рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 <?xml version="1.0" encoding="UTF-8"?> <project> <target name="-pre-build"> <exec executable="aaml"> <arg value="aaml"/> <arg value="res"/> </exec> </target> </project> 

рдЕрдм рдЬрдм рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдПрдВрдЧреЗ рддреЛ рд╣рд░ рдмрд╛рд░ xml рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╕реНрд░реЛрдд bitbucket рдкрд░ рд╣реИрдВ: bitbucket.org/zserge/aaml
рд▓рд╛рдЗрд╕реЗрдВрд╕ - MITред

рдкреЛрд╕реНрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдЦрд╛рдмрд░реЛрд╡рд╕реНрдХ рдирд┐рд╡рд╛рд╕рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╡рд╛рд▓ рд╣реИ - рдХреНрдпрд╛ рдпрд╣ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ? рдХреНрдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╢реИрддрд╛рди рд╣реИрдВ рдЬреЛ XML рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдХрд┐рд╕реА рднреА рд╕реБрдЭрд╛рд╡, рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз, рдЯрд┐рдкреНрдкрдгреА, рдмрдЧ, рдЖрд▓реЛрдЪрдирд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

Source: https://habr.com/ru/post/In175193/


All Articles