0

I'm working on this project with my classmates, and we decided to do a recipe app. I'm working on the create recipe screen. Instead of adding multiline text for the instructions, I added plain text(1 for each instruction) just so that the appearance of all the recipes will be consistent. At first, it will start of with one instruction and then I want the user to be able to add more from then on.

here's the xml :

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:contentDescription="@string/app_name" >

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:id="@+id/editTxtRecipeName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginTop="32dp"
            android:layout_marginEnd="16dp"
            android:ems="10"
            android:hint="@string/recipe_name"
            android:inputType="textPersonName"
            android:minHeight="48dp"
            app:layout_constraintEnd_toStartOf="@+id/guideline7"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/addThumbnail"
            android:importantForAutofill="no" />

        <TextView
            android:id="@+id/txtCountry"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:fontFamily="@font/arya_bold"
            android:text="@string/cuisine"
            android:textColor="#FF6700"
            android:textSize="16sp"
            app:layout_constraintStart_toStartOf="@+id/guideline8"
            app:layout_constraintTop_toBottomOf="@+id/editTxtRecipeName" />

        <Spinner
            android:id="@+id/spnCountries"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="32dp"
            android:minHeight="48dp"
            app:layout_constraintBottom_toBottomOf="@+id/txtCountry"
            app:layout_constraintStart_toEndOf="@+id/txtCountry"
            app:layout_constraintTop_toTopOf="@+id/txtCountry"
            tools:ignore="SpeakableTextPresentCheck"
            android:entries="@array/countries"/>

        <TextView
            android:id="@+id/txtEquipment"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="64dp"
            android:fontFamily="@font/arya_bold"
            android:text="@string/equipment"
            android:textColor="#FF6700"
            android:textSize="20sp"
            app:layout_constraintStart_toStartOf="@+id/txtDuration"
            app:layout_constraintTop_toBottomOf="@+id/txtDuration" />

        <EditText
            android:id="@+id/editTxtEquipment"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="16dp"
            android:ems="10"
            android:hint="@string/_200c_fan_oven"
            android:inputType="textPersonName"
            android:minHeight="48dp"
            app:layout_constraintEnd_toStartOf="@+id/guideline7"
            app:layout_constraintStart_toStartOf="@+id/guideline8"
            app:layout_constraintTop_toBottomOf="@+id/txtEquipment"
            android:importantForAutofill="no" />

        <ImageButton
            android:id="@+id/btnImgAddEquip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:backgroundTint="#004E98"
            app:layout_constraintEnd_toStartOf="@+id/guideline7"
            app:layout_constraintStart_toStartOf="@+id/guideline8"
            app:layout_constraintTop_toBottomOf="@+id/editTxtEquipment"
            app:srcCompat="@android:drawable/ic_menu_add"
            tools:ignore="SpeakableTextPresentCheck" />

        <TextView
            android:id="@+id/txtIngredients"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:fontFamily="@font/arya_bold"
            android:text="@string/ingredients"
            android:textColor="#FF6700"
            android:textSize="20sp"
            app:layout_constraintStart_toStartOf="@+id/editTxtEquipment"
            app:layout_constraintTop_toBottomOf="@+id/btnImgAddEquip" />

        <EditText
            android:id="@+id/editTxtIngredient"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="16dp"
            android:ems="10"
            android:hint="@string/_500g_chicken_diced"
            android:inputType="textPersonName"
            android:minHeight="48dp"
            app:layout_constraintEnd_toStartOf="@+id/guideline7"
            app:layout_constraintStart_toStartOf="@+id/guideline8"
            app:layout_constraintTop_toBottomOf="@+id/txtIngredients"
            android:importantForAutofill="no" />

        <ImageButton
            android:id="@+id/btnImgAddIngr"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:backgroundTint="#004E98"
            app:layout_constraintEnd_toStartOf="@+id/guideline7"
            app:layout_constraintStart_toStartOf="@+id/guideline8"
            app:layout_constraintTop_toBottomOf="@+id/editTxtIngredient"
            app:srcCompat="@android:drawable/ic_menu_add"
            tools:ignore="SpeakableTextPresentCheck" />

        <TextView
            android:id="@+id/txtMethod"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:fontFamily="@font/arya_bold"
            android:text="@string/method"
            android:textColor="#FF6700"
            android:textSize="20sp"
            app:layout_constraintStart_toStartOf="@+id/editTxtIngredient"
            app:layout_constraintTop_toBottomOf="@+id/btnImgAddIngr" />

        <ImageButton
            android:id="@+id/btnImgAddMethod"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:backgroundTint="#004E98"
            android:contentDescription="@string/add_image_to_method"
            app:layout_constraintEnd_toEndOf="@+id/editTxtMethod"
            app:layout_constraintHorizontal_bias="0.39"
            app:layout_constraintStart_toStartOf="@+id/editTxtMethod"
            app:layout_constraintTop_toBottomOf="@+id/editTxtMethod"
            app:srcCompat="@android:drawable/ic_menu_gallery" />

        <ImageButton
            android:id="@+id/imageButton6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:backgroundTint="#004E98"
            android:contentDescription="@string/add_another_step"
            app:layout_constraintBottom_toBottomOf="@+id/btnImgAddMethod"
            app:layout_constraintStart_toEndOf="@+id/btnImgAddMethod"
            app:layout_constraintTop_toTopOf="@+id/btnImgAddMethod"
            app:srcCompat="@android:drawable/ic_menu_add" />

        <ImageView
            android:id="@+id/viewThumbnail"
            android:layout_width="149dp"
            android:layout_height="149dp"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:srcCompat="@android:drawable/ic_menu_gallery" />

        <Button
            android:id="@+id/addThumbnail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:backgroundTint="#004E98"
            android:text="@string/thumbnail"
            app:layout_constraintEnd_toEndOf="@+id/viewThumbnail"
            app:layout_constraintStart_toStartOf="@+id/viewThumbnail"
            app:layout_constraintTop_toBottomOf="@+id/viewThumbnail" />

        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="95dp"
            android:backgroundTint="#004E98"
            android:text="@string/video"
            app:layout_constraintBottom_toBottomOf="@+id/addThumbnail"
            app:layout_constraintStart_toEndOf="@+id/addThumbnail"
            app:layout_constraintTop_toTopOf="@+id/addThumbnail"
            app:layout_constraintVertical_bias="0.0" />

        <ImageView
            android:id="@+id/viewVideo"
            android:layout_width="164dp"
            android:layout_height="149dp"
            android:layout_marginTop="16dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.743"
            app:layout_constraintStart_toEndOf="@+id/viewThumbnail"
            app:layout_constraintTop_toTopOf="parent"
            app:srcCompat="@android:drawable/ic_menu_slideshow" />

        <TextView
            android:id="@+id/txtCultureDescription"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:fontFamily="@font/arya_bold"
            android:text="@string/personal_story"
            android:textColor="#FF6700"
            android:textSize="20sp"
            app:layout_constraintStart_toStartOf="@+id/guideline8"
            app:layout_constraintTop_toBottomOf="@+id/btnImgAddMethod" />

        <Button
            android:id="@+id/button4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="32dp"
            android:layout_marginBottom="64dp"
            android:backgroundTint="#004E98"
            android:text="@string/button"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/editPersonalStory" />

        <EditText
            android:id="@+id/editPersonalStory"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="16dp"
            android:ems="10"
            android:gravity="start|top"
            android:hint="@string/tell_us_about_your_culture_country"
            android:inputType="textMultiLine"
            android:minHeight="48dp"
            app:layout_constraintEnd_toStartOf="@+id/guideline7"
            app:layout_constraintStart_toStartOf="@+id/guideline8"
            app:layout_constraintTop_toBottomOf="@+id/txtCultureDescription"
            android:importantForAutofill="no" />

        <EditText
            android:id="@+id/editTxtMethod"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="16dp"
            android:ems="10"
            android:gravity="start|top"
            android:hint="@string/pan_fry_chicken_fr_10_mins"
            android:inputType="textMultiLine"
            app:layout_constraintEnd_toStartOf="@+id/guideline7"
            app:layout_constraintStart_toStartOf="@+id/guideline8"
            app:layout_constraintTop_toBottomOf="@+id/txtMethod"
            android:importantForAutofill="no" />

        <TextView
            android:id="@+id/txtDuration"
            android:layout_width="90dp"
            android:layout_height="0dp"
            android:layout_marginTop="24dp"
            android:fontFamily="@font/arya_bold"
            android:text="@string/approx_cooking_time"
            android:textColor="#FF6700"
            android:textSize="16sp"
            app:layout_constraintStart_toStartOf="@+id/txtCountry"
            app:layout_constraintTop_toBottomOf="@+id/txtCountry" />

        <Spinner
            android:id="@+id/spnHours"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:minHeight="48dp"
            app:layout_constraintBottom_toBottomOf="@+id/txtDuration"
            app:layout_constraintStart_toEndOf="@+id/txtDuration"
            app:layout_constraintTop_toTopOf="@+id/txtDuration"
            tools:ignore="SpeakableTextPresentCheck"
            android:entries="@array/hours"/>

        <TextView
            android:id="@+id/txtHours"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:text="@string/hrs"
            android:textSize="16sp"
            app:layout_constraintBottom_toBottomOf="@+id/spnHours"
            app:layout_constraintStart_toEndOf="@+id/spnHours"
            app:layout_constraintTop_toTopOf="@+id/spnHours" />

        <Spinner
            android:id="@+id/spnMinutes"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="24dp"
            android:minHeight="48dp"
            app:layout_constraintBottom_toBottomOf="@+id/spnHours"
            app:layout_constraintStart_toEndOf="@+id/txtHours"
            app:layout_constraintTop_toTopOf="@+id/spnHours"
            tools:ignore="SpeakableTextPresentCheck"
            android:entries="@array/minutes"/>

        <TextView
            android:id="@+id/txtMinutes"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:text="@string/mins"
            android:textSize="16sp"
            app:layout_constraintBottom_toBottomOf="@+id/spnMinutes"
            app:layout_constraintStart_toEndOf="@+id/spnMinutes"
            app:layout_constraintTop_toTopOf="@+id/spnMinutes" />

        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/guideline7"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintGuide_begin="395dp" />

        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/guideline8"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintGuide_begin="16dp" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>

