たくさんの自由帳
Androidのお話
たくさんの自由帳
投稿日 : | 0 日前
文字数(だいたい) : 893
Google
で一分くらい調べたけど誰もやってなかった
カレンダーを何でもいいので表示させたかったんだけど、縦横グリッドを作って、、、みたいな正攻法だと普通にしんどいと思った。
そこで、Runtime.getRuntime().exec("cal")
した結果をTextView
とかText()
で表示すればいいんじゃないかと。飾り気は無いけどとにかく表示はできる。
これ
攻略の鍵は等幅フォントです
なまえ | あたい |
---|---|
Android Studio | Android Studio Koala 2024.1.1 |
たんまつ | Xperia 1 V |
Text()
を好きなところにおいて、fontFamily
をFontFamily.Monospace
にすると等幅フォントになります。
あとexec()
の使い方があってるのかは知らん。
こんな感じです。
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
CalenderCommandTextTheme {
MainScreen()
}
}
}
}
// TODO Util クラスとかに置く
private fun execCalenderCommand(): String {
val process = Runtime.getRuntime().exec("cal")
val printText = process.inputStream.bufferedReader().readText()
process.destroy()
return printText
}
@Composable
private fun MainScreen() {
val calenderCommand = remember { mutableStateOf("") }
LaunchedEffect(key1 = Unit) {
calenderCommand.value = execCalenderCommand()
}
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
Box(modifier = Modifier.padding(innerPadding)) {
Text(
text = calenderCommand.value,
fontFamily = FontFamily.Monospace // 等幅フォントにする
)
}
}
}
<TextView>
を好きなところにおいて、等幅フォントを指定します。これもfontFamily
でmonospace
を指定することで等幅フォントです。
以下のコードではViewBinding
を使ってますが別になくてもいいです。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/activity_main_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="monospace" />
</LinearLayout>
class MainActivity : ComponentActivity() { // AppCompatActivity() かも
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.activityMainTextview.text = execCalenderCommand()
}
}
// TODO Util クラスとかに置く
private fun execCalenderCommand(): String {
val process = Runtime.getRuntime().exec("cal")
val printText = process.inputStream.bufferedReader().readText()
process.destroy()
return printText
}
テキストが表示てきて、かつ等幅フォントが使える箇所なら割とどこでも使えそうこの技。
ホーム画面のウィジェットとか。