Android Activityの背景を透明にする
Taketoma
Activityの背景を透明にするには
テーマとして設定すれば簡単にできる。
res/values/styles.xmlで以下のように記述
activityは指定したアクティビティに適用される。
Easy Sujiはこの透過背景に背景色をつけて
暗くて後ろが透過しているアクティビティを実現している。
使いどころはアイデア次第かと思われるが
面白半分に使いまくるとわけのわからん画面になること間違いなし。
Easy Sujiは何か文章を記述中に呼び出されるので
前後の文字が何か見えた方が使い勝手がよいかなという理由で透過にしています。
テーマとして設定すれば簡単にできる。
res/values/styles.xmlで以下のように記述
--> これをマニフェストファイルのapplicationなりactivityなりに適用すれば、 背景が透明でタイトルバー(アクションバー)が出ないアクティビティができる- true
- true
当然ながらapplicationは、アプリケーション全体に適用。~ or~
activityは指定したアクティビティに適用される。
Easy Sujiはこの透過背景に背景色をつけて
暗くて後ろが透過しているアクティビティを実現している。
使いどころはアイデア次第かと思われるが
面白半分に使いまくるとわけのわからん画面になること間違いなし。
Easy Sujiは何か文章を記述中に呼び出されるので
前後の文字が何か見えた方が使い勝手がよいかなという理由で透過にしています。
10:19
Androidアプリ開発
,
EasySuji
,
開発Tips
Android アプリ内に画像を保存する
Taketoma
Androidで画像を保存する方法としては以下の3パターンがあるかと思う
1)アプリ内に保存
2)SDカード内に保存
3)データベースに保存
自分のアプリでも1)が一番よく使っている。
SLAMDUNKLineの背景やTextIconCreaterIconPackでアイコンを保存しているのは
アプリ内保存です。
Handromemoは2)の方法でSDカードに保存している。
3)は試したことないけれどバイナリで保存できるはず、、、きっと。
1)の方法で画像を保存する方法はこんな感じで簡単。
保存した画像の読み込みも簡単
保存した画像の削除
1)アプリ内に保存
2)SDカード内に保存
3)データベースに保存
自分のアプリでも1)が一番よく使っている。
SLAMDUNKLineの背景やTextIconCreaterIconPackでアイコンを保存しているのは
アプリ内保存です。
Handromemoは2)の方法でSDカードに保存している。
3)は試したことないけれどバイナリで保存できるはず、、、きっと。
1)の方法で画像を保存する方法はこんな感じで簡単。
FileOutputStream out = null;
try {
// openFileOutputはContextのメソッドなのでActivity内ならばthisでOK
out = this.openFileOutput("image.png", Context.MODE_PRIVATE);
image.compress(Bitmap.CompressFormat.PNG, 100, out);
} catch (FileNotFoundException e) {
// エラー処理
} finally {
if (out != null) {
out.close();
out = null;
}
}
保存した画像の読み込みも簡単
InputStream input = null;
try {
input = this.openFileInput("image.png");
} catch (FileNotFoundException e) {
// エラー処理
}
Bitmap image = BitmapFactory.decodeStream(input);
保存した画像の削除
this.deleteFile("image.png");
この方法ならば、画像ファイルだけでなく
各ファイルなんでも保存できるので便利だし、
SDカード使用する際の権限等も不要。
6:45
Androidアプリ開発
,
SlamDunkLine
,
TextIconCreaterForADW
,
開発Tips
AndroidのレイアウトXMLファイルを分割する
Taketoma
Activityなどのレイアウトを定義しているXMLファイルは分割することが可能。
同じレイアウトを使いまわしたいときに便利。
使い方はいたって簡単。
使いまわしたいレイアウトファイルがsub_layout.xmlだとすると
以下のようにincludeの一行を入れたい部分に挿入するだけ。
同じレイアウトを使いまわしたいときに便利。
使い方はいたって簡単。
使いまわしたいレイアウトファイルがsub_layout.xmlだとすると
以下のようにincludeの一行を入れたい部分に挿入するだけ。
これで簡単にレイアウトファイルの使い回しが可能になります。
22:41
Androidアプリ開発
,
開発Tips
AndroidOSのバージョンを判定する
Taketoma
Androidは、3.Xのタブレット用HoneyCombから2.Xのスマートフォン用に比べて
APIが大きく増えている。
2.X系のスマートフォンでは使えないけれど
3.X系のタブレットでは使用したいAPIがあれば、
AndroidOSのバージョンを判定する必要がある。
AndroidOSのバージョンは
Build.VERSION.SDK_INT
で判断できる。
SDKのAPIレベルが返ってくるのでそれで判断する
APIが大きく増えている。
2.X系のスマートフォンでは使えないけれど
3.X系のタブレットでは使用したいAPIがあれば、
AndroidOSのバージョンを判定する必要がある。
AndroidOSのバージョンは
Build.VERSION.SDK_INT
で判断できる。
SDKのAPIレベルが返ってくるのでそれで判断する
if(Build.VERSION.SDK_INT > 10){
// HoneyComb以降
}else{
// GingerBread以前
}
21:37
Androidアプリ開発
,
開発Tips
インテントで他のアプリと連携する
Taketoma
インテントとはAndroid OSでアプリ間やアプリとシステム間の橋渡しをする
素晴らしい機能です。
自分のアプリでできないことは他の機能を持つアプリにしてもらえばいい
というエコな機能です。
そんなインテントで他のアプリと連携する方法をまとめておく。
・テキストを他のアプリに送るインテント
・ブラウザを起動するインテント
・画像を取得するインテント
・マーケット(現Playストア)を検索するインテント
・YouTubeアプリで検索するインテント
・EverNoteアプリで検索するインテント
・明示的にアプリを呼び出すインテント
素晴らしい機能です。
自分のアプリでできないことは他の機能を持つアプリにしてもらえばいい
というエコな機能です。
そんなインテントで他のアプリと連携する方法をまとめておく。
・テキストを他のアプリに送るインテント
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "テキスト");
startActivity(intent);
・ブラウザを起動するインテント
Uri uri = Uri.parse("https://www.google.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
・画像を取得するインテント
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, 0);
・マーケット(現Playストア)を検索するインテント
Uri uri = Uri.parse("market://search?q=" + "検索キーワード");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
・YouTubeアプリで検索するインテント
Intent intent = new Intent(Intent.ACTION_SEARCH);
intent.setPackage("com.google.android.youtube");
intent.putExtra("query", "検索キーワード");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
・EverNoteアプリで検索するインテント
Intent intent = new Intent();
intent.setAction("com.evernote.action.SEARCH_NOTES");
intent.putExtra(SearchManager.QUERY, "検索キーワード");
startActivity(intent);
・明示的にアプリを呼び出すインテント
Intent intent = new Intent();
// パッケージ名とアクティビティ名を明示してインテントを呼び出す
intent.setClassName("パッケージ名", "アクティビティ名");
try{
startActivity(intent);
}catch (ActivityNotFoundException e){
// 明示的に指定したアプリが見つからない場合、Playストアへ直行する
Uri uri = Uri.parse("market://details?id=" + "パッケージ名");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
}
21:00
Androidアプリ開発
,
開発Tips
AndroidのTextViewをカスタムする
Taketoma
そろそろスマートフォンにもAndroid4.0が普及してきそうだ。
Android4.0へのアップデート情報や4.0搭載の新機種の話題がたくさん。
タブレットは普及しているのかは不明だが(我が家にはTF101がある)、
GoogleのNexusタブレットはかなり低価格で販売されそうだとの噂もちらほら。
アプリもいろいろとついていかないといけないなぁと思い
最近はもっぱらAndroid Developer's のReferenceを読みふけっている。
Android3.0以降から使えるようになったAPIはたくさんあるので
勉強してアプリに組み込んでいきたい。
今日はTextViewについてメモっとく。
TextViewは、Android3.0以降から長押しでテキスト選択可能になっている。
テキスト選択するには
TextView#setTextIsSelectable(true)
で選択可能にしてあげると選択モードに切り替わる。
選択モードになると
すべて選択とコピーがアクションバーに表示されるのだが、
これだけだと微妙に使い勝手が悪い。
で、選択モードをカスタムできちゃうのがこのメソッド
TextView#setCustomSelectionActionModeCallback()
使用方法はこんな感じ こんなコールバックインターフェースを実装する。
Android4.0へのアップデート情報や4.0搭載の新機種の話題がたくさん。
タブレットは普及しているのかは不明だが(我が家にはTF101がある)、
GoogleのNexusタブレットはかなり低価格で販売されそうだとの噂もちらほら。
アプリもいろいろとついていかないといけないなぁと思い
最近はもっぱらAndroid Developer's のReferenceを読みふけっている。
Android3.0以降から使えるようになったAPIはたくさんあるので
勉強してアプリに組み込んでいきたい。
今日はTextViewについてメモっとく。
TextViewは、Android3.0以降から長押しでテキスト選択可能になっている。
テキスト選択するには
TextView#setTextIsSelectable(true)
で選択可能にしてあげると選択モードに切り替わる。
選択モードになると
すべて選択とコピーがアクションバーに表示されるのだが、
これだけだと微妙に使い勝手が悪い。
で、選択モードをカスタムできちゃうのがこのメソッド
TextView#setCustomSelectionActionModeCallback()
使用方法はこんな感じ こんなコールバックインターフェースを実装する。
private class TextSelectActionMode implements ActionMode.Callback {
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
if ("custom".equals(item.getTitle())){
// テキストに対してなんらかの処理をする
// 例えば、選択した文字列を()でくくるとか
}
return false;
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// アクションアイテムを作る
MenuItem cutItem = menu.add("custom");
cutItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
cutItem.setIcon(R.drawable.icon);
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
}
そして、以下のようにTextViewにセットするだけでカスタムしたテキストビューができる。
TextView.setCustomSelectionActionModeCallback(new TextSelectActionMode());
22:42
Androidアプリ開発
,
開発Tips
Androidアプリからメールを送る方法
Taketoma
EasySujiの変換候補追加の要望を
Androidマーケットのコメントに書かれることが多かった。
メールの方が事細かにやり取りできると考え、
少し前のバージョンから要望メールを送れるようにした。
その時のTipsが以下
メールが送れるようになったのはいいんだけれども、
よく本文に何も記載されていないメールが届くようになった。。。
メールが送れるようになったといっても、
インテントでメーラーが起動されるにすぎないので
そのまま送信ボタンを押しちゃうというのは
なにか私の思いがうまく伝わっていないのかな?
配置場所?
説明が足りない?
使用方法がわからないといったコメントもあったので、わかりづらいのかな?
わかりやすい、使いやすいを実現するのはなかなか簡単ではないですね
Androidマーケットのコメントに書かれることが多かった。
メールの方が事細かにやり取りできると考え、
少し前のバージョンから要望メールを送れるようにした。
その時のTipsが以下
/**
* メールを送信
*/
private void sendMail(){
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:" + "hogehoge@gmail.com"));
intent.putExtra(Intent.EXTRA_SUBJECT, "件名");
intent.putExtra(Intent.EXTRA_TEXT, "メールの内容");
startActivity(intent);
}
メールが送れるようになったのはいいんだけれども、
よく本文に何も記載されていないメールが届くようになった。。。
メールが送れるようになったといっても、
インテントでメーラーが起動されるにすぎないので
そのまま送信ボタンを押しちゃうというのは
なにか私の思いがうまく伝わっていないのかな?
配置場所?
説明が足りない?
使用方法がわからないといったコメントもあったので、わかりづらいのかな?
わかりやすい、使いやすいを実現するのはなかなか簡単ではないですね
9:43
Androidアプリ開発
,
EasySuji
,
開発Tips
登録:
投稿
(
Atom
)