web-dev-qa-db-fra.com

Basic Android Écran Splash

Je suis nouveau pour écrire du code et m'excuser pour ce que je devine est probablement une question très simple. J'ai suivi Android construire votre première application Guide. Ensuite, j'essaie d'ajouter un écran de lanceur Splash en suivant un certain nombre de tutoriels ( ceci en être l'un d'entre eux ). Lorsque j'exécute l'application dans l'émulateur, il charge si vite que je ne peux pas dire si l'écran de l'éclaboussure fonctionne. Existe-t-il un moyen de ralentir temporairement l'émulateur pour vérifier l'écran des éclaboussures? De plus, l'application se bloque lorsque le bouton d'envoi est cliqué qui n'a pas de sens car la fonction sendMessage existe dans la 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)

Je ne sais honnêtement pas ce qui ne va pas ou si l'application est tellement petite qu'un écran de splash ne s'affiche pas. Je ne suis pas non plus sûr de la meilleure façon de partager mon projet ici. Donc, ci-dessous est tout le code.

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>

MainAlacit.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)
    }
}

DisplayMessageAactivité

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}
    }
}

Splashactivité

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_background.xml dessinable

<?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>

valeurs styles.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>

Désolé pour la question du novice, et j'espère que je ne règle aucune règle en l'affrontant, mais j'apprécierais des conseils. Merci!

EDIT - Erreur mise à jour après l'aide de S t

3
Tom

Je pense que votre problème est que vous utilisez la même mise en page pour les deux activités. Définir une mise en page différente pour la splashactivité.

0