I originally thought I would be able to write to the activity_main.xml using the MainActivity.java, but apparently the xml files are read-only. I know the answer sounds obvious after typing that, but is there a way to dynamically change the layout?

jrrj
  • 17
  • 3
  • https://stackoverflow.com/q/4203506/3916792 I think it will help you. – rafi Mar 23 '22 at 03:45
  • check this out http://android-er.blogspot.com/2015/12/add-and-remove-view-dynamically-with.html and https://www.tutorialspoint.com/add-and-remove-views-in-android-dynamically – Elango Mar 23 '22 at 03:47
  • Most likely you want recyclerview, as another poster said. However, in general you can add a view to any viewgroup at runtime, by calling addView on the view you wish to be a parent and passing it the new view. – Gabe Sechan Mar 23 '22 at 04:30

2 Answers2

0

What you want is to create a dynamic list with a RecyclerView. There are some sample apps at the bottom to help you get started.

If you have any questions after reading feel free to edit your post or create another one.

zen_of_kermit
  • 1,404
  • 2
  • 13
  • 19
0

RecylerView is the correct way to do it . But since you are a beginner to android i presume use ArrayAdapter for any list like elements.

"change the layout dynamically" is a bit broad but use

// view is any element in your code
view.visibility = View.Visible
view.visibility = View.GONE

XML based layout works on events ..what i mean by that is something happens when you interact . So for example if you want an image to disappear on the click of a button you would do something like

view.setOnCLickListener{
imageview.visibility = View.GONE
}
Narendra_Nath
  • 4,578
  • 3
  • 13
  • 31