- 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 〜) も含まれる
repositories{
maven {
// Google Maven Repository
url "https://maven.google.com"
}
}
dependencies {
compile "com.android.support:appcopmat-v7:26.0.0-beta1"
}
- New issue tracker https://issuetracker.google.com > Developer Tools > Support Libraries
- Android Studio で support library を開発できるようになった
- External contributions https://android.googlesource.com/platform/frameworks/support/
XML Font (14+)
- font を xml で指定できるようになった
- res/font/font1.ttf, res/font/xml_font.xml
- font-family で font をグループ化
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
<font
app:fontStyle="normal"
app:fontWeight="400"
app:font="@font/myfont_regular" />
<font
app:fontStyle="normal"
app:fontWeight="800"
app:font="@font/myfont_bold" />
</font-family>
<TextView ...
android:fontFamily="@font/myfont"
android:textStyle="bold" />
Typeface typeface = ResourceCompat.getFont(context, R.font.myFont);
textView.setTypeface(typeface);
Downloadable Fonts(14+)
- 今までもフォントファイルをアプリの中に持って使うことができたがアプリサイズが大きくなる要因
- Font Provider は font を fetch し、cache し、アプリが必要なフォントを返す
- 複数のアプリから単一のエントリーポイント(FontsContractCompat)を経て Font Provider にアクセスする
- 複数のアプリでメモリを節約できる
- Font Provider は Google Play Services を介して 800+ の Google Fonts を利用できる
FontRequest request = new FontRequest(
"com.example.fontprovider.authority",
"com.example.fontprovider",
"Name fo font",
R.array.certs);
FontsContractCompat.FontRequestCallback callback =
new FontsContractCompat.FontRequestCallback() {
@Override
public void onTypefaceRetrieved(Typeface typeface) {}
@Override
public void onTypefaceRequestFailed(int reason) {}
};
FontsContractCompat.requestFont(context, request, callback, new Handler());
- https://developer.android.com/reference/android/support/v4/provider/FontsContractCompat.html
- https://developer.android.com/reference/android/support/v4/provider/FontRequest.html
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
app:fontProviderAuthority="com.example.fontprovider.authority"
app:fontProviderPackage="com.example.fontprovider"
app:fontProviderQuery="dancing-script"
app:fontProviderCerts="@array/certs">
</font-family>
- これをレイアウトに指定したら、フォントを fetch して適用するまでやってくれる
- 適用できるまでの間はデフォルトのフォントで表示される
- Android Studio で google fonts からフォントを選択できるようになった(3.0)
- 自動で downloadedfont.xml が作られる
- Sample app
- Public Docs
- Google Fonts docs
- Google Play Services v11 beta
Emoji Compatibility Library (19+)
tofu 問題を解決するぞ
dependencies {
compile "com.android.support:support-emoji:${version}"
}
FontRequest fontRequest = new FontRequest(
"com.example.fontprovider",
"com.example",
"emoji compat Font Query",
CERTIFICATES);
);
EmojiCompat.Config config = new FontRequstEmojiCompatConfig(this, fontRequest);
EmojiCompat.init(config);
- Google Play Service がないデバイスをターゲットにするには
- Bundled configuration - 7MB
dependencies {
compile "com.android.support:support-emoji-bundled:${version}"
}
EmojiCompat.Config config = new BundledEmojiCompatConfig(this);
EmojiCompat.init(config);
- android.support.text.emoji.widget.EmojiTextView, EmojiEditText, EmojiButton
- 自動で Emoji Compat を利用して Emoji を表示する
- Sample app
- Public Docs
- Google Play Services v11 beta
Autosizing TextView
<TextView
...
app:autoSizeTextType="uniform" />
より細かく指定したい場合
xml で定義したサイズの中から一番合うサイズを選択してくれる
<TextView
...
app:autoSizeTextType="uniform"
app:autoSizePresetSizes="@array/autosize_sizes" />
min, max を指定する場合
<TextView
...
app:autoSizeTextType="uniform"
app:autoSizeMinTextSize="12sp"
app:autoSizeMaxTextSize="100sp"
app:autoSizeStepGranularity="2sp" />
DynamicAnimation (16+)
- Velocity, not duration
- Natural-looking animations
- Supports direct interaction
- SpringAnimation, FlingAnimation
final SpringAnimation anim = new SpringAnimation(
bugdroidImageView, // object to animate
TRANSLATION_Y, // property to animate
0); // equilibrim state
anim.getSpring()
.setDampingRatio(0.7f /* lower is more bouncy */)
.setStiffness(1500f /* higher oscillates faster */)
anim.setStartVelocity(velocityTracker.getYVelocity())
.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
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="600dp"
android:width="320dp"
android:viewportHeight="600"
android:viewportWidth="320">
<group>
<path android:name="buffalo_path"
android:pathData="@string/buffalo" />
</group>
</vector>
res/anim/buffalo_to_hippo.xml
<objectAnimator
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:propertyName="pathData"
android:valueFrom="@string/buffalo"
android:valueTo="@string/hippo"
android:valueType="pathType" />
res/drawable/animal_morph.xml
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/buffalo">
<target android:name="buffalo_path"
android:animation="@anim/buffalo_to_hippo" />
</animated-vector>
aapt を使う
res/drawable/animal_morph.xml
<animated-vector
xmlns:aapt="http://schemas.android.com/aapt"
xmlns:android="http://schemas.android.com/apk/res/android">
<aapt:attr name="android:drawable">
<vector
android:height="600dp"
android:width="320dp"
android:viewportHeight="600"
android:viewportWidth="320">
<group>
<path android:name="buffalo_path"
android:pathData="@string/buffalo" />
</group>
</vector>
</aapt:attr>
<target android:name="buffalo_path"
android:animation="@anim/buffalo_to_hippo" />
</animated-vector>
全部を1つのファイルにする
res/drawable/animal_morph_bundle.xml
<animated-vector
xmlns:aapt="http://schemas.android.com/aapt"
xmlns:android="http://schemas.android.com/apk/res/android">
<aapt:attr name="android:drawable">
<vector
android:height="600dp"
android:width="320dp"
android:viewportHeight="600"
android:viewportWidth="320">
<group>
<path android:name="buffalo_path"
android:pathData="@string/buffalo" />
</group>
</vector>
</aapt:attr>
<target android:name="buffalo_path">
<aapt:attr name="android:animation">
<objectAnimator
android:duration="1000"
android:propertyName="pathData"
android:valueFrom="@string/buffalo"
android:valueTo="@string/hippo"
android:valueType="pathType" />
</aapt:attr>
</target>
</animated-vector>
<pathInterpolator>
- Parity with platform AVD
- <objectAnimator> で利用 android:interpolator
- Used VectorDrawable (SVG-like) path data
<pathInterpolator
xmlns:android="http://schemas.android.com/apk/res/android"
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 moduleTV
LeanbackPreferenceDataStore
PreferenceDataStore- preference storage mechanism のカスタマイズを可能に
class CloudDataStore extends PreferenceDataStore {
@Override
public void putBoolean(String key, boolean value) {
// cache value immediately, launch async task to persist
// data to cloud service.
}
@Override
public void getBoolean(String key, boolean defValue) {
// Return cached value.
return false;
}
}
メソッドは Main スレッドで呼ばれるので注意
// Set up this PreferenceFragment to store
// and retrieve data using CloudDataStore.
PreferenceManager prefManager = getPreferenceManager();
CloudDataStore cloudStore = new CloudDataStore();
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.
0 件のコメント:
コメントを投稿