【Android】TextView の SetTextSize についてのメモ
TextView に 文字サイズを指定する方法についてのメモ。
getDimention して setTextSize をする
#setTextSize(float) にあるように、
void setTextSize (float size)
と引数一つの場合は、sp の指定となる。
dimens.xml で定義したサイズを取得する際に以下のようにするが、この返り値は px 変換されたものなので、都合が悪い。
getResources().getDimension(R.dimens.hoge);
次のようにすると、sp 値を px 値変換したものを sp 値として設定してしまうことになる(xml で sp 値を定義しているのが前提)。
tv.setTextSize (getResources().getDimension(R.dimens.hoge));
sp 値を px 値変換したものを px 値として渡すには、単位付きのメソッドを使用する。
void setTextSize (int unit, float size)
#setTextSize(int, float) にあるように、第1引数には、TypedValue で定義された定数を使う。
tv.setTextSize (TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimens.hoge));
こうすれば、一応意図した値を設定できる。
OS のフォントサイズ設定を無効にする
sp はディバイスで設定できるフォントサイズの倍率が掛けられるので、タブなどの限られた領域でフォントサイズを指定する場合には都合が悪い。
xml で sp 値を設定していて、かつ、OS のフォントサイズの影響を受けないようにするには、設定されている倍率を取得して割れば良さそう。
float scale = getResources().getConfiguration().fontScale;
tv.setTextSize (TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimens.hoge) / scale);
そもそも xml で dp 値として定義できれば、それでも良さそう。あるいは、dp の数値を float で取得できるなら、TypedValue.COMPLEX_UNIT_DIP
の単位指定をし、
float dpVal = 20; tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, dpVal);
とかが考えられそう。
【Android】WebView にキャッシュをさせない方法
サイト更新後すぐに反映させたい場合などに、WebView がキャッシュを表示してしまうと困る。
WebView にキャッシュをさせないようにするには、CacheMode に LOAD_NO_CACHE
を指定する。
WebView wv = (WebView)this.findViewById(R.id.webview);
wv.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
Address already in use の対処法
たまにビルドインサーバーの遮断し忘れとかで Address already in use
がでるので、対処法をメモ。
まず、ポート番号を指定して、実行中のプロセスを確認し、
lsof -i:8888
出力された PID をコピーして、以下のコマンドで遮断する。
kill ${PID}
【Android】View の id とエントリ名の変換
エントリ名から id を取得
hoge
というエントリ名から、R.id.hoge
という id の数値を取得するなら、
int viewId = getResources().getIdentifier("hoge", "id", getPackageName());
この viewId
で findViewById(viewId)
できる。for で連番しているエントリ名などから View を取得するのに便利。
id からエントリ名を取得
逆に、id の数値からエントリ名を取得するなら、
String viewIdStr = getResources().getResourceEntryName(viewId);
View から getId()
とかで id さえ取得していれば、それを上記のようにエントリ名へ変換して正規表現でチェックとかできる。
他のリソース
View の id 以外でもできる。
int strId = getResources().getIdentifier("hoge", "string", getPackageName());
注意点
getIdentifier について、ドキュメント曰く、
Note: use of this function is discouraged. It is much more efficient to retrieve resources by identifier than by name.
オススメできない方法とのこと。
Mac の ターミナルで tree を表示
tree をインストール
brew install tree
tree を表示
当該ディレクトリで、
tree
パスを指定するなら、
tree .
など。日本語が文字化けする際は、
tree . -N
でOK。表示するディレクトリの深さをしていするなら、
tree -L LEVEL
次のような感じに表示される。
. ├── CHANGELOG.md ├── LICENSE ├── README.md ├── assets │ ├── fonts │ ├── images │ ├── javascripts │ └── stylesheets ├── eyeglass-exports.js └── package.json
パスを書く必要がある際には便利。他、使いそうなオプションは、
オプション | |
---|---|
-a | 隠しファイルも表示 |
-d | ディレクトリのみ表示 |
-P | 正規表現にマッチするものを表示 |
-F | ディレクトリ末尾にスラッシュを表示 |
-o | 書き出し |
Android の apk 出力で Unsupported major.minor version 52.0 エラー
出力する apk ファイルの量が多いので、コマンドラインから gradle 使ってビルドをすることが多いけど、今回急に次のエラーが出て戸惑った。
A problem occurred evaluating project ':app'. > java.lang.UnsupportedClassVersionError: me/tatarka/RetrolambdaPlugin : Unsupported major.minor version 52.0
結論だけ言えば、java8 を使えば解消される。 以下が詳しくて助かった。
Androidアプリのビルドで「Unsupported major.minor version 52.0」のビルドエラーが発生する
webpack をサクッと使う手順
- 0. ディレクトリとテストファイルの準備
- 1. package.json を作る
- 2. devDependencies に追加する
- 3. dependencies に追加する
- 4. package.json を修正
- 5. webpack.config.js を置く
- 6. ビルドして確かめる
webpack の基本操作 にて述べた方法で、効率良く開発環境を整える手順を改めてまとめておく。
要件は、
- js モジュールの統合と単一書き出し
- sass の 統合と css 単一書き出し
- compass の読み込み
- js, css のミニマイズ
- js, css の map ファイルの生成
- ES6 -> ES5 トランスパイル(コンパイル)
- jquery の読み込み
- watch で変更を監視
完成後のディレクトリ構成(ビルド前)は次のようになる。
project/ ├── _css │ ├── entry.sass │ └── sub.sass ├── _js │ ├── entry.js │ └── sub.js ├── css ├── js ├── node_modules ├── package.json ├── webpack_index.html └── webpack.config.js
- ビルド前の各モジュールは
_
(アンダースコア)から始まるディレクトリに入れる - ビルド後のファイルは、それぞれ js, css ディレクトリに格納される
- webpack_index.html は確認用の html
0. ディレクトリとテストファイルの準備
# 各ディレクトリ mkdir {_css,_js,css,js} # テスト用 html echo '<html><link rel="stylesheet" media="all" href="./css/style.css"><body><h1></h1></body><script src="./js/bundle.js"></script></html>' > webpack_index.html # entry.scss echo '@import "compass"; @import "sub"; h1 { @include inline-block; color: #f00; }' > _css/entry.scss # sub.scss echo '@import "compass"; h1 { background-color: #000; }' > _css/sub.scss # entry.js echo 'var $ = require("jquery"); $(function(){$("h1").text(require("./sub.js"));});' > _js/entry.js # sub.js echo 'module.exports = "OK";' > _js/sub.js
- webpack_index.html ではビルド後の js と css の読み込みの他、h1 タグを用意しておく
- entry.scss では sub.scss を読み込む他、h1 を赤字に、また compass で inline-block にする
- sub.scss では h1 の背景を黒にする
- entry.js では jquery の読み込みの他、sub.js の出力を h1 にセットする
- sub.js は “OK” を返す
- ビルド後のイメージは次の感じ
1. package.json を作る
-y
オプションを付けて対話をせずに、初期化する。
npm init -y
2. devDependencies に追加する
npm install --save-dev webpack babel-loader babel-core babel-preset-es2015 node-sass style-loader css-loader sass-loader extract-text-webpack-plugin compass-mixins
それぞれ、
webpack 本体
- webpack
ES6 対応
- babel-loader
- babel-core
- babel-preset-es2015
- sass 対応
- node-sass
- style-loader
- css-loader sass-loader
- sass -> css 書き出し対応
- extract-text-webpack-plugin
- compass 対応
- compass-mixins
3. dependencies に追加する
npm install jquery --save
4. package.json を修正
... "private": true, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "build": "webpack --optimize-minimize" }, ...
- プライベート用にして警告排除
"private": true
- ビルドファイルのミニマイズ設定
"build": "webpack --optimize-minimize"
5. webpack.config.js を置く
var path = require('path'); var ExtractTextPlugin = require('extract-text-webpack-plugin'); module.exports = [ /** * js */ { entry: "./_js/entry.js", watch: true, output: { path: path.join(__dirname, './js'), filename: "bundle.js" }, module: { loaders: [{ test: /\.js[x]?$/, exclude: /node_modules/, loader: 'babel-loader?presets[]=es2015' }] }, devtool: 'source-map' }, /** * Sass */ { entry: './_css/entry.scss', watch: true, output: { path: path.join(__dirname, './css'), filename: 'style.css' }, module: { loaders: [{ test: /\.scss$/, loader: ExtractTextPlugin.extract({ use: [{ loader: 'css-loader' }, { loader: 'sass-loader', options: { includePaths: ['node_modules/compass-mixins/lib'] }, } ], fallback: 'style-loader' }) }] }, plugins: [ new ExtractTextPlugin('style.css') ], devtool: 'source-map' } ];
6. ビルドして確かめる
npm run build
実行後、webpack_index.html をブラウザで開き、
と表示されれば、js, sass ともにビルドができている。
また、js/bundle.js, css/style.css はそれぞれミニマイズされていて、かつ同階層に map ファイルも出力されていれば問題ない。