Sí, és possible substituir el MainActivity.kt que et va generar Android Studio per una versió que no utilitzi Jetpack Compose i que en canvi faci servir vistes clàssiques (XML) com al codi Java que proposes — però caldrà fer alguns canvis addicionals al projecte, perquè ara està configurat per funcionar amb Jetpack Compose, i el teu codi Java fa servir AppCompatActivity + XML.
A continuació t’explico pas a pas què has de fer per fer aquest canvi de forma neta i funcional.
🔄 Objectiu
Passar d’un projecte Compose (modern) a un projecte basat en XML i AppCompatActivity (clàssic), per poder usar el codi Java que tens (o la seva versió en Kotlin).
✅ Passos necessaris
1. Canvia la classe base de MainActivity
El teu codi Java hereta de AppCompatActivity, però el projecte actual usa ComponentActivity (per Compose).
Això està bé, però caldrà afegir la dependència d’AppCompat si no hi és.
2. Afegeix les dependències d’AppCompat (si no hi són)
Obre el fitxer app/build.gradle.kts (o build.gradle si és en Groovy) i assegura’t que tens:
dependencies {
implementation("androidx.appcompat:appcompat:1.7.0")
implementation("com.google.android.material:material:1.12.0")
// ... altres dependències
}
Si ja tens aquestes línies, perfecte. Si no, afegeix-les i fes Sync Now.
3. Crea el fitxer de disseny XML
El teu codi Java fa servir setContentView(R.layout.activity_main) i findViewById, així que necessites un fitxer XML.
Crea res/layout/activity_main.xml:
Dins de app/src/main/res/layout/, crea (o substitueix) el fitxer:
<?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:orientation="vertical"
android:padding="16dp">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Escriu aquí..."
android:inputType="textMultiLine"
android:lines="3" />
<Button
android:id="@+id/btnSpeak"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Parla!" />
</LinearLayout>
4. Reescriu MainActivity.kt en Kotlin (versió moderna del teu Java)
Pots mantenir Kotlin (recomanat) i fer el mateix que el teu Java, però en Kotlin:
package com.example.mytest
import android.os.Bundle
import android.speech.tts.TextToSpeech
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import java.util.Locale
class MainActivity : AppCompatActivity() {
private lateinit var tts: TextToSpeech
private lateinit var editText: EditText
private lateinit var btnSpeak: Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
editText = findViewById(R.id.editText)
btnSpeak = findViewById(R.id.btnSpeak)
tts = TextToSpeech(this) { status ->
if (status == TextToSpeech.SUCCESS) {
val result = tts.setLanguage(Locale("ca", "ES"))
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
Toast.makeText(this, "⚠️ Veu catalana no disponible", Toast.LENGTH_LONG).show()
}
}
}
btnSpeak.setOnClickListener {
val text = editText.text.toString()
if (text.isNotEmpty()) {
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null, null)
}
}
}
override fun onDestroy() {
tts.stop()
tts.shutdown()
super.onDestroy()
}
}
🔔 Nota: El
packageha de sercom.example.mytest(el del teu projecte), nocom.exemple.ttscatala.
5. Elimina o comenta el codi de Compose
Ja no necessites:
enableEdgeToEdge()setContent { ... }@Composable,Scaffold, etc.
El nou MainActivity.kt no fa servir res de Compose, així que pots esborrar tot el codi anterior i posar aquest de dalt.
6. (Opcional) Elimina dependències de Compose
Si no vols usar Compose en absolut, pots eliminar aquestes línies del build.gradle.kts:
implementation("androidx.activity:activity-compose:1.9.2")
implementation("androidx.compose.ui:ui:1.6.8")
implementation("androidx.compose.ui:ui-tooling-preview:1.6.8")
implementation("androidx.compose.material3:material3:1.2.1")
I també pots esborrar la carpeta ui.theme si no la necessites.
⚠️ Però si només vols provar aquesta app simple, pots deixar-les; no passa res.
✅ Resultat
Amb aquests canvis:
- Tindràs una app clàssica amb EditText + Botó.
- Parlarà en català (si el dispositiu ho suporta).
- No usarà Jetpack Compose.
Vols que t’ajudi a convertir aquesta app perquè parli automàticament en obrir-se (com en la teva idea inicial de “Hello World” que parla)?