ボタンを押されたらブラウザでweb siteを表示するintentを作ってみる
1. デザイナにEdit Text (plain Text)を配置
2. デザイナでボタンを配置
3. ボタンのハンドラを以下で記載
// ボタン押下処理
public void onButtonClick(View v){
EditText edv = (EditText) findViewById(R.id.editText);
String stringUri = edv.getText().toString();
// Uri uri = Uri.parse("http://www.google.co.jp");
Uri uri = Uri.parse(stringUri);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
エミュレータでも動作確認できますね
2016年2月21日日曜日
2016年2月20日土曜日
ボタン押下時のハンドラを書く(その2)
よく書籍に乗っていたの(そんでもって前に書いたもの)は、
1. デザイナでボタンを配置する(この時のIDを覚えておく)
2. ハンドラの関数を書く。
3.onCreateでボタンをfindViewByIdして、ハンドラとして登録する。
ですが、ボタンの場合のもうちょっと簡単に書く方法
1. デザイナでボタンを配置する
2. ハンドラの関数をMainAcitivyjavaに書く (MainActivityのメソッドとして書く)
public void onButtonClick(View v){
Toast.makeText(MainActivity.this, "クリックした",Toast.LENGTH_SHORT).show();
}
3. デザイナで配置したボタンを選択し、 onClickに"2"で記載したハンドラ名を選ぶ
こっちの方が簡単ですね。
1. デザイナでボタンを配置する(この時のIDを覚えておく)
2. ハンドラの関数を書く。
3.onCreateでボタンをfindViewByIdして、ハンドラとして登録する。
ですが、ボタンの場合のもうちょっと簡単に書く方法
1. デザイナでボタンを配置する
2. ハンドラの関数をMainAcitivyjavaに書く (MainActivityのメソッドとして書く)
public void onButtonClick(View v){
Toast.makeText(MainActivity.this, "クリックした",Toast.LENGTH_SHORT).show();
}
3. デザイナで配置したボタンを選択し、 onClickに"2"で記載したハンドラ名を選ぶ
こっちの方が簡単ですね。
2016年2月4日木曜日
レイアウトファイルを書き始める
XMLファイルを書き始めはこんな感じでやるみたいだ。
1. ペインをProjectにする
2. res/layoutを右クリック
3. 新規 -> layout resource file を選択
入力用のダイアログが表示されるので以下入力
4. "File name"にファイル名(につながる)を入れる
先頭大文字じゃなくてもいいみたい...
というか、大文字使えないみたいなので、アンダースコアとかにするみたいだ
5. "Root element"に配置用のタグ(ListViewとかLinearLayoutとか)を記載する
文字を入れていると補間してくれるので適当に ...
6. OKボタン押下
デザイナに表示されるので、"デザイン" or "テキスト"に切り替えて表示を調整する
(Projectペインの"layout"に追加されているので選んで修正)
1. ペインをProjectにする
2. res/layoutを右クリック
3. 新規 -> layout resource file を選択
入力用のダイアログが表示されるので以下入力
4. "File name"にファイル名(につながる)を入れる
先頭大文字じゃなくてもいいみたい...
というか、大文字使えないみたいなので、アンダースコアとかにするみたいだ
5. "Root element"に配置用のタグ(ListViewとかLinearLayoutとか)を記載する
文字を入れていると補間してくれるので適当に ...
6. OKボタン押下
デザイナに表示されるので、"デザイン" or "テキスト"に切り替えて表示を調整する
(Projectペインの"layout"に追加されているので選んで修正)
2016年1月25日月曜日
画像リソースをstaticに使用する
ちょっと参考にしている情報と違っていた為...Android studioのversionの違いかもしれないけど(Betaのままだし)
1. explorerで適当な画像(今回は493x357でPNGにした画像)をCtrl-Cでコピー
ファイル名はすべて小文字、拡張子も小文字
2. Android studioのProjectペインでres/drawableのを左クリックしてCtrl-Vでペーストする
3. dialogが出るのでそのままOKとする
今回は"mdpi"が選択されているがその状態で良いようだ
ここで"drawable"を選択した場合に実行時に "INSTALL_FAILED_OLDER_SDK" エラーが発生
(対応version云々と思わしきエラーも出ていたが、上記操作をすれば出なかった)
4. ImageViewにstaticに使用する場合はImageViewをダブルクリックして"..."の選択で↑で
追加したリソースを選択する
1. explorerで適当な画像(今回は493x357でPNGにした画像)をCtrl-Cでコピー
ファイル名はすべて小文字、拡張子も小文字
2. Android studioのProjectペインでres/drawableのを左クリックしてCtrl-Vでペーストする
3. dialogが出るのでそのままOKとする
今回は"mdpi"が選択されているがその状態で良いようだ
ここで"drawable"を選択した場合に実行時に "INSTALL_FAILED_OLDER_SDK" エラーが発生
(対応version云々と思わしきエラーも出ていたが、上記操作をすれば出なかった)
4. ImageViewにstaticに使用する場合はImageViewをダブルクリックして"..."の選択で↑で
追加したリソースを選択する
2015年12月31日木曜日
HP 210aで年賀状を印刷する
毎回忘れるので、メモ
来年は別のプリンタや環境になっているかもしれない...と思いつつ2年くらいたっている訳だが、たぶん来年も同じ事で悩むでしょうw
B210aで印刷する場合は、プリンタのプロパティで設定してアプリから印刷する。
プリンタの選択
- "B210 Series (ネットワーク)"にしておく
"(ネットワーク)"が無い"B210 Series"はuSB接続なので、印刷実行してもウンスン
ページ設定
- 枠を1,1,1,1くらいにしておく(デフォルトは25mmだったか)
補足: 3,3,3,3で、 "印刷->画像の設定"タブで左8.00/上0.00/中央揃えしない で位置合わせは良さそうだった
プロパティの"用紙/品質"タブ
- 給紙方法 : フォトトレイ (はがきの場合)
- 用紙サイズ : はがき
- メディア : インクジェット用官製はがき
- 品質の設定 : "カスタム"にして以下
- 詳細設定 : ICM無効/写真 , フチあり印刷, 高画質, オン, すべてのページを印刷
(1mm程度のフチがある印刷でも問題ない場合の設定。A4で通常トレイでテスト印刷したのと
ほぼ同じくらいの余白で出るイメージだった)
詳細設定の画質については"標準"でもよさそうな気がするが...
※ 上記設定をしても、一度印刷をすると忘れてしまうようなので、印刷する度にやり直しているが正しいのか? (xp)
本体について
- インク残量は結構いい加減な気がするが、実は正しいのかもしれない
(今年は、去年買った178XL blackがステータスでは半分だったが擦れたので交換すると治ったが
使用済みカートリッジを振るとちゃぽちゃぽ音がする...)
- フォトトレイの給紙がここ3年ほど不調
ハガキをややロールさせた状態(横方向の押さえつけを強くした上方向のアーチ)になるように装填
すると調子が良い
あとは残1枚とかだと比較的調子が悪いので、数枚重ねるとか....
インクについて
- ヨドバシで"インク2本で3%オフ"というキャンペーンをやっていたので税込み1000円以内で買えた
- 青を使いまくるので、シアンがよく切れる (バラで良かった?)
- 上記に書いた通り、ステータスではインクがあっても擦れる事があるので出力を確認しながらの印刷が必要
- 品質テスト印刷(ステータスじゃない方)で、一行の最後の方が擦れている場合はインク切れと思われ
(目詰まりはあまり無いような気がする...目詰まりになったらプリンタ毎捨てなんだけど...)
- 互換インクは安いのだとamazonで4色セットで1200円くらい。ヨドバシだと3000円くらい
- 純正インクは4色セットで3500円くらい(amazon/ヨドバシ)
プリンタ後継機について
- HPだとEnvyなんかがこの時期は6000円くらいで売っているのでそっちにすればヘッド毎交換で目詰まりを気にしなくて済むようだ
- 特にHPを贔屓にする必要はないけど、専用ソフトも不要だし複合機で安いし無線LANも手動設定でいけるしで不満はあまり無いかなぁ(印刷も年賀状ハガキなら結構綺麗に出るし)
- 不満といえば、b210aはでかいのが不満だが、安いEnvyは本体液晶が小さいのが不満でどっちもどっちか
結局毎年12/31に印刷して実家に戻ってからあて名&一言書きとかしているのは来年はどうにかしたい感じ
追記 : 2016年版に続く...
来年は別のプリンタや環境になっているかもしれない...と思いつつ2年くらいたっている訳だが、たぶん来年も同じ事で悩むでしょうw
B210aで印刷する場合は、プリンタのプロパティで設定してアプリから印刷する。
プリンタの選択
- "B210 Series (ネットワーク)"にしておく
"(ネットワーク)"が無い"B210 Series"はuSB接続なので、印刷実行してもウンスン
ページ設定
- 枠を1,1,1,1くらいにしておく(デフォルトは25mmだったか)
補足: 3,3,3,3で、 "印刷->画像の設定"タブで左8.00/上0.00/中央揃えしない で位置合わせは良さそうだった
プロパティの"用紙/品質"タブ
- 給紙方法 : フォトトレイ (はがきの場合)
- 用紙サイズ : はがき
- メディア : インクジェット用官製はがき
- 品質の設定 : "カスタム"にして以下
- 詳細設定 : ICM無効/写真 , フチあり印刷, 高画質, オン, すべてのページを印刷
(1mm程度のフチがある印刷でも問題ない場合の設定。A4で通常トレイでテスト印刷したのと
ほぼ同じくらいの余白で出るイメージだった)
詳細設定の画質については"標準"でもよさそうな気がするが...
※ 上記設定をしても、一度印刷をすると忘れてしまうようなので、印刷する度にやり直しているが正しいのか? (xp)
本体について
- インク残量は結構いい加減な気がするが、実は正しいのかもしれない
(今年は、去年買った178XL blackがステータスでは半分だったが擦れたので交換すると治ったが
使用済みカートリッジを振るとちゃぽちゃぽ音がする...)
- フォトトレイの給紙がここ3年ほど不調
ハガキをややロールさせた状態(横方向の押さえつけを強くした上方向のアーチ)になるように装填
すると調子が良い
あとは残1枚とかだと比較的調子が悪いので、数枚重ねるとか....
インクについて
- ヨドバシで"インク2本で3%オフ"というキャンペーンをやっていたので税込み1000円以内で買えた
- 青を使いまくるので、シアンがよく切れる (バラで良かった?)
- 上記に書いた通り、ステータスではインクがあっても擦れる事があるので出力を確認しながらの印刷が必要
- 品質テスト印刷(ステータスじゃない方)で、一行の最後の方が擦れている場合はインク切れと思われ
(目詰まりはあまり無いような気がする...目詰まりになったらプリンタ毎捨てなんだけど...)
- 互換インクは安いのだとamazonで4色セットで1200円くらい。ヨドバシだと3000円くらい
- 純正インクは4色セットで3500円くらい(amazon/ヨドバシ)
プリンタ後継機について
- HPだとEnvyなんかがこの時期は6000円くらいで売っているのでそっちにすればヘッド毎交換で目詰まりを気にしなくて済むようだ
- 特にHPを贔屓にする必要はないけど、専用ソフトも不要だし複合機で安いし無線LANも手動設定でいけるしで不満はあまり無いかなぁ(印刷も年賀状ハガキなら結構綺麗に出るし)
- 不満といえば、b210aはでかいのが不満だが、安いEnvyは本体液晶が小さいのが不満でどっちもどっちか
結局毎年12/31に印刷して実家に戻ってからあて名&一言書きとかしているのは来年はどうにかしたい感じ
追記 : 2016年版に続く...
2015年11月10日火曜日
Android Studioの設定(文字コード・SDK version)
Android Studioでよく変更する部分の覚書
- 文字コード
- File -> Settings -> Edor -> File Encoding -> Project Encoding < ここをUTF-8にする
- Default Encoding < こっちもUTF-8にして右のチェックを入れておく
- SDK version
- File -> Project Structure -> Flavorsタブ
- うまく動かなかったときなど、minimum SDK versionなどを変更する
2015年10月19日月曜日
background処理を書いてみる
調べてみると、以下のように作るのが一般的?のようだ
1. IntentServiceを継承したクラスを記載
runnableのrunをOverrideし、重い処理を書く
IntentServiceのコンストラクタでHandlerをnewする
IntentServiceのonHandleIntentでhandlerをpostする(これによってUIスレッド側で処理を実施)
一定時間後に繰り返したい場合はpostDelayedで遅延実行
(ThreadSleepを使っても同じようだ)
2. MainActivityで上記Intentを作成、開始 startService で開始
データのやりとりとしては
MainActivity -> IntentService
開始時(startServiceする前)にsetActionで文字列を渡す
IntentService -> MainActivity
MainActivityでBroadcastReceiverを登録しておく
Intentを作成し、putExtraで文字列を登録し、sendBroadcastで送信
---
public class MainActivity extends Activity {
Button buttonStart;
static public TextView textCount;
Intent intent;
boolean isRunning = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonStart = (Button)findViewById(R.id.button_start);
textCount = (TextView)findViewById(R.id.text_count);
// ボタン押下時のハンドラ
buttonStart.setOnClickListener(new ButtonClickListener_startButton()); // 実体は↓のクラス
// Broadcastを受けとるReceiverを設定
DataReceiver dataReceiver = new DataReceiver();
// LocalBroadcastの設定
IntentFilter intentFilter = new IntentFilter("BkTimerEvent");
LocalBroadcastManager.getInstance(this).registerReceiver(dataReceiver, intentFilter);
}
// ボタン押下ハンドラとして登録される
private class ButtonClickListener_startButton implements View.OnClickListener {
@Override
public void onClick(View v){
Log.d("BackgroundTimer", "onClick"); // ログ出力
intent = new Intent(getApplication(), BackgroundIntentTimer.class); // intentを生成
intent.setAction("start"); // 文字列を受け渡す。受け側はonHandleIntentの引数から、getActionで文字列を取得する事ができる(putExtraでも同様の事が出来そう)
startService(intent); // 開始。onHandleIntentが呼び出され
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
// Broadcastを受けとる
public class DataReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent){
Log.d("BackgroundTimer", "MainActivity Received");
// Broadcastされたメッセージを取り出す
String message = intent.getStringExtra("Message");
if(message!=null) {
textCount.setText(message);
}
}
}
}
---
package com.example.training.backgroundtimer;
import android.app.IntentService;
import android.content.Intent;
import android.os.Handler;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log;
/**
* Timer
*/
public class BackgroundIntentTimer extends IntentService{
private Handler handler;
public BackgroundIntentTimer(){
super("com.example.training.backgroundtimer.BackgroundIntentTimer");
handler = new Handler();
}
@Override
protected void onHandleIntent(Intent intent) {
Log.d("BackgroundTimer", "onHandleIntent");
String action = intent.getAction(); // Activity側でsetActionした内容を出力
// callbackをremoveしないと重複処理される為
handler.removeCallbacks(thread);
if(action.equals("start")){
count = 0;
handler.post(thread); // UIスレッドに対して処理をポストする(描画処理の為)
}
Log.d("BackgroundTimer", action);
}
// スレッド
private Runnable thread = new Runnable() {
@Override
public void run() {
// ここに重い処理を呼び出す
Log.d("BackgroundTimer", "run!!");
timerProcess();
}
};
private void timerProcess(){
// 表示更新用にメッセージ(Intent)送信
Log.d("BackgrountTimer", "timer Process"); Intent messageIntent = new Intent("BkTimerEvent");
messageIntent.putExtra("Message", Integer.toString(count));
LocalBroadcastManager.getInstance(this).sendBroadcast((messageIntent));
// 1秒ごとにカウントアップする処理
/*
try {
LocalBroadcastManager.getInstance(this).sendBroadcast((messageIntent)); handler.removeCallbacks(thread);
Thread.sleep(1000);
} catch (InterruptedException ie){
Log.d("BackgroundTimer", "timer error");
}
*/
handler.removeCallbacks(thread); handler.postDelayed(thread,1000); // 遅延実行する場合
// handler.post(thread); //Thread.sleepする場合
}
}
}
1. IntentServiceを継承したクラスを記載
runnableのrunをOverrideし、重い処理を書く
IntentServiceのコンストラクタでHandlerをnewする
IntentServiceのonHandleIntentでhandlerをpostする(これによってUIスレッド側で処理を実施)
一定時間後に繰り返したい場合はpostDelayedで遅延実行
(ThreadSleepを使っても同じようだ)
2. MainActivityで上記Intentを作成、開始 startService で開始
データのやりとりとしては
MainActivity -> IntentService
開始時(startServiceする前)にsetActionで文字列を渡す
IntentService -> MainActivity
MainActivityでBroadcastReceiverを登録しておく
Intentを作成し、putExtraで文字列を登録し、sendBroadcastで送信
---
public class MainActivity extends Activity {
Button buttonStart;
static public TextView textCount;
Intent intent;
boolean isRunning = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonStart = (Button)findViewById(R.id.button_start);
textCount = (TextView)findViewById(R.id.text_count);
// ボタン押下時のハンドラ
buttonStart.setOnClickListener(new ButtonClickListener_startButton()); // 実体は↓のクラス
// Broadcastを受けとるReceiverを設定
DataReceiver dataReceiver = new DataReceiver();
// LocalBroadcastの設定
IntentFilter intentFilter = new IntentFilter("BkTimerEvent");
LocalBroadcastManager.getInstance(this).registerReceiver(dataReceiver, intentFilter);
}
// ボタン押下ハンドラとして登録される
private class ButtonClickListener_startButton implements View.OnClickListener {
@Override
public void onClick(View v){
Log.d("BackgroundTimer", "onClick"); // ログ出力
intent = new Intent(getApplication(), BackgroundIntentTimer.class); // intentを生成
intent.setAction("start"); // 文字列を受け渡す。受け側はonHandleIntentの引数から、getActionで文字列を取得する事ができる(putExtraでも同様の事が出来そう)
startService(intent); // 開始。onHandleIntentが呼び出され
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
// Broadcastを受けとる
public class DataReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent){
Log.d("BackgroundTimer", "MainActivity Received");
// Broadcastされたメッセージを取り出す
String message = intent.getStringExtra("Message");
if(message!=null) {
textCount.setText(message);
}
}
}
}
---
package com.example.training.backgroundtimer;
import android.app.IntentService;
import android.content.Intent;
import android.os.Handler;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log;
/**
* Timer
*/
public class BackgroundIntentTimer extends IntentService{
private Handler handler;
public BackgroundIntentTimer(){
super("com.example.training.backgroundtimer.BackgroundIntentTimer");
handler = new Handler();
}
@Override
protected void onHandleIntent(Intent intent) {
Log.d("BackgroundTimer", "onHandleIntent");
String action = intent.getAction(); // Activity側でsetActionした内容を出力
// callbackをremoveしないと重複処理される為
handler.removeCallbacks(thread);
if(action.equals("start")){
count = 0;
handler.post(thread); // UIスレッドに対して処理をポストする(描画処理の為)
}
Log.d("BackgroundTimer", action);
}
// スレッド
private Runnable thread = new Runnable() {
@Override
public void run() {
// ここに重い処理を呼び出す
Log.d("BackgroundTimer", "run!!");
timerProcess();
}
};
private void timerProcess(){
// 表示更新用にメッセージ(Intent)送信
Log.d("BackgrountTimer", "timer Process"); Intent messageIntent = new Intent("BkTimerEvent");
messageIntent.putExtra("Message", Integer.toString(count));
LocalBroadcastManager.getInstance(this).sendBroadcast((messageIntent));
// 1秒ごとにカウントアップする処理
/*
try {
LocalBroadcastManager.getInstance(this).sendBroadcast((messageIntent)); handler.removeCallbacks(thread);
Thread.sleep(1000);
} catch (InterruptedException ie){
Log.d("BackgroundTimer", "timer error");
}
*/
handler.removeCallbacks(thread); handler.postDelayed(thread,1000); // 遅延実行する場合
// handler.post(thread); //Thread.sleepする場合
}
}
}
登録:
投稿 (Atom)