幸福なプログラマ

プログラマは幸福になれる。

Picassoでエラーの詳細を取得する

Picassoでエラー発生時のコールバックを取得するとき

Picasso.with(context).load(URL).into(ImageView, new Callback() {
        @Override
        public void onSuccess() {
        }

        @Override
        public void onError() {
        }
});

こんな感じに書くことができるけど、これだとエラーの詳細を取得することができない。

以下のようにbuilderにlistenerを設定することでStackTraceなりResponseCodeなり、エラーの詳細を取得することができる。

Picasso.Builder builder = new Picasso.Builder(context);
builder.listener(new Picasso.Listener() {
        @Override
        public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
        }
});
builder.build().load(URL).into(ImageView);

Android Studioでドキュメントが自動的にポップアップしないようにする。

マウスカーソルが当たっているコードのドキュメントが勝手にポップアップするやつ、イライラするから消したい。

Preferences
f:id:javabayashi:20160709024313p:plain

Editor>General>Code Complete内のAutopopup documentation in (ms)のチェックを外す
f:id:javabayashi:20160709024425p:plain

平穏。

ユーザ切り替えインテントを取得する

Android 5.0(lollipop)からマルチユーザに対応しました。(タブレットは4.2から)
ユーザ切り替えが発生した際のインテントの取得したい場合、以下のように記述します。

class UserSwitchReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // ユーザ切り替え時の処理
    }
}

/**
 * ユーザ切り替え時のレシーバ登録
 */
void registerReceiver() {
    IntentFilter intentFilter = new IntentFilter();
    // ユーザがバックグラウンドになった際のインテント登録
    intentFilter.addAction(Intent.ACTION_USER_BACKGROUND);
    // ユーザがフォアグラウンドになった際のインテント登録
    intentFilter.addAction(Intent.ACTION_USER_FOREGROUND);

    registerReceiver(new UserSwitchReceiver(), intentFilter);
}   

ユーザが切り替わった際にActivityを止めたい時なんかは、上記UserSwitchReceiveronReceivefinish()すればいいはず。

gitでリモートからブランチをチェックアウトするまでの流れ

空のディレクトリで始める手順です。

  1. 初期化
    git init

  2. リモート名を指定してリモートリポジトリにアクセスできるよう設定
    git remote add リモート名 リモートリポジトリのurl

  3. リモートリポジトリの変更を取得
    git fetch

  4. ローカルブランチを作成してリモートリポジトリの任意のブランチをチェックアウト
    git checkout -b ローカルブランチ名 リモート名/remoteリポジトリのブランチ名

  5. チェックアウトできたことを確認
    git branch -a

ViewのVisibleが変化した際に起動するイベントリスナを作る。

1.イベントリスナをセットしたいViewを継承した独自Viewクラスを作成する。

public class MyTextView extends TextView {
    public MyTextView(Context context) {
        super(context, null);
    }
}

2.イベントリスナのインタフェース・メンバ変数・セットメソッドを定義する。

public class MyTextView extends TextView {
    public MyTextView(Context context) {
        super(context, null);
    }
    
    private OnVisibilityChangeListener mOnVisibilityChangeListener;
    public interface OnVisibilityChangeListener {
        public void onVisibilityChange(int visiblity);
    }
    public void setOnVisibilityChangeListener(OnVisibilityChangeListener listener) {
        mOnVisibilityChangeListener = listener;
    }
}

3.setVisiblityメソッドをオーバーライドしてVisibleの変化に呼応してイベントが発生するように実装する。

public class MyTextView extends TextView {
    public MyTextView(Context context) {
        super(context, null);
    }
    
    private OnVisibilityChangeListener mOnVisibilityChangeListener;
    public interface OnVisibilityChangeListener {
        public void onVisibilityChange(int visiblity);
    }
    public void setOnVisibilityChangeListener(OnVisibilityChangeListener listener) {
        mOnVisibilityChangeListener = listener;
    }
    
    @Override
    public void setVisibility(int visibility) {
        super.setVisibility(visibility);
        if (mOnVisibilityChangeListener != null) {
            mOnVisibilityChangeListener.onVisibilityChange(visibility);
        }
    }
}

これで対象のViewの表示・非表示が切り替わるたびに発生させたい処理を定義することができます。
 
ちなみに以下のように実装します。

mMyTextView.setOnVisibilityChangeListener(new MyTextView.OnVisibilityChangeListener() {
    @Override
    public void onVisibilityChange(int visiblity) {
        if (View.VISIBLE == visiblity) {
            
        } else if (View.INVISIBLE == visiblity) {
        
        } else if (View.GONE == visiblity) {
        
        }
    }
};

Android StudioでBreakpointの一覧表示

Android Studioで、設置したBreakpointの一覧を確認したい場合
ctrl+shift+F8
で以下のような子画面が表示されるので、そこで一覧表示・削除・設置等を行うことができる。
Breakpoints

罫線のついたtextareaをcssで実現する。

ノートみたいな罫線をtextarea内に描画したい場合、以下のようなcssを記述することで実現できます。
 

textarea {
    font-size: 15pt;
    line-height: 31px;
    padding: 31px;

    /* テキストエリアに陰をつける */
    box-shadow: 0.2em 0.2em 0.5em black;

    /* 罫線描画(各ブラウザ対応)*/
    background-image: -webkit-linear-gradient(left, white 10px, transparent 10px), -webkit-linear-gradient(right, white 10px, transparent 10px), -webkit-linear-gradient(white 30px, #ccc 30px, #ccc 31px, white 31px);
    background-image: -moz-linear-gradient(left, white 10px, transparent 10px), -moz-linear-gradient(right, white 10px, transparent 10px), -moz-linear-gradient(white 30px, #ccc 30px, #ccc 31px, white 31px);
    background-image: -ms-linear-gradient(left, white 10px, transparent 10px), -ms-linear-gradient(right, white 10px, transparent 10px), -ms-linear-gradient(white 30px, #ccc 30px, #ccc 31px, white 31px);
    background-image: -o-linear-gradient(left, white 10px, transparent 10px), -o-linear-gradient(right, white 10px, transparent 10px), -o-linear-gradient(white 30px, #ccc 30px, #ccc 31px, white 31px);
    background-image: linear-gradient(left, white 10px, transparent 10px), linear-gradient(right, white 10px, transparent 10px), linear-gradient(white 30px, #ccc 30px, #ccc 31px, white 31px);
    background-size: 100% 100%, 100% 100%, 100% 31px;
    /* 淡いグレーで枠線を囲む */
    border: 1px solid #ccc;
}

 
textarea こんな感じになります。

参考:textarea with horizontal rule