:appモジュールにホーム画面を作成します。
:appモジュールに:core:resourcesモジュールへの依存関係を追記します。
:
dependencies {
:
implementation(project(":core:resources"))
:
}
追記後、『Sync Now』で内容をプロジェクトに反映させます。
UI層として:appモジュールにpresentationディレクトリ(パッケージ)を作成し、直下にAppHomeScreen.ktを作成します。
package jp.co.progress_llc.portal.presentation
import androidx.compose.runtime.Composable
import androidx.compose.foundation.background
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.material3.*
import jp.co.progress_llc.portal.R
import jp.co.progress_llc.portal.core.ui.theme.AppTheme
import jp.co.progress_llc.portal.core.resources.R as CoreR
@Composable
fun AppHomeScreen() {
Scaffold(
) { innerPadding ->
Column(
modifier = Modifier
.padding(innerPadding)
.fillMaxSize()
.background(MaterialTheme.colorScheme.background)
.padding(16.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Top
) {
Spacer(modifier = Modifier.height(48.dp))
Image(
painter = painterResource(id = R.drawable.ic_logo),
contentDescription = "ロゴ",
modifier = Modifier
.size(120.dp)
.padding(bottom = 16.dp)
)
Text(
text = stringResource(CoreR.string.company_name) + "\n"
+ stringResource(CoreR.string.app_name),
style = MaterialTheme.typography.headlineMedium,
fontWeight = FontWeight.Bold,
textAlign = TextAlign.Center,
modifier = Modifier.padding(bottom = 32.dp)
)
Column(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center,
modifier = Modifier.padding(16.dp)
) {
IconButton(
onClick = { },
modifier = Modifier.size(80.dp)
) {
Image(
painter = painterResource(id = R.drawable.ic_button_train),
contentDescription = "発車予定ボタン",
modifier = Modifier.size(64.dp)
)
}
Text(
text = "発車予定",
style = MaterialTheme.typography.bodyLarge,
fontWeight = FontWeight.Bold,
color = MaterialTheme.colorScheme.onSurface,
modifier = Modifier.padding(top = 0.dp)
)
}
}
}
}
@Preview(showBackground = true)
@Composable
fun AppHomeScreenPreview() {
AppTheme {
AppHomeScreen()
}
}
アプリケーションタイトルとアイコンボタンだけの画面なので、ViewModelは不要です。