20190804のAndroidに関する記事は4件です。

Androidでグラフを作ってみる

グラフをアプリの中に表示させるとき、調べてみるとMPAndroidChartを使う方法があるみたいで、簡単なサンプルを作って試してみました。
データを取得できれば、なかなかお手軽でいいですね!
今後も使いそうなので、手順を残そうかと思います。

①ライブラリの導入

まずはMPAndroidChartライブラリを導入します。

build.gradle(Project)
allprojects {
    repositories {
        // 追加
        maven { url 'https://jitpack.io' }
    }
}
build.gradle(app)
dependencies {
    // 追加
    implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}

②レイアウトの作成

レイアウトの作成を行います。
今回はシンプルに画面いっぱいにグラフを表示させるだけです。

activity_main
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

    <com.github.mikephil.charting.charts.LineChart
        android:id="@+id/lineChart"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
    />

</android.support.constraint.ConstraintLayout>

③Actitvityの作成

Activityではグラフの作成を行います。
グラフの作成するにあたって、データの設定とグラフの設定(X軸やY軸など)がメインで必要になります。
グラフ表示のオプションはたくさんあるので、リファレンスを見て、必要なら追加するのがいいと思います。

MainActivity.kt
class MainActivity : AppCompatActivity() {

    // スタイルとフォントファミリーの設定
    private var mTypeface = Typeface.create(Typeface.SANS_SERIF, Typeface.NORMAL)
    // データの個数
    private val chartDataCount = 20

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // グラフの設定
        setupLineChart()
        // データの設定
        lineChart.data = lineData(chartDataCount, 100f)
    }

    // LineChart用のデータ作成
    private fun lineData(count: Int, range: Float):LineData {

        val values = mutableListOf<Entry>()

        for (i in 0 until count) {
            // 値はランダムで表示させる
            val value = (Math.random() * (range)).toFloat()
            values.add(Entry(i.toFloat(), value))
        }

        // グラフのレイアウトの設定
        val yVals = LineDataSet(values, "テストデータ").apply {
            axisDependency =  YAxis.AxisDependency.LEFT
            color = Color.BLACK
            // タップ時のハイライトカラー
            highLightColor = Color.YELLOW
            setDrawCircles(true)
            setDrawCircleHole(true)
            // 点の値非表示
            setDrawValues(false)
            // 線の太さ
            lineWidth = 2f
        }
        val data = LineData(yVals)
        return data
    }

    private fun setupLineChart(){
        lineChart.apply {
            description.isEnabled = false
            setTouchEnabled(true)
            isDragEnabled = true
            // 拡大縮小可能
            isScaleXEnabled = true
            setPinchZoom(false)
            setDrawGridBackground(false)

            //データラベルの表示
            legend.apply {
                form = Legend.LegendForm.LINE
                typeface = mTypeface
                textSize = 11f
                textColor = Color.BLACK
                verticalAlignment = Legend.LegendVerticalAlignment.BOTTOM
                horizontalAlignment = Legend.LegendHorizontalAlignment.LEFT
                orientation = Legend.LegendOrientation.HORIZONTAL
                setDrawInside(false)
            }

            //y軸右側の設定
            axisRight.isEnabled = false

            //X軸表示
            xAxis.apply {
                typeface = mTypeface
                setDrawLabels(false)
                // 格子線を表示する
                setDrawGridLines(true)
            }

            //y軸左側の表示
            axisLeft.apply {
                typeface = mTypeface
                textColor = Color.BLACK
                // 格子線を表示する
                setDrawGridLines(true)
            }
        }
    }
}

完成したのはこんな感じです。

aa.png

線グラフ以外にも棒グラフや円グラフなど、多様に使えそうなので、いろいろ試してみたいと思います。

参照

Github(リファレンス)
【Androidアプリ開発勉強】MPAndroidChartで折れ線グラフを描画したい。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Android Studioをもっと便利に使うためのショートカット設定

Android Studioで色々とショートカットを設定して、便利な機能を活用できるようになったのでまとめておきます。

表記は全てMacなので、Windowsの方は Ctrl に置き換えて設定してください。

ショートカットの設定方法

ショートカットの設定方法は、 Android Studio > Preferences... または⌘ + ,で設定画面を開き、keymapメニューから設定したい操作を検索して、ショートカットコマンドを登録します。

スクリーンショット 2019-07-27 17.41.09.png

便利なショートカット設定

新しいプロジェクトを⌘ + oで開く

既存の設定だと ⌘ + o はクラス検索になっているのですが、個人的には新しいプロジェクトを開いてほしいので、ショートカットを上書きします。

Keymap からOpen...を検索して、⌘ + oを割り当てます。

スクリーンショット 2019-07-27 17.48.18.png

これで、他のプロジェクトの実装を確認したくなったときに、すぐに開いて確認することができます。

画面分割を⇧ + ⌘ + dで行う

Androidの開発をしていると、画面分割をしてlayoutとActivityファイルを並べて確認したり、関連するファイルを見比べながらコードを書いたりすることが多いので、画面分割のショートカットがあると便利です。

Split Verticallyを検索して⇧ + ⌘ + dを割り当てて、以下のような画面分割が簡単にできるようにします。

スクリーンショット 2019-07-27 17.58.34.png

単語の複数選択を⌘ + dで行う

vscodeやsublime textなどのエディタでは、単語の複数選択が⌘ + dで行えて、一斉に単語の修正ができるので、Android Studioでも設定します。

Add Selection for Next Occurrenceを検索して⌘ + dを割り当てます。
以下のように複数カーソルをあてることができるようになります。

スクリーンショット 2019-07-27 18.05.53.png

変数の一括置換をF2で行う

上の単語の複数選択では、同一の単語の置換ができるのですが、変数の複数選択では、その変数を参照している全ての部分に対して置換を行うことができます。
別ファイルで参照されているものも同時に修正が行われるのでけっこう便利で、変数だけでなく、ファイル名やパッケージ名の修正にも使えます。

Refactor > Rename...をvscodeでのショートカットに合わせてF2に設定します。

例えば、data classの名前を変えたくなった場合は、そのクラス名を選択してF2を押せば、以下のように参照している部分のクラス名が一括で置換されます。

スクリーンショット 2019-08-03 16.26.39.png

ファイルの保存時にコードフォーマットと不要なimport文の削除を行う

Android Studioでは、デフォルトで自動保存が行われるのですが、それに加えてコードフォーマットとimport分の最適化も行って欲しいので、 Save Actionsというプラグインを入れて、⌘ + sにショートカットを割り当てます。

スクリーンショット 2019-08-04 17.56.02.png

プラグインを入れたら、下記のようにSave Actionsの設定画面からActivate save actions on saveを有効にし、actionとしてOptimize importsReformat fileを有効にすれば、保存時にコードフォーマットとimport文の最適化が行われるようになります。

スクリーンショット 2019-08-04 17.57.52.png

Github関連のショートカット

Android StudioとGithubを連携するとGitを使った個人やチームでの開発が便利になります。

Githubとの連携方法

VCS > Git > Create Pull Requestを選択すると、初回はログインダイアログが出るので、そこにユーザー名とパスワードを入力すれば連携することができます。

スクリーンショット 2019-08-03 16.34.19.png

これで手元のコードが参照しているGithubのブランチと連携することができたので、Android StudioからいくつかGithubに対するアクションを行うことができるようになります。

Git Fetchを⌘ + 0で行う

個人的にはGit Fetchをけっこう頻繁に使うので、Android Studioのショートカットに設定しています。
⌘ + fとかが検索で使われているので、0から始めるために情報を取ってくる、という意味を込めて⌘ + 0を割り当てています。

VCS > Git > Fetch⌘ + 0に割り当てておくと、いつでも一発でfetchできるので地味に便利だったります。

Pull Requestの一覧を⌘ + ⇧ + pで確認する

Android Studioに最近入った機能として、View Pull Requestsというものがあります。
これを使うと以下のようにPull Requestの一覧がAndroid Studioで見ることができて、変更差分を含めたファイル全体も確認することができます。

スクリーンショット 2019-08-04 18.16.20.png

下タブに表示されているのがPull Requestの内容で、左から、「Pull Requestの一覧」、「Pull Requestの詳細」、「Pull Requestの変更差分」が表示されます。

特にチーム開発をする時には最もよく使う機能なので、ショートカットに登録しておくと便利でしょう。
Plug-ins > Github > View Pull Requests⌘ + ⇧ + pを割り当てるのがおすすめです。

今回はオリジナルのショートカットを割り当てていきましたが、既存のショートカットの活用については以下の記事を参考にしています。

Android Studioで覚えておくと便利なこと

他にも良さそうな機能を見つけたら、ショートカットに割り当ててこの記事も更新していこうと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

DroidVimとGboardの組み合わせでちょっとだけ楽をしたい

楽しいですよね、DroidVim。……いや正直ただのオモチャにしている感じなんですがまぁ、楽しんでいます。ただ、フルキーを駆使するのが前提のVimをタッチデバイスで扱うのは流石にストレスを感じることも多いんです……特に記号とか、特に記号とか!というわけで、少しでも改善できそうな方法を探して、何とかしてやろうというやつです。というよりまたスクリプトを増やしてしまいました。

OLLIE

最近DroidVimに少しだけ変更がありまして、IMEの処理にiminsertが使えるようになりました。それに伴い、ファンクションバー1<C-^>をアサインすることが出来るようになり、マニュアルにはGboardの為のコンフィグの例まである感じで……これ自体はモード遷移での恩恵なんですが。

ノーマルモード中の<C-^>はデフォルトで「代替ファイルの編集」がマップされており、ノーマルモード中のIME処理に影響はなく、またそもそもこのマップを知らなかったので、必要なときには:e #を使っています。むしろモードに気が付かずにバッファが変わってしまうのに苛立ちを……まぁ誤爆して苛立つキーなら潰すまではともかく、より使いたい機能をマップしてしまえばいいわけですよ。例えば<C-^>[a-z]でgboardの右肩の記号がロングタップなしで打てるとか。

スケボーキング

plugin/gboard.vim
scriptencoding utf-8

function gboard#map(IFSize) abort
    for l in keys(g:longTap)
        execute 'map <C-^>'.l g:longTap[l][a:IFSize]
        execute 'omap a<C-^>'.l 'a'.g:longTap[l][a:IFSize]
        execute 'omap i<C-^>'.l 'i'.g:longTap[l][a:IFSize]
        execute 'vmap a<C-^>'.l 'a'.g:longTap[l][a:IFSize]
        execute 'vmap i<C-^>'.l 'i'.g:longTap[l][a:IFSize]
    endfor
endfunction

function gboard#unmap() abort
    for l in keys(g:longTap)
        try
            execute 'unmap <C-^>'.l
            execute 'ounmap a<C-^>'.l
            execute 'ounmap i<C-^>'.l
            execute 'vunmap a<C-^>'.l
            execute 'vunmap i<C-^>'.l
        catch /E31/
            continue
        endtry
    endfor
endfunction

function gboard#main(isBang,...) abort
    if a:isBang !=? '!'
        if a:0 > 0 && a:1 =~? '^\(large\|small\)$'
            if a:1 ==? 'large'
                let IFSize = 1
            else
                let IFSize = 0
            endif

            call gboard#map(IFSize)
            if v:vim_did_enter
                echo printf('[gboard]: Mapped for %s display.', tolower(a:1))
            endif
        else
            echo '[gboard]: Maps from gboard.vim'
            nmap <C-^>
        endif
    else
        call gboard#unmap()
        echo '[gboard]: Unmapped.'
    endif
endfunction
plugin/gboard.vim
scriptencoding utf-8

if !exists('g:longTap')
    let g:longTap = {
        \ 'q': ['%',  '^' ],
        \ 'w': ['\',  ',' ],
        \ 'e': ['\|', '\|'],
        \ 'r': ['=',  '=' ],
        \ 't': ['[',  '[' ],
        \ 'y': [']',  ']' ],
        \ 'u': ['<',  '<' ],
        \ 'i': ['>',  '>' ],
        \ 'o': ['{',  '{' ],
        \ 'p': ['}',  '}' ],
        \ 'a': ['@',  '@' ],
        \ 's': ['#',  '#' ],
        \ 'd': ['$',  '$' ],
        \ 'f': ['_',  '_' ],
        \ 'g': ['&',  '&' ],
        \ 'h': ['-',  '-' ],
        \ 'j': ['+',  '+' ],
        \ 'k': ['(',  '(' ],
        \ 'l': [')',  ')' ],
        \ 'z': ['*',  '\' ],
        \ 'x': ['"',  '%' ],
        \ 'c': ['''', '*' ],
        \ 'v': [':',  '"' ],
        \ 'b': [';',  ''''],
        \ 'n': ['!',  ':' ],
        \ 'm': ['?',  ';' ],
        \ '.': ['/',  '/' ],
        \ '<C-^>': ['<C-^>', '<C-^>']
    \ }
endif

command -nargs=? -bang Gboard call gboard#main('<bang>', <f-args>)

まぁ、アルファベット全部にmapするわけで必然的にやぼったい設定が必要になります……仕方ないね。

METHOD

基本的にforループをブン回してmapするだけなんですが、gboardの仕様が画面サイズによってロングタップの文字が変わるので、両方の設定に対応できるようにしています。正直「他は知らん」でも良かった気がするのですが、一応カスタム出来るようにしておきました。ちょっとした気の利かせ的に.のロングタップで出せる、というより何故かロングタップしないと出せない/<C-^>.で打てる気遣いをしているんですが、/自体はDroidVimのファンクションバーにアサインできるので必要ないかもしれないです。一応<C-^>のもとの機能は<C-^><C-^>に振り直しています。


  1. キーボードの近くに、ある程度カスタマイズできるオンスクリーンキーが……この説明やぼったいなぁ。Playストアからスクショ見てください。マニュアルで言うところのを活用したいという話をしています。 

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

開発者オプションの最小幅を上げすぎたら起動しなくなった話

みなさん最小幅いじってますかー?

でも何事もやりすぎはよくないよねって話。

環境

OS:Android 9

事の顛末

なんとなく最小幅をいじってあそんでた

調子に乗って1000ptにしてしまう

画面が表示されなくなる

強制終了からの再起動してみる

ブートループに陥る ((^ω^≡^ω<ギャアアアアアアア

TWRPを焼いてデータを救出しようとするもブートアンロックしてないことを思い出す

.
.
.

やむなくWipe Dataすることに(アア...データガ...)

悲しいなぁ...(´・ω・`)

結論

  • 最小幅のいじりすぎはよくないよ
  • データはバックアップしとこうね
  • 念のためブートアンロックしとくと何かあった時に役に立つよ
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む