Library Project の R.java のフィールドに final が付いてた
ADT 14 から Library Project の R.id.* とかに final がつかなくなって、switch-case を if-else に書き換えさせられたけど、今生成された R.java を見ると final がついますな。
これも ADT 20 から?
どうも勘違いだったみたい...。
ADT 20 でRelease用にビルドして設定を開いたらクラッシュする件
PreferenceActivity から PreferenceFragment を継承したクラスをロードするところで...。
AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx/xxx.activity.TabletSettingActivity}: android.app.Fragment$InstantiationException: Unable to instantiate fragment xxx.activity.SettingActivity$CheckFragment: make sure class name exists, is public, and has an empty constructor that is public : Caused by: java.lang.ClassNotFoundException: xxx.activity.SettingActivity$CheckFragment at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61) at java.lang.ClassLoader.loadClass(ClassLoader.java:501) at java.lang.ClassLoader.loadClass(ClassLoader.java:461) at android.app.Fragment.instantiate(Fragment.java:574)
いままで問題が無かったのにどうして問題が起こったのか...
ADT 18 の ${sdk.dir}\tools\proguard\proguard-android.txt には↓この行があったが、ADT 20 では無くなっていた。
-keep public class * extends android.app.Fragment
ADT 20 からは、xml から参照されているActivityやFragmentは勝手に -keep class されるようになったらしい。おかげで無駄に -keep class することがなくなり、以前に比べて apk のサイズが縮むようになった。
勝手に -keep class されたものは bin/proguard.txt で確認できた。
ただ、どういうわけか
とりあえず、手動で追加して対処。
-keep class * extends android.preference.PreferenceFragment
Fragmentが追加されたり削除されたりしたときに何かする
Fragment といっても本物じゃなくて android.support.v4.app.Fragment のほう。
たとえば、ActionBar を自作しようと思ったときとか必要かも。
FragmentActivity#supportInvalidateOptionsMenu()
ここらへん使うとよさげ?
Activityのアニメーションの制御
ひとつのActivityから複数のActivityを順番に呼び出すとき。
- A から B を呼び出す
- B が結果を返す
- A から C を呼び出す
- C でBACKが押された
- A から B を再び呼び出す
今作ってるアプリで、5 番目の画面遷移が Close ではなく Open のアニメーションになってしまい(戻る操作なのに進むアニメーションになってしまう)、すごく違和感があって気になっていたんだけど、回避方法があるんですな。
Android 2.1 から利用可能。
こんな感じで使ってみた。
static void setActivityAnimation(Activity activity, boolean forward) { if (!forward) { Theme theme = activity.getTheme(); TypedValue tv = new TypedValue(); theme.resolveAttribute(android.R.attr.windowAnimationStyle, tv, true); TypedArray ta = theme.obtainStyledAttributes(tv.resourceId, new int [] { android.R.attr.activityCloseEnterAnimation, android.R.attr.activityCloseExitAnimation, }); int enterAnim = ta.getResourceId(0, 0); int exitAnim = ta.getResourceId(1, 0); ta.recycle(); activity.overridePendingTransition(enterAnim, exitAnim); } }
1つ前の画面を呼び出すときに、戻ってるアニメーションになり違和感が無くなった。
HTC One S
Galaxy Nexus があまりにもカクカクしすぎなので、ほかの Android 4.0 以降の端末が気になってたので購入。
Galaxy Nexus と違ってCPUが Snapdragon S4 というやつで、ベンチマークでは Galaxy Nexus よりだいぶ良いって話だったので期待していたんだけど、使った感じでは Xperia ray なんかの「古い端末 + 古いOS」の方が動きがスムースですなぁ...。
HTC One S を起動してまず気になったのはディスプレイの質が悪いこと。ペンタイルだしすごくギラギラしてる。少し斜めから見ただけで色が変わるのも気になった。
UIはこれまでのHTC端末同様でかなり独特だし見た目もあまりかっこよくないですな。ブラウザやギャラリーも独特で素のAndroidに慣れていると戸惑う。
個人的にはこれならSonyやSHARPのガラスマのほうがおすすめできますな。もちろんAndroidの中で選ぶならだけど。
端末にMENUキーが無いので、画面上にMENUボタンが表示されてる図。(BACKやHomeはキーがついてるので画面に出てこない)
7インチで1280x800の端末
7インチで高解像度の端末が無かったので購入。
density は 1.3312501 。
この端末もなぜかドットバイドットでスクリーンキャプチャが撮れなくてボケてる。たまにこういう端末があるけどなんなんだろう...。
このスクリーンショットではわかりにくいけど、マーケットの背景にある斜線の部分が、この端末ではギザギザに見えてしまう。densityが中途半端だからなのかな。
電源用のコネクタとケーブルがごつい...。PCと接続するためのUSB端子はカバーをあけなければアクセスできず、個人的にはちょっと不便。
Android端末をはじめてテレビにつなげてみたけど、結構パフォーマンスが落ちますな。この端末だけかもしれないけどHDMI接続するとタッチの反応がものすごく悪くなり、マルチタッチはほとんど認識できなくなってしまった。
TOSHIBA REGZA Tablet AT3S0/35D レグザタブレット Android3.2 タッチパネル付き 7型ワイド PA3S035DNAS
- 出版社/メーカー: 東芝(TOSHIBA)
- 発売日: 2011/10/21
- メディア: Personal Computers
- クリック: 99回
- この商品を含むブログ (37件) を見る
4:3や3:2の端末も出てきて欲しい。
Galaxy Nexus で下に MENU ボタンを表示する
targetSDK >= 11 だと MENU ボタンが出なくなるけど、Galaxy Nexus で
requestWindowFeature(Window.FEATURE_NO_TITLE);
としたところ MENU ボタンが出てきた。当然 ActionBar もでない。(targetSDK >= 14 だと出ない)
残念ながら Android 3.1 と 3.2 ではこの方法でもMENUボタンは表示されず。
EditText はどうなるのかと思ったが、必要になったときに ActionBar が出てきました。
ActionBar が出てくるタイミングで画面がずれるのであまりかっこよくはないけど、使えないことも無いレベル。
ActionBarのボタンは長押しするとボタンの説明テキストが出てくるという、Windows 端末ぽい動作になっていた。