Bump hikage-core, hikage-extension, hikage-extension-betterandroid, hikage-extension-compose, hikage-compiler, hikage-widget-androidx, hikage-widget-material version to 1.0.0
60
samples/app/build.gradle.kts
Normal file
@@ -0,0 +1,60 @@
|
||||
plugins {
|
||||
autowire(libs.plugins.android.application)
|
||||
autowire(libs.plugins.kotlin.android)
|
||||
autowire(libs.plugins.kotlin.ksp)
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = property.project.samples.app.packageName
|
||||
compileSdk = property.project.android.compileSdk
|
||||
|
||||
defaultConfig {
|
||||
applicationId = property.project.samples.app.packageName
|
||||
minSdk = property.project.android.minSdk
|
||||
targetSdk = property.project.android.targetSdk
|
||||
versionName = property.project.samples.app.versionName
|
||||
versionCode = property.project.samples.app.versionCode
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
buildTypes {
|
||||
release {
|
||||
isMinifyEnabled = true
|
||||
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
|
||||
signingConfig = signingConfigs.getByName("debug")
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
kotlinOptions {
|
||||
jvmTarget = "17"
|
||||
freeCompilerArgs = listOf(
|
||||
"-Xno-param-assertions",
|
||||
"-Xno-call-assertions",
|
||||
"-Xno-receiver-assertions"
|
||||
)
|
||||
}
|
||||
buildFeatures {
|
||||
buildConfig = true
|
||||
viewBinding = true
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
ksp(projects.hikageCompiler)
|
||||
implementation(projects.hikageCore)
|
||||
implementation(projects.hikageExtension)
|
||||
implementation(projects.hikageExtensionBetterandroid)
|
||||
implementation(projects.hikageWidgetAndroidx)
|
||||
implementation(projects.hikageWidgetMaterial)
|
||||
implementation(com.highcapable.pangutext.pangutext.android)
|
||||
implementation(com.highcapable.betterandroid.ui.component)
|
||||
implementation(com.highcapable.betterandroid.ui.extension)
|
||||
implementation(com.highcapable.betterandroid.system.extension)
|
||||
implementation(androidx.core.core.ktx)
|
||||
implementation(androidx.appcompat.appcompat)
|
||||
testImplementation(junit.junit)
|
||||
androidTestImplementation(androidx.test.ext.junit)
|
||||
androidTestImplementation(androidx.test.espresso.espresso.core)
|
||||
}
|
46
samples/app/proguard-rules.pro
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# You can control the set of applied configuration files using the
|
||||
# proguardFiles setting in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
|
||||
# Uncomment this to preserve the line number information for
|
||||
# debugging stack traces.
|
||||
#-keepattributes SourceFile,LineNumberTable
|
||||
|
||||
# If you keep the line number information, uncomment this to
|
||||
# hide the original source file name.
|
||||
#-renamesourcefileattribute SourceFile
|
||||
|
||||
-ignorewarnings
|
||||
-optimizationpasses 10
|
||||
-dontusemixedcaseclassnames
|
||||
-dontoptimize
|
||||
-verbose
|
||||
-overloadaggressively
|
||||
-allowaccessmodification
|
||||
-adaptclassstrings
|
||||
-adaptresourcefilenames
|
||||
-adaptresourcefilecontents
|
||||
|
||||
-renamesourcefileattribute P
|
||||
-keepattributes SourceFile,Signature,LineNumberTable
|
||||
|
||||
-assumenosideeffects class kotlin.jvm.internal.Intrinsics {
|
||||
public static *** throwUninitializedProperty(...);
|
||||
public static *** throwUninitializedPropertyAccessException(...);
|
||||
}
|
||||
|
||||
-keep class * extends android.app.Activity
|
||||
-keep class * implements androidx.viewbinding.ViewBinding {
|
||||
<init>();
|
||||
*** inflate(android.view.LayoutInflater);
|
||||
}
|
@@ -0,0 +1,24 @@
|
||||
package com.highcapable.hikage.demo
|
||||
|
||||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
import org.junit.Assert.*
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
* See [testing documentation](http://d.android.com/tools/testing).
|
||||
*/
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class ExampleInstrumentedTest {
|
||||
@Test
|
||||
fun useAppContext() {
|
||||
// Context of the app under test.
|
||||
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
|
||||
assertEquals("com.highcapable.hikage.demo", appContext.packageName)
|
||||
}
|
||||
}
|
25
samples/app/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<application
|
||||
android:name=".DemoApp"
|
||||
android:allowBackup="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.DefaultAppTheme"
|
||||
tools:targetApi="31">
|
||||
|
||||
<activity
|
||||
android:name=".ui.MainActivity"
|
||||
android:exported="true"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
</manifest>
|
BIN
samples/app/src/main/ic_launcher-playstore.png
Normal file
After Width: | Height: | Size: 13 KiB |
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Hikage - An Android responsive UI building tool.
|
||||
* Copyright (C) 2019 HighCapable
|
||||
* https://github.com/BetterAndroid/Hikage
|
||||
*
|
||||
* Apache License Version 2.0
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* This file is created by fankes on 2025/4/20.
|
||||
*/
|
||||
package com.highcapable.hikage.demo
|
||||
|
||||
import android.app.Application
|
||||
import com.google.android.material.color.DynamicColors
|
||||
|
||||
class DemoApp : Application() {
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
DynamicColors.applyToActivitiesIfAvailable(this)
|
||||
}
|
||||
}
|
@@ -0,0 +1,177 @@
|
||||
/*
|
||||
* Hikage - An Android responsive UI building tool.
|
||||
* Copyright (C) 2019 HighCapable
|
||||
* https://github.com/BetterAndroid/Hikage
|
||||
*
|
||||
* Apache License Version 2.0
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* This file is created by fankes on 2025/2/18.
|
||||
*/
|
||||
@file:Suppress("SetTextI18n", "PrivateResource")
|
||||
|
||||
package com.highcapable.hikage.demo.ui
|
||||
|
||||
import android.os.Bundle
|
||||
import android.text.InputType
|
||||
import android.widget.LinearLayout
|
||||
import androidx.core.view.setPadding
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.google.android.material.textfield.TextInputEditText
|
||||
import com.google.android.material.textfield.TextInputLayout
|
||||
import com.highcapable.betterandroid.ui.extension.view.textToString
|
||||
import com.highcapable.betterandroid.ui.extension.view.toast
|
||||
import com.highcapable.hikage.demo.R
|
||||
import com.highcapable.hikage.demo.ui.base.BaseActivity
|
||||
import com.highcapable.hikage.extension.setContentView
|
||||
import com.highcapable.hikage.widget.android.widget.LinearLayout
|
||||
import com.highcapable.hikage.widget.android.widget.TextView
|
||||
import com.highcapable.hikage.widget.androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
import com.highcapable.hikage.widget.com.google.android.material.appbar.MaterialToolbar
|
||||
import com.highcapable.hikage.widget.com.google.android.material.button.MaterialButton
|
||||
import com.highcapable.hikage.widget.com.google.android.material.card.MaterialCardView
|
||||
import com.highcapable.hikage.widget.com.google.android.material.chip.ChipGroup
|
||||
import com.highcapable.hikage.widget.com.google.android.material.materialswitch.MaterialSwitch
|
||||
import com.highcapable.hikage.widget.com.google.android.material.textfield.TextInputEditText
|
||||
import com.highcapable.hikage.widget.com.google.android.material.textfield.TextInputLayout
|
||||
import com.highcapable.hikage.widget.com.highcapable.hikage.demo.ui.widget.CheckableChip
|
||||
import android.R as Android_R
|
||||
import com.google.android.material.R as Material_R
|
||||
|
||||
class MainActivity : BaseActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView {
|
||||
lateinit var usernameInput: TextInputEditText
|
||||
lateinit var passwordInput: TextInputEditText
|
||||
CoordinatorLayout(
|
||||
lparams = LayoutParams(matchParent = true)
|
||||
) {
|
||||
MaterialToolbar(
|
||||
lparams = LayoutParams(widthMatchParent = true),
|
||||
init = {
|
||||
title = stringResource(R.string.app_name)
|
||||
}
|
||||
)
|
||||
LinearLayout(
|
||||
lparams = LayoutParams(matchParent = true) {
|
||||
topMargin = dimenResource(Material_R.dimen.m3_appbar_size_compact).toInt()
|
||||
},
|
||||
init = {
|
||||
orientation = LinearLayout.VERTICAL
|
||||
setPadding(16.dp)
|
||||
}
|
||||
) {
|
||||
TextInputLayout(
|
||||
lparams = LayoutParams(widthMatchParent = true),
|
||||
init = {
|
||||
hint = stringResource(R.string.text_username)
|
||||
}
|
||||
) {
|
||||
usernameInput = TextInputEditText(
|
||||
lparams = LayoutParams(widthMatchParent = true)
|
||||
) {
|
||||
isSingleLine = true
|
||||
}
|
||||
}
|
||||
TextInputLayout(
|
||||
lparams = LayoutParams(widthMatchParent = true) {
|
||||
topMargin = 12.dp
|
||||
},
|
||||
init = {
|
||||
hint = stringResource(R.string.text_password)
|
||||
endIconMode = TextInputLayout.END_ICON_PASSWORD_TOGGLE
|
||||
}
|
||||
) {
|
||||
passwordInput = TextInputEditText(
|
||||
lparams = LayoutParams(widthMatchParent = true)
|
||||
) {
|
||||
isSingleLine = true
|
||||
inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
|
||||
}
|
||||
}
|
||||
ChipGroup(
|
||||
lparams = LayoutParams(widthMatchParent = true) {
|
||||
topMargin = 16.dp
|
||||
},
|
||||
init = {
|
||||
isSingleSelection = true
|
||||
}
|
||||
) {
|
||||
repeat(2) { index ->
|
||||
CheckableChip {
|
||||
text = when (index) {
|
||||
0 -> stringResource(R.string.text_gender_man)
|
||||
else -> stringResource(R.string.text_gender_woman)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
MaterialSwitch(
|
||||
lparams = LayoutParams(widthMatchParent = true) {
|
||||
topMargin = 16.dp
|
||||
},
|
||||
init = {
|
||||
text = stringResource(R.string.text_enable_notification)
|
||||
}
|
||||
)
|
||||
MaterialCardView(
|
||||
lparams = LayoutParams(matchParent = true) {
|
||||
topMargin = 16.dp
|
||||
weight = 1f
|
||||
}
|
||||
) {
|
||||
LinearLayout(
|
||||
lparams = LayoutParams(matchParent = true),
|
||||
init = {
|
||||
orientation = LinearLayout.VERTICAL
|
||||
setPadding(16.dp)
|
||||
}
|
||||
) {
|
||||
TextView {
|
||||
text = stringResource(R.string.text_welcome)
|
||||
}
|
||||
TextView(
|
||||
lparams = LayoutParams {
|
||||
topMargin = 8.dp
|
||||
}
|
||||
) {
|
||||
text = stringResource(R.string.text_description)
|
||||
}
|
||||
}
|
||||
}
|
||||
MaterialButton(
|
||||
lparams = LayoutParams(widthMatchParent = true) {
|
||||
topMargin = 20.dp
|
||||
}
|
||||
) {
|
||||
text = stringResource(R.string.text_submit)
|
||||
setOnClickListener {
|
||||
val username = usernameInput.textToString()
|
||||
val password = passwordInput.textToString()
|
||||
if (username.isNotEmpty() && password.isNotEmpty())
|
||||
MaterialAlertDialogBuilder(this@MainActivity)
|
||||
.setTitle(stringResource(R.string.login_info))
|
||||
.setMessage(stringResource(R.string.login_info_description, username, password))
|
||||
.setPositiveButton(stringResource(Android_R.string.ok), null)
|
||||
.show()
|
||||
else toast(stringResource(R.string.login_info_not_fill_tip))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Hikage - An Android responsive UI building tool.
|
||||
* Copyright (C) 2019 HighCapable
|
||||
* https://github.com/BetterAndroid/Hikage
|
||||
*
|
||||
* Apache License Version 2.0
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* This file is created by fankes on 2025/3/12.
|
||||
*/
|
||||
package com.highcapable.hikage.demo.ui.base
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.annotation.CallSuper
|
||||
import com.highcapable.betterandroid.ui.component.activity.AppViewsActivity
|
||||
import com.highcapable.pangutext.android.factory.PanguTextFactory2
|
||||
|
||||
abstract class BaseActivity : AppViewsActivity() {
|
||||
|
||||
@CallSuper
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
PanguTextFactory2.inject(this)
|
||||
}
|
||||
}
|
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Hikage - An Android responsive UI building tool.
|
||||
* Copyright (C) 2019 HighCapable
|
||||
* https://github.com/BetterAndroid/Hikage
|
||||
*
|
||||
* Apache License Version 2.0
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* This file is created by fankes on 2025/3/12.
|
||||
*/
|
||||
@file:Suppress("SetTextI18n")
|
||||
|
||||
package com.highcapable.hikage.demo.ui.preview
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.Gravity
|
||||
import android.widget.LinearLayout
|
||||
import com.highcapable.hikage.core.base.Hikageable
|
||||
import com.highcapable.hikage.core.preview.HikagePreview
|
||||
import com.highcapable.hikage.widget.android.widget.Button
|
||||
import com.highcapable.hikage.widget.android.widget.LinearLayout
|
||||
import com.highcapable.hikage.widget.android.widget.TextView
|
||||
|
||||
class SamplePreview(context: Context, attrs: AttributeSet) : HikagePreview(context, attrs) {
|
||||
|
||||
override fun build() = Hikageable {
|
||||
LinearLayout(
|
||||
lparams = LayoutParams(matchParent = true),
|
||||
init = {
|
||||
orientation = LinearLayout.VERTICAL
|
||||
gravity = Gravity.CENTER
|
||||
}
|
||||
) {
|
||||
TextView {
|
||||
text = "Hello, World!"
|
||||
textSize = 20f
|
||||
}
|
||||
Button(
|
||||
lparams = LayoutParams {
|
||||
topMargin = 20.dp
|
||||
}
|
||||
) {
|
||||
text = "Test Button"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Hikage - An Android responsive UI building tool.
|
||||
* Copyright (C) 2019 HighCapable
|
||||
* https://github.com/BetterAndroid/Hikage
|
||||
*
|
||||
* Apache License Version 2.0
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* This file is created by fankes on 2025/4/20.
|
||||
*/
|
||||
@file:Suppress("PrivateResource")
|
||||
|
||||
package com.highcapable.hikage.demo.ui.widget
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import com.google.android.material.R
|
||||
import com.google.android.material.chip.Chip
|
||||
import com.highcapable.betterandroid.ui.extension.component.base.getDrawableCompat
|
||||
import com.highcapable.hikage.annotation.HikageView
|
||||
|
||||
@HikageView
|
||||
class CheckableChip(context: Context, attrs: AttributeSet? = null) : Chip(context, attrs) {
|
||||
|
||||
init {
|
||||
isCheckable = true
|
||||
isCheckedIconVisible = true
|
||||
checkedIcon = context.getDrawableCompat(R.drawable.ic_m3_chip_check)
|
||||
}
|
||||
}
|
41
samples/app/src/main/res/drawable/ic_launcher_foreground.xml
Normal file
@@ -0,0 +1,41 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="512"
|
||||
android:viewportHeight="512">
|
||||
<group android:scaleX="0.52"
|
||||
android:scaleY="0.52"
|
||||
android:translateX="122.88"
|
||||
android:translateY="122.88">
|
||||
<path
|
||||
android:pathData="M128,0L384,0A128,128 0,0 1,512 128L512,384A128,128 0,0 1,384 512L128,512A128,128 0,0 1,0 384L0,128A128,128 0,0 1,128 0z"
|
||||
android:fillColor="#4EA16B"/>
|
||||
<path
|
||||
android:pathData="M124,220L155,220A24,24 0,0 1,179 244L179,275A24,24 0,0 1,155 299L124,299A24,24 0,0 1,100 275L100,244A24,24 0,0 1,124 220z"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.9"/>
|
||||
<path
|
||||
android:pathData="M139.5,315L139.5,315A39.5,39.5 0,0 1,179 354.5L179,354.5A39.5,39.5 0,0 1,139.5 394L139.5,394A39.5,39.5 0,0 1,100 354.5L100,354.5A39.5,39.5 0,0 1,139.5 315z"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.9"/>
|
||||
<path
|
||||
android:pathData="M126,118L386,118A30,30 0,0 1,416 148L416,174A30,30 0,0 1,386 204L126,204A30,30 0,0 1,96 174L96,148A30,30 0,0 1,126 118z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M250.83,235.58C249.61,235.74 248.43,236.13 247.36,236.75C246.28,237.36 245.33,238.18 244.57,239.15C243.81,240.13 243.25,241.25 242.93,242.44C242.6,243.64 242.52,244.88 242.68,246.11C242.84,247.34 243.24,248.52 243.86,249.6L260.34,278.47C232.52,295.06 214,324.38 214,357.7C214,359.81 214.07,361.92 214.22,364C214.8,372.17 221.61,378.5 229.81,378.5H396.19C404.5,378.5 411.29,372.02 411.79,363.85C411.93,361.82 412,359.76 412,357.7C412,324.38 393.48,295.06 365.66,278.47L382.14,249.6C382.76,248.52 383.16,247.34 383.32,246.11C383.48,244.88 383.4,243.64 383.07,242.44C382.75,241.25 382.19,240.13 381.43,239.15C380.67,238.18 379.72,237.36 378.64,236.75C377.57,236.13 376.39,235.74 375.17,235.58C373.95,235.42 372.71,235.5 371.52,235.83C370.33,236.15 369.21,236.71 368.24,237.47C367.27,238.23 366.45,239.17 365.85,240.24L348.65,270.38C337.58,266.32 325.56,264.1 313,264.1C300.44,264.1 288.42,266.32 277.35,270.38L260.15,240.24C259.55,239.17 258.73,238.23 257.76,237.47C256.79,236.71 255.67,236.15 254.48,235.83C253.29,235.5 252.05,235.42 250.83,235.58ZM286.6,328.45C286.6,334.22 281.92,338.9 276.15,338.9C270.38,338.9 265.7,334.22 265.7,328.45C265.7,322.68 270.38,318 276.15,318C281.92,318 286.6,322.68 286.6,328.45ZM349.85,338.9C355.62,338.9 360.3,334.22 360.3,328.45C360.3,322.68 355.62,318 349.85,318C344.08,318 339.4,322.68 339.4,328.45C339.4,334.22 344.08,338.9 349.85,338.9Z"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillType="evenOdd"/>
|
||||
<path
|
||||
android:pathData="M149.85,146.13C148.68,144.96 146.78,144.96 145.61,146.13L132.88,158.86C132.29,159.45 132,160.22 132,160.99C132,161.76 132.29,162.54 132.88,163.13L145.61,175.86C146.78,177.03 148.68,177.03 149.85,175.86C151.02,174.68 151.02,172.79 149.85,171.61L139.23,160.99L149.85,150.37C151.02,149.2 151.02,147.3 149.85,146.13Z"
|
||||
android:fillColor="#4EA16B"/>
|
||||
<path
|
||||
android:pathData="M138.76,160.99C138.76,159.34 140.1,157.99 141.76,157.99H183.76C185.41,157.99 186.76,159.34 186.76,160.99C186.76,162.65 185.41,163.99 183.76,163.99H141.76C140.1,163.99 138.76,162.65 138.76,160.99Z"
|
||||
android:fillColor="#4EA16B"/>
|
||||
<path
|
||||
android:pathData="M362.15,146.13C363.32,144.96 365.22,144.96 366.39,146.13L379.12,158.86C379.71,159.45 380,160.22 380,160.99C380,161.76 379.71,162.54 379.12,163.13L366.39,175.86C365.22,177.03 363.32,177.03 362.15,175.86C360.98,174.68 360.98,172.79 362.15,171.61L372.77,160.99L362.15,150.37C360.98,149.2 360.98,147.3 362.15,146.13Z"
|
||||
android:fillColor="#4EA16B"/>
|
||||
<path
|
||||
android:pathData="M373.24,160.99C373.24,159.34 371.9,157.99 370.24,157.99H328.24C326.59,157.99 325.24,159.34 325.24,160.99C325.24,162.65 326.59,163.99 328.24,163.99H370.24C371.9,163.99 373.24,162.65 373.24,160.99Z"
|
||||
android:fillColor="#4EA16B"/>
|
||||
</group>
|
||||
</vector>
|
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
BIN
samples/app/src/main/res/mipmap-hdpi/ic_launcher.webp
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
samples/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
samples/app/src/main/res/mipmap-mdpi/ic_launcher.webp
Normal file
After Width: | Height: | Size: 766 B |
BIN
samples/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
samples/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
samples/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
samples/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
samples/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
Normal file
After Width: | Height: | Size: 6.1 KiB |
BIN
samples/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
Normal file
After Width: | Height: | Size: 3.0 KiB |
BIN
samples/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
Normal file
After Width: | Height: | Size: 8.5 KiB |
4
samples/app/src/main/res/values-night/themes.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<resources>
|
||||
<!-- Base application theme. -->
|
||||
<style name="Base.Theme.DefaultAppTheme" parent="Theme.Material3.DayNight.NoActionBar" />
|
||||
</resources>
|
15
samples/app/src/main/res/values-zh-rCN/strings.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">Hikage 演示</string>
|
||||
<string name="text_username">用户名</string>
|
||||
<string name="text_password">密码</string>
|
||||
<string name="text_gender_man">男</string>
|
||||
<string name="text_gender_woman">女</string>
|
||||
<string name="text_enable_notification">启用通知</string>
|
||||
<string name="text_description">如你所见,所有布局都通过代码动态创建,你可以在任何地方对布局进行自定义。</string>
|
||||
<string name="text_submit">提交</string>
|
||||
<string name="login_info">登录信息</string>
|
||||
<string name="login_info_description">用户名:%1$s\n密码:%1$s</string>
|
||||
<string name="login_info_not_fill_tip">请填写所有内容</string>
|
||||
<string name="text_welcome">欢迎使用 Hikage!</string>
|
||||
</resources>
|
8
samples/app/src/main/res/values/colors.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="black">#FF000000</color>
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
<color name="theme">#FF639F70</color>
|
||||
<color name="background_day">#FFF5F5F5</color>
|
||||
<color name="background_night">#FF2D2D2D</color>
|
||||
</resources>
|
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#4EA16B</color>
|
||||
</resources>
|
14
samples/app/src/main/res/values/strings.xml
Normal file
@@ -0,0 +1,14 @@
|
||||
<resources>
|
||||
<string name="app_name">Hikage Demo</string>
|
||||
<string name="text_username">Username</string>
|
||||
<string name="text_password">Password</string>
|
||||
<string name="text_gender_man">Man</string>
|
||||
<string name="text_gender_woman">Woman</string>
|
||||
<string name="text_enable_notification">Enable Notification</string>
|
||||
<string name="text_description">As you can see, all layouts are created dynamically through code, and you can customize the layout anywhere.</string>
|
||||
<string name="text_submit">Submit</string>
|
||||
<string name="login_info">Login Info</string>
|
||||
<string name="login_info_description">Username: %1$s\nPassword: %1$s</string>
|
||||
<string name="login_info_not_fill_tip">Please fill in all fields</string>
|
||||
<string name="text_welcome">Welcome to use Hikage!</string>
|
||||
</resources>
|
6
samples/app/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<resources>
|
||||
<!-- Base application theme. -->
|
||||
<style name="Base.Theme.DefaultAppTheme" parent="Theme.Material3.DayNight.NoActionBar" />
|
||||
|
||||
<style name="Theme.DefaultAppTheme" parent="Base.Theme.DefaultAppTheme" />
|
||||
</resources>
|
@@ -0,0 +1,17 @@
|
||||
package com.highcapable.hikage.demo
|
||||
|
||||
import org.junit.Test
|
||||
|
||||
import org.junit.Assert.*
|
||||
|
||||
/**
|
||||
* Example local unit test, which will execute on the development machine (host).
|
||||
*
|
||||
* See [testing documentation](http://d.android.com/tools/testing).
|
||||
*/
|
||||
class ExampleUnitTest {
|
||||
@Test
|
||||
fun addition_isCorrect() {
|
||||
assertEquals(4, 2 + 2)
|
||||
}
|
||||
}
|