Adnroid SDKを再インストール後、実行環境を起動できない

Android SDKで、新しいバージョンにアップした場合などに、以下のようなメッセージが出て実行環境を起動できなくなった。

Windows環境でProgram Filesフォルダにインストールした場合に出るようだ。

昔からある障害であるが、実行コマンドのパスにスペースが含まれていたりすると

実行できないというもの。

Android SDKのインストールパスをC:\android-sdkあたりに明示的に指定してインストールすると

正常になる。

シークバーの背景の色を変える

シークバーの背景色を変えたい時には

まず、res/drawble-nodpiに適当な名前(今回はseekbar.xml)でファイルを作成

中身はlayer-listで、itemは以下を定義

  • android:id=”@android:id/background”
  • android:id=”@android:id/secondaryProgress”
  • android:id=”@android:id/progress”

SeekBarオブジェクトでは、以下を指定

背景をグラデーションにする

MediaPlayerのsetVolumeにセットするボリュームの値

MediaPlayerのメソッドにsetVolumeというメソッドがある。

対して、getVolumeというのは、なぜか無い。

それは何故かはあとで調べるとして、

setVolumeの引数は(float leftVolume, float rightVolume)となっている。

左右の音のバランスを設定するためのメソッドのようだ。

が、ハード上のメディアのボリュームをアプリで変更したくない場合

このsetVolumeをいじると良いかもしれない。

だが、このsetVolume、リファレンスを見ても、数値の上限などが書いてない。

サンプルアプリで試してみた所、0~1の浮動小数点数らしい。

署名用ファイルを作成する

アプリをマーケットにリリースするには、署名ファイルを作成する必要がある。

署名ファイルはJAVAのkeytoolというツールを使って作成する。

コマンドの意味は

  • -genkey
    キーファイルを作成するコマンド
  • -keyalg
    キー作成時に使用するアルゴリズム
    DSAかRSAを指定
  • -keystore
    キーストアファイルの名前を指定
  • -alias
    キーの別名を指定
  • -validity
    キーの有効期限を日数で指定

画面下部に常にアクションバーを表示したい

以下のような画面を構成する場合、LinearLayoutだけだと、なかなかうまく配置出来なかったりする。

そこで、実現方法の一つとして

RelativeLayoutを使った方法を試してみる。

scaleTypeについて

scaleTypeは、ImageViewなどのビューに対して、貼り付けるイメージをどのように貼り付けるかを指定する方法で、以下の種類がある

  • CENTER
    サイズ変更せずにエリアの中央に表示
  • CENTER_CROP
    エリアの横幅まで画像を拡大し中央に表示
  • FIT_CENTER
    エリアの縦幅まで画像を拡大し中央に表示
  • FIT_END
    エリアの縦幅まで画像を拡大し右端に寄せて表示
  • FIT_START
    エリアの縦幅まで画像を拡大し左端に寄せて表示
  • FIT_XY
    エリア全体に画像を拡大して表示
  • MATRIX
    不明

画像を画面サイズに切って表示させる

カメラ機能で撮影した画像などを画面にフルスクリーンで表示した場合、縦に伸びてしまったりすることがある。

上下、または左右をカットしてでも画像の縦横比を維持したまま表示したい場合には

という形で、scaleTypeにcenterCropを指定すると、うまい感じに上下、または左右をカットして画面に表示してくれる

タイトルバーを非表示にする

アプリ全体で非表示にする場合

AndroidManifest.xml

で設定する。

applicationタグを

という感じにthemeを設定する

各アクティビティごとにやる場合

とする。

requestWindowFeatureメソッドは、

setContentViewより前に書く必要がある。

drawableのsetLevelとはなんぞや?

setLevel() で drawable に level を設定すると、level list 内を上から走査していって、

設定値より大きい or 等しい android:maxLevel が定義されたリソースを読み込む

level Listとは

res/drawable に置くXMLファイルで

そのファイルの中身は

という書式。

/res/drawable/test.xml

というファイルを作成し、中に

という定義をした場合、setLevel(1)とすれば、test1を参照し、setLevel(2)とすれば、test2を参照する事が出来る

時間などを表示するときに9時間ずれて表示される

たとえば、ゲームの経過時間などを画面に表示したりする場合に

Androidの設定によっては9時間ずれて表示されてしまったりする。

このような場合、タイムゾーンを考慮することで、問題を解決できる。

具体的には

とすることで、タイムゾーンの設定のずれを解消することが出来る。

androidでのUIとHandlerについて

SurfaceViewなどで、スレッドを作って、処理ついでにUIの項目(TextViewなど)を更新しようとしたときに、普通にやると

CalledFromWrongThreadException

というエラーが出てしまう。

AndroidアプリのUIはシングル・スレッド モデルで、スレッドからUIを操作しようとすると例外が発生してしまうのです。

悪い例

この問題を回避する方法としてHandlerを使用して、UIにアクセスする方法があります。

Handlerインスタンスを生成し、postメソッドで実行する処理を与えてやることで

UIスレッドでHandlerに蓄積された処理を実行することが出来ます。

LINX 3Dの通信環境

LINX 3DからはSIMを抜いているという話ついでに、どのように通信を行っているかをちょっと説明。

F-06Bには、Wifiの親機になれるモードがある。これを、アクセスポイントとして

LINX 3DはWifiでF-06Bを経由して通信をする。

F-06Bでは、mopera U 128kにしておけば、パケット上限は5700円になるため、無駄な通信費はかからない。

SPモードも当分やらないし、iアプリのゲームやFXトレードアプリやらオサイフ携帯(LINX 3Dは対応しているが、移動が面倒だし)もまだまだ手放したくないので、この状態がベスト。

Wifi Toggle Widget

LINX 3Dは、SIMを抜いて、Wifiでのみ通信している状態ですが

Wifiを常にONにしていると、なんか微妙に電池の減りが早い気がするので

WifiをON・OFF出来るウィジェットを探してみました。

Wifi Toggle Widget

これ、結構良いです。

が、マーケットのページへのリンクの張り方がわからないので

もし気になる方は、検索して見つけてください。

@Overrideでエラーが出るときの対処

@Overrideでエラーが発生する場合の対処方法

このようなエラーが発生する場合

エラーの内容としては「スーパークラスのメソッドをオーバーライドする必要がある」ですが、ソース上ではしています。

で、このソース、ほかのeclipse環境で見るとエラーが出なかったりするので、環境かな~と調べていたら、エラーが出る環境は

Compiler compliance level:というのが1.5になっておりました。

この項目は

[Window] – [Preferences] – [java] – [compiler]

の中にあります。

これとは別に、プロジェクトにも同様の設定があり、こちらも1.6にすることで

@Overrideのエラーは解消できます。