我是一个写代码的新手,很抱歉我猜这可能是一个非常简单的问题。我遵循了Android的Build your first app指南。接下来,我尝试通过以下教程添加一个启动器闪屏(this being one of them)。当我在模拟器中运行应用程序时,它加载速度太快,以至于我无法判断启动屏幕是否正常工作。是否有办法暂时降低模拟器的速度以检查启动屏幕?此外,单击Send按钮时应用程序崩溃,这没有意义,因为sendMessage
函数存在于MainActivity中。
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myfirstapp, PID: 9242
java.lang.IllegalStateException: Could not find method sendMessage(View) in a parent or ancestor Context for android:onClick attribute defined on view class androidx.appcompat.widget.AppCompatButton with id 'button'
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:436)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:393)
at android.view.View.performClick(View.java:7125)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
老实说,我不确定是哪里出了问题,或者是应用程序太小,以至于启动屏幕都没有显示出来。我也不确定在这里分享我的项目的最佳方式。下面是所有的代码。
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myfirstapp">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".SplashActivity"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".DisplayMessageActivity"
android:parentActivityName=".MainActivity">
<!-- For API 15 -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
</activity>
</application>
</manifest>
MainActivity.kt
package com.example.myfirstapp
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.EditText
const val EXTRA_MESSAGE = "come.example.myfirstapp.MESSAGE"
class MainActivity : AppCompatActivity()
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
//Called when user taps Send button
fun sendMessage(view: View)
{
val editText = findViewById<EditText>(R.id.editTextTextPersonName)
val message = editText.text.toString()
val intent = Intent(this, DisplayMessageActivity::class.java).apply {putExtra(EXTRA_MESSAGE, message)}
startActivity(intent)
}
}
显示消息活动
package com.example.myfirstapp
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
class DisplayMessageActivity : AppCompatActivity()
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_display_message)
//Get the Intent that started this activity and extract the string
val message = intent.getStringExtra(EXTRA_MESSAGE)
//Capture the layout's TextView and set the string as its text
val text = findViewById<TextView>(R.id.textView).apply {text = message}
}
}
启动活动
package com.example.myfirstapp
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
class SplashActivity : AppCompatActivity()
{
override fun onCreate(savedIntanceState: Bundle?)
{
setTheme(R.style.AppTheme)
super.onCreate(savedIntanceState)
setContentView(R.layout.activity_main)
}
}
可绘制的splash_背景. xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<item android:drawable="@color/colorPrimary" />
<item>
<bitmap android:gravity="center" android:src="@mipmap/ic_launcher" />
</item>
</layer-list>
值样式. xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<!-- Splash Screen theme. -->
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/splash_background</item>
</style>
</resources>
很抱歉给你一个新手的问题,我希望我没有违反任何规则,但我希望能得到一些指导。谢谢!
编辑-在S T帮助后更新错误
3条答案
按热度按时间vsikbqxv1#
如果你想为第一次启动添加一个教程,有很好的解释如何创建一个介绍与幻灯片:https://www.androidhive.info/2016/05/android-build-intro-slider-app/
如果你只想在每次启动应用程序时出现一个简单的闪屏,请参阅以下内容:https://android.jlelse.eu/the-complete-android-splash-screen-guide-c7db82bce565
sr4lhrrt2#
我认为您的问题是两个Activity使用了相同的布局。请为SplashActivity设置不同的布局。
klh5stk13#
在splash活动中,你应该使用Kotlindelay(3000)函数。它会等待3秒。如下所示: