2015年10月17日土曜日

Pythonでユニットテスト

unittest.TestCaseを継承したクラスがあるファイルの階層、もしくはそのファイルがサブディレクトリにある状態で、

$nosetests

コマンドを実行すると、テストが実行される。


NumberpickerやDatePicker,TimePickerでキーボードの非表示設定

NumberpickerやDatePicker,TimePickerでソフトウェアキーボードがでないように設定するには、

ViewGroup#setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
を設定して、ピッカーにフォーカスがいかないように設定することによって、ピッカーをタップしてもキーボードが表示されなくなる。


http://developer.android.com/reference/android/view/ViewGroup.html#setDescendantFocusability(int)
http://developer.android.com/reference/android/view/ViewGroup.html#FOCUS_BLOCK_DESCENDANTS

特殊文字のユニコードを調べるのに便利なサイト

http://graphemica.com/%C2%A9

ActionBarの戻る矢印の色を変更

// 矢印の色変更
final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
upArrow.setColorFilter(getResources().getColor(R.color.drawer_arrows), PorterDuff.Mode.SRC_ATOP);
getSupportActionBar().setHomeAsUpIndicator(upArrow);

lintチェックのコマンド

./gradlew app:lint

フォーカスが外れたとき、ソフトキーボードを非表示にするEditText

public class AutoHideKeyboardEditText extends EditText {

    protected boolean mHideKeyboardEnable = true;

    public AutoHideKeyboardEditText(Context context) {
        super(context);
    }

    public AutoHideKeyboardEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void setHideKeyboardEnable(final boolean enabled) {
        mHideKeyboardEnable = enabled;
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
        super.onFocusChanged(focused, direction, previouslyFocusedRect);
        if (mHideKeyboardEnable && !focused) {
            // ソフトキーボードを非表示にする
            final InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        }
    }
}

ブラウザ起動時に、ブラウザアプリ選択を表示しない起動処理

public static void openBrowser(final Context context, final String url) {
    try {
        // 標準ブラウザ起動
        final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    } catch (ActivityNotFoundException e) {
        try {
            // chrome起動
            final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            intent.setClassName("com.android.chrome", "com.google.android.apps.chrome.Main");
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        } catch (ActivityNotFoundException e2) {
            // 暗黙的intentでブラウザ起動
            final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }
    }
}

アプリがインストール済みか調べるとき

public boolean isInstalled(final Context context) {
    final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("scheme:"));
    final List resolveInfos = context.getApplicationContext()
            .getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
    return (resolveInfos != null && !resolveInfos.isEmpty());
}