Skip to content

Commit

Permalink
Merge branch 'release/0.8.4'
Browse files Browse the repository at this point in the history
  • Loading branch information
chihiro hashimoto committed Nov 9, 2017
2 parents 5cb6edc + 303e4e8 commit 4dd9d5e
Show file tree
Hide file tree
Showing 8 changed files with 168 additions and 115 deletions.
2 changes: 1 addition & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ android {
minSdkVersion 23
targetSdkVersion 26
versionCode 1
versionName "0.8.3"
versionName "0.8.4"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
// Enabling multidex support.
multiDexEnabled true
Expand Down
3 changes: 1 addition & 2 deletions app/src/main/java/com/chrhsmt/sisheng/MainApplication.kt
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
package com.chrhsmt.sisheng

import android.app.Application
import com.squareup.leakcanary.LeakCanary

/**
* Created by chihiro on 2017/11/03.
*/
class MainApplication : Application() {
override fun onCreate() {
super.onCreate()
LeakCanary.install(this);
//LeakCanary.install(this);
}
}
41 changes: 41 additions & 0 deletions app/src/main/java/com/chrhsmt/sisheng/ui/AutoResizeButton.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.chrhsmt.sisheng.ui

import android.content.Context
import android.util.AttributeSet
import android.widget.Button

/**
* フォントサイズ自動調整Button
*
* ソースコードは以下から借用
* http://aillicepray.blogspot.jp/2015/02/textview.html
*/
class AutoResizeButton : Button {

internal val info = AutoResizeUtils.AutoResizeInfo()

/**
* コンストラクタ
* @param context
*/
constructor(context: Context) : super(context) {}

/**
* コンストラクタ
* @param context
* @param attrs
*/
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
//This method reads the parameters given in the xml file and sets the properties according to it
AutoResizeUtils.setModelText(attrs.getAttributeValue(null, "model_text"), info)
}

/**
* 子Viewの位置を決める
*/
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
super.onLayout(changed, left, top, right, bottom)
AutoResizeUtils.resize(this, info)
}

}
108 changes: 4 additions & 104 deletions app/src/main/java/com/chrhsmt/sisheng/ui/AutoResizeTextView.kt
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package com.chrhsmt.sisheng.ui

import android.content.Context
import android.graphics.Paint
import android.util.TypedValue
import android.util.AttributeSet
import android.widget.TextView


/**
* フォントサイズ自動調整TextView
*
Expand All @@ -15,8 +12,7 @@ import android.widget.TextView
*/
class AutoResizeTextView : TextView {

internal var modelText: String? = null
internal var numberLine = 1
internal val info = AutoResizeUtils.AutoResizeInfo()

/**
* コンストラクタ
Expand All @@ -30,112 +26,16 @@ class AutoResizeTextView : TextView {
* @param attrs
*/
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
processAttributeSet(attrs)
//This method reads the parameters given in the xml file and sets the properties according to it
AutoResizeUtils.setModelText(attrs.getAttributeValue(null, "model_text"), info)
}

/**
* 子Viewの位置を決める
*/
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
super.onLayout(changed, left, top, right, bottom)
resize()
}

/**
* テキストサイズ調整
*/
private fun resize() {
/** 最小のテキストサイズ */
val MIN_TEXT_SIZE = 10f

val viewHeight = this.height // Viewの縦幅
val viewWidth = this.width // Viewの横幅

// テキストサイズ
var textSize = textSize

// Paintにテキストサイズ設定
val paint = Paint()
paint.textSize = textSize

// テキスト取得
if (modelText == null) {
modelText = text.toString()
}

// テキストの縦幅取得
var fm = paint.fontMetrics
var textHeight = Math.abs(fm.top) + Math.abs(fm.descent)
val lineNum = this.text!!.split("\n".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray().size

// テキストの横幅取得
var textWidth = paint.measureText(modelText)

// 縦幅と、横幅が収まるまでループ
while ((viewHeight < (textHeight * lineNum)) or (viewWidth < textWidth)) {
// 調整しているテキストサイズが、定義している最小サイズ以下か。
if (MIN_TEXT_SIZE >= textSize) {
// 最小サイズ以下になる場合は最小サイズ
textSize = MIN_TEXT_SIZE
break
}

// テキストサイズをデクリメント
textSize--

// Paintにテキストサイズ設定
paint.textSize = textSize

// テキストの縦幅を再取得
// 改行を考慮する
fm = paint.fontMetrics
textHeight = Math.abs(fm.top) + Math.abs(fm.descent) * numberLine

// テキストの横幅を再取得
textWidth = paint.measureText(modelText)
}

// テキストサイズ設定
setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize)
AutoResizeUtils.resize(this, info)
}


/**
* 基準となる改行を含む文字列の最も文字列が大きい部分がViewの枠に収まるようにフォントサイズを調整する.(改行には適応してない模様)
* 文字列に改行を含まない場合、それをそのまま基準にする.
* 表示される文字列の最大数がわかっている時に有効利用できる.
* @param modelText
*/
protected fun setModelText(modelText: String?) {
if (modelText != null) {
val str = modelText.split("\n".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
numberLine = str.size
var includeLinefeed = false
if (str.size > 1) includeLinefeed = true

if (includeLinefeed) {
var a: String? = null // 一時変数
var model: String? = null
for (i in str.indices) {
if (a == null)
a = str[i]
else {
// 2周目以降
if (a.length >= str[i].length)
model = a
else
model = str[i]
}
}
this.modelText = model
} else {
this.modelText = modelText
}
}
}

protected fun processAttributeSet(attrs: AttributeSet) {
//This method reads the parameters given in the xml file and sets the properties according to it
this.setModelText(attrs.getAttributeValue(null, "model_text"))
}
}
112 changes: 112 additions & 0 deletions app/src/main/java/com/chrhsmt/sisheng/ui/AutoResizeUtils.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
package com.chrhsmt.sisheng.ui

import android.content.Context
import android.graphics.Paint
import android.util.AttributeSet
import android.util.TypedValue
import android.widget.TextView

/**
* フォントサイズ自動調整TextView
*
* ソースコードは以下から借用
* http://aillicepray.blogspot.jp/2015/02/textview.html
*/
object AutoResizeUtils {
class AutoResizeInfo {
internal var modelText: String? = null
internal var numberLine = 1
}
/**
* テキストサイズ調整
*/
fun resize(view: TextView, info: AutoResizeInfo) {
/** 最小のテキストサイズ */
val MIN_TEXT_SIZE = 10f

val viewHeight = view.height // Viewの縦幅
val viewWidth = view.width // Viewの横幅

// テキストサイズ
var textSize = view.textSize

// Paintにテキストサイズ設定
val paint = Paint()
paint.textSize = textSize

// テキスト取得
if (info.modelText == null) {
info.modelText = view.text.toString()
}

// テキストの縦幅取得
var fm = paint.fontMetrics
var textHeight = Math.abs(fm.top) + Math.abs(fm.descent)
val lineNum = view.text!!.split("\n".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray().size

// テキストの横幅取得
var textWidth = paint.measureText(info.modelText)

// 縦幅と、横幅が収まるまでループ
while ((viewHeight < (textHeight * lineNum)) or (viewWidth < textWidth)) {
// 調整しているテキストサイズが、定義している最小サイズ以下か。
if (MIN_TEXT_SIZE >= textSize) {
// 最小サイズ以下になる場合は最小サイズ
textSize = MIN_TEXT_SIZE
break
}

// テキストサイズをデクリメント
textSize--

// Paintにテキストサイズ設定
paint.textSize = textSize

// テキストの縦幅を再取得
// 改行を考慮する
fm = paint.fontMetrics
textHeight = Math.abs(fm.top) + Math.abs(fm.descent) * info.numberLine

// テキストの横幅を再取得
textWidth = paint.measureText(info.modelText)
}

// テキストサイズ設定
view.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize)
}


/**
* 基準となる改行を含む文字列の最も文字列が大きい部分がViewの枠に収まるようにフォントサイズを調整する.(改行には適応してない模様)
* 文字列に改行を含まない場合、それをそのまま基準にする.
* 表示される文字列の最大数がわかっている時に有効利用できる.
* @param modelText
*/
fun setModelText(modelText: String?, info: AutoResizeInfo) {
if (modelText != null) {
val str = modelText.split("\n".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
info.numberLine = str.size
var includeLinefeed = false
if (str.size > 1) includeLinefeed = true

if (includeLinefeed) {
var a: String? = null // 一時変数
var model: String? = null
for (i in str.indices) {
if (a == null)
a = str[i]
else {
// 2周目以降
if (a.length >= str[i].length)
model = a
else
model = str[i]
}
}
info.modelText = model
} else {
info.modelText = modelText
}
}
}
}
11 changes: 6 additions & 5 deletions app/src/main/res/layout/activity_first_screen.xml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="0dp" />

<Button
<com.chrhsmt.sisheng.ui.AutoResizeButton
android:id="@+id/btnMan"
android:layout_width="0dp"
android:layout_weight="25"
Expand All @@ -66,7 +66,7 @@
android:layout_height="match_parent"
android:layout_weight="10" />

<Button
<com.chrhsmt.sisheng.ui.AutoResizeButton
android:id="@+id/btnWoman"
android:layout_width="0dp"
android:layout_weight="25"
Expand Down Expand Up @@ -120,7 +120,7 @@
tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="0dp" />

<Button
<com.chrhsmt.sisheng.ui.AutoResizeButton
android:id="@+id/btnRandom"
android:layout_width="0dp"
android:layout_weight="25"
Expand All @@ -139,7 +139,7 @@
android:layout_height="match_parent"
android:layout_weight="10" />

<Button
<com.chrhsmt.sisheng.ui.AutoResizeButton
android:id="@+id/btnNini"
android:layout_width="0dp"
android:layout_weight="25"
Expand All @@ -153,8 +153,9 @@
tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="0dp" />

<Button
<com.chrhsmt.sisheng.ui.AutoResizeButton
android:id="@+id/btnChangeScriptMode"
android:textSize="40sp"
android:layout_width="0dp"
android:background="#00000000"
android:layout_height="match_parent"
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/res/layout/activity_result_failure.xml
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@
android:layout_height="match_parent"
android:layout_weight="20" />

<Button
<com.chrhsmt.sisheng.ui.AutoResizeButton
android:id="@+id/btnRetry"
android:layout_width="0dp"
android:layout_weight="25"
Expand All @@ -97,7 +97,7 @@
android:layout_height="match_parent"
android:layout_weight="10" />

<Button
<com.chrhsmt.sisheng.ui.AutoResizeButton
android:id="@+id/btnRestart"
android:layout_width="0dp"
android:layout_weight="25"
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/layout/activity_result_sucess.xml
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@
android:layout_height="match_parent"
android:layout_weight="37" />

<Button
<com.chrhsmt.sisheng.ui.AutoResizeButton
android:id="@+id/btnRestart"
android:layout_width="0dp"
android:layout_weight="25"
Expand Down

0 comments on commit 4dd9d5e

Please sign in to comment.