2017年5月23日火曜日

What's New in Android Support Library (Google I/O '17)

  • v26.0.0-beta1 の話
  • support library の minSdkVersion が 14 になった
  • メソッドやクラスを削減して、メソッドカウントが約1.4k減った
  • 今後より多くメソッドやクラスを削減したいので 約 30 classes / interfaces, 約 400 メソッドが deprecated になった
    • later version で削除される予定
  • Google Maven Repository で配布されるようになった
    • Constraint Layout Library や Architecture Components Library も含まれる
    • 過去の Support Library version (13.0.0 〜) も含まれる
  1. repositories{  
  2.  maven {  
  3.   // Google Maven Repository  
  4.   url "https://maven.google.com"  
  5.  }  
  6. }  
  7.   
  8. dependencies {  
  9.  compile "com.android.support:appcopmat-v7:26.0.0-beta1"  
  10. }  

XML Font (14+)

  • font を xml で指定できるようになった
  • res/font/font1.ttf, res/font/xml_font.xml
  • font-family で font をグループ化
res/font/myfont.xml
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <font-family xmlns:app="http://schemas.android.com/apk/res-auto">  
  3.   <font   
  4.     app:fontStyle="normal"   
  5.     app:fontWeight="400"   
  6.     app:font="@font/myfont_regular" />  
  7.   <font   
  8.     app:fontStyle="normal"  
  9.     app:fontWeight="800"  
  10.     app:font="@font/myfont_bold" />  
  11. </font-family>  
  1. <TextView ...  
  2.   android:fontFamily="@font/myfont"  
  3.   android:textStyle="bold" />  
  1. Typeface typeface = ResourceCompat.getFont(context, R.font.myFont);  
  2. textView.setTypeface(typeface);  


Downloadable Fonts(14+)

  • 今までもフォントファイルをアプリの中に持って使うことができたがアプリサイズが大きくなる要因
  • Font Provider は font を fetch し、cache し、アプリが必要なフォントを返す
  • 複数のアプリから単一のエントリーポイント(FontsContractCompat)を経て Font Provider にアクセスする
    • 複数のアプリでメモリを節約できる
  • Font Provider は Google Play Services を介して 800+ の Google Fonts を利用できる
  1. FontRequest request = new FontRequest(  
  2.   "com.example.fontprovider.authority",  
  3.   "com.example.fontprovider",  
  4.   "Name fo font",  
  5.   R.array.certs);  
  6.   
  7. FontsContractCompat.FontRequestCallback callback =  
  8.   new FontsContractCompat.FontRequestCallback() {  
  9.     @Override  
  10.     public void onTypefaceRetrieved(Typeface typeface) {}  
  11.   
  12.     @Override  
  13.     public void onTypefaceRequestFailed(int reason) {}  
  14.   };  
  15. FontsContractCompat.requestFont(context, request, callback, new Handler());  
xml/font/downloadedfont.xml
  1. <!--xml version="1.0" encoding="utf-8"?-->  
  2. <font-family xmlns:app="http://schemas.android.com/apk/res-auto">  
  3.   app:fontProviderAuthority="com.example.fontprovider.authority"  
  4.   app:fontProviderPackage="com.example.fontprovider"  
  5.   app:fontProviderQuery="dancing-script"  
  6.   app:fontProviderCerts="@array/certs">  
  7. </font-family>  
  • これをレイアウトに指定したら、フォントを fetch して適用するまでやってくれる
  • 適用できるまでの間はデフォルトのフォントで表示される
  • Android Studio で google fonts からフォントを選択できるようになった(3.0)
    • 自動で downloadedfont.xml が作られる

Emoji Compatibility Library (19+)

tofu 問題を解決するぞ
  1. dependencies {  
  2.  compile "com.android.support:support-emoji:${version}"  
  3. }  
  1. FontRequest fontRequest = new FontRequest(  
  2.   "com.example.fontprovider",  
  3.   "com.example",  
  4.   "emoji compat Font Query",   
  5.   CERTIFICATES);  
  6. );  
  7.   
  8. EmojiCompat.Config config = new FontRequstEmojiCompatConfig(this, fontRequest);  
  9. EmojiCompat.init(config);  
  • Google Play Service がないデバイスをターゲットにするには
    • Bundled configuration - 7MB
  1. dependencies {  
  2.  compile "com.android.support:support-emoji-bundled:${version}"  
  3. }  
  1. EmojiCompat.Config config = new BundledEmojiCompatConfig(this);  
  2. EmojiCompat.init(config);  
  • android.support.text.emoji.widget.EmojiTextView, EmojiEditText, EmojiButton
    • 自動で Emoji Compat を利用して Emoji を表示する

Autosizing TextView

  1. <TextView  
  2.   ...  
  3.   app:autoSizeTextType="uniform" />  
より細かく指定したい場合
xml で定義したサイズの中から一番合うサイズを選択してくれる
  1. <TextView  
  2.   ...  
  3.   app:autoSizeTextType="uniform"  
  4.   app:autoSizePresetSizes="@array/autosize_sizes" />  
min, max を指定する場合
  1. <TextView  
  2.   ...  
  3.   app:autoSizeTextType="uniform"  
  4.   app:autoSizeMinTextSize="12sp"  
  5.   app:autoSizeMaxTextSize="100sp"  
  6.   app:autoSizeStepGranularity="2sp" />  

DynamicAnimation (16+)

  1. final SpringAnimation anim = new SpringAnimation(  
  2.   bugdroidImageView, // object to animate  
  3.   TRANSLATION_Y,     // property to animate  
  4.   0);                // equilibrim state  
  5.   
  6. anim.getSpring()  
  7.   .setDampingRatio(0.7f /* lower is more bouncy */)  
  8.   .setStiffness(1500f /* higher oscillates faster */)  
  9.   
  10. anim.setStartVelocity(velocityTracker.getYVelocity())  
  11.   .start();  

Vector Drawable Compat - FillType (14+)

  • android:fillType
  • Determines "inside" of shape
  • Corresponds to SVG's fill-rule
  • Commonly used by vector drawing tools

Animated Vector Drawable Compat - pathData morphing (14+)

  • Animate <vector> android:pathData attribute
  • Set valueFrom, valueTo using VectorDrawable path data
  • Path formats must match
res/drawable/buffalo.xml
  1. <vector xmlns:android="http://schemas.android.com/apk/res/android"  
  2.   android:height="600dp"  
  3.   android:width="320dp"  
  4.   android:viewportHeight="600"  
  5.   android:viewportWidth="320">  
  6.   <group>  
  7.     <path android:name="buffalo_path"  
  8.           android:pathData="@string/buffalo" />  
  9.   </group>  
  10. </vector>  
res/anim/buffalo_to_hippo.xml
  1. <objectAnimator   
  2.   xmlns:android="http://schemas.android.com/apk/res/android"  
  3.   android:duration="1000"  
  4.   android:propertyName="pathData"  
  5.   android:valueFrom="@string/buffalo"  
  6.   android:valueTo="@string/hippo"  
  7.   android:valueType="pathType" />  
res/drawable/animal_morph.xml
  1. <animated-vector xmlns:android="http://schemas.android.com/apk/res/android"  
  2.   android:drawable="@drawable/buffalo">  
  3.   <target android:name="buffalo_path"  
  4.           android:animation="@anim/buffalo_to_hippo" />  
  5. </animated-vector>  
aapt を使う res/drawable/animal_morph.xml
  1. <animated-vector  
  2.   xmlns:aapt="http://schemas.android.com/aapt"  
  3.   xmlns:android="http://schemas.android.com/apk/res/android">  
  4.   <aapt:attr name="android:drawable">  
  5.     <vector  
  6.       android:height="600dp"  
  7.       android:width="320dp"  
  8.       android:viewportHeight="600"  
  9.       android:viewportWidth="320">  
  10.       <group>  
  11.         <path android:name="buffalo_path"  
  12.               android:pathData="@string/buffalo" />  
  13.       </group>  
  14.     </vector>  
  15.   </aapt:attr>  
  16.   <target android:name="buffalo_path"  
  17.           android:animation="@anim/buffalo_to_hippo" />  
  18. </animated-vector>  
全部を1つのファイルにする res/drawable/animal_morph_bundle.xml
  1. <animated-vector  
  2.   xmlns:aapt="http://schemas.android.com/aapt"  
  3.   xmlns:android="http://schemas.android.com/apk/res/android">  
  4.   <aapt:attr name="android:drawable">  
  5.     <vector  
  6.       android:height="600dp"  
  7.       android:width="320dp"  
  8.       android:viewportHeight="600"  
  9.       android:viewportWidth="320">  
  10.       <group>  
  11.         <path android:name="buffalo_path"  
  12.               android:pathData="@string/buffalo" />  
  13.       </group>  
  14.     </vector>  
  15.   </aapt:attr>    
  16.   <target android:name="buffalo_path">  
  17.     <aapt:attr name="android:animation">  
  18.       <objectAnimator   
  19.         android:duration="1000"  
  20.         android:propertyName="pathData"  
  21.         android:valueFrom="@string/buffalo"  
  22.         android:valueTo="@string/hippo"  
  23.         android:valueType="pathType" />      
  24.     </aapt:attr>  
  25.   </target>  
  26. </animated-vector>  

<pathInterpolator>

  • Parity with platform AVD
  • <objectAnimator> で利用 android:interpolator
  • Used VectorDrawable (SVG-like) path data
  1. <pathInterpolator  
  2.   xmlns:android="http://schemas.android.com/apk/res/android"  
  3.   android:pathData="M 0.0, 0.0 c 0.08,0.0 0.04,1.0 0.2,0.8 l 0.6,0.1 L 1.0,1.0" />  

Wear

New support-wear module

TV

Leanback

PreferenceDataStore

PreferenceDataStore
  • preference storage mechanism のカスタマイズを可能に
  1. class CloudDataStore extends PreferenceDataStore {  
  2.  @Override  
  3.  public void putBoolean(String key, boolean value) {  
  4.      // cache value immediately, launch async task to persist  
  5.      // data to cloud service.  
  6.  }  
  7.   
  8.  @Override  
  9.  public void getBoolean(String key, boolean defValue) {  
  10.      // Return cached value.  
  11.      return false;  
  12.  }  
  13. }  
メソッドは Main スレッドで呼ばれるので注意
  1. // Set up this PreferenceFragment to store  
  2. // and retrieve data using CloudDataStore.  
  3. PreferenceManager prefManager = getPreferenceManager();  
  4. CloudDataStore cloudStore = new CloudDataStore();  
  5. prefManager.setPreferenceDataStore(cloudStore);  

FragmentManager

executePendingTransaction(), commitNow(), and similar transaction calls are no longer allowed during FragmentManager state changes.

FrameMetricsAggregator

  • FrameMetricsAggregator
  • Performance monitoring tool used to capture a variety of information about Activity drawing.

ActionBarDrawerToggle

setDrawerSlideAnimationEnabled() メソッドで Navigation drawer のアイコンのアニメーションを無効化できる


0 件のコメント:

コメントを投稿