Три макета, которые делают одно и то же для одного занятия - PullRequest
0 голосов
/ 13 января 2019

Совершенно новичок в игре кодирования и хотел бы знать, если и как я могу сделать следующее в Android Studio. У меня есть активность для типа игры и три раскладки для нее: layout_main, layout_opt1, layout_opt2. Все они делают одно и то же, просто имеют разные дизайны, чтобы пользователь мог выбрать лучшее для своих нужд или предпочтений.

Пользователь может переключаться между ними при нажатии кнопки, но моя проблема в том, что когда я переключаюсь с одного на любой другой, он не отображает данные, которые были в последнем, даже если я использую те же идентификаторы для поля и хотел бы знать, как я могу предотвратить это.

К сожалению, сейчас у меня нет кода для этого, потому что я удалил проект, чтобы начать его с нуля из-за других проблем.

Ответы [ 3 ]

0 голосов
/ 13 января 2019

, если вы хотите использовать 3 разных макета для типа использования Activity, например 1,2,3.

  1. layout_main.xml
  2. layout_opt1.xml
  3. layout_opt2.xml

и перед проверкой типа setcontent view, а затем onsetcontentview установите желаемую раскладку и вызовите методы для этой конкретной раскладки, используя проверку типа.

Второй трюк

Вы можете использовать фрагменты для лучшего управления кодом.

Третий трюк

Используйте <include/>, чтобы добавить другое представление к одному XML-файлу. и установите видимость этого макета в соответствии с типами.

Четвертый трюк

используйте ConstraintSet для лучшей оптимизации и управления памятью.

0 голосов
/ 13 января 2019

Это самый экономичный способ сделать то, что вы хотите сделать. Этот метод экономит память и не заставляет Android перерисовывать весь макет на дисплее, тем самым экономя массу процесса и памяти.

MainActivity.java

public class MainActivity extends AppCompatActivity {
    ConstraintLayout layout;
    ConstraintSet constraintSet1 = new ConstraintSet();
    ConstraintSet constraintSet2 = new ConstraintSet();
    ConstraintSet constraintSet3 = new ConstraintSet();
    private byte count = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_main);
        layout = findViewById(R.id.layout);
        constraintSet1.clone(layout);
        constraintSet2.clone(this,R.layout.layout_opt1);
        constraintSet3.clone(this,R.layout.layout_opt2);
    }
    public void changeLayout(View view) {
        if (count == 1){
            constraintSet2.applyTo(layout);
            count = 2;
        }
        else if (count == 2){
            constraintSet3.applyTo(layout);
            count = 3;
        }else {
            constraintSet1.applyTo(layout);
            count = 1;
        }
    }
}

Используйте свою собственную логику для изменения представления. Я использовал счетную логику, чтобы отслеживать изменения макета. Вы можете использовать другую логику, например использование логических переменных или использование нескольких кнопок, а затем обрабатывать их onClicks отдельно в каждой настройке макетов.

Просто помните, что вы должны использовать одни и те же виды с одинаковыми идентификаторами во всех макетах. Если вы не хотите показывать какое-либо представление в некотором макете, просто измените видимость этого представления в этом макете либо из кода Java, либо из кода XML.

layout_main.xml

<android.support.constraint.ConstraintLayout 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:id="@+id/layout"
android:layout_height="match_parent"
tools:context=".MainActivity">

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="16dp"
    android:layout_marginEnd="8dp"
    android:onClick="changeLayout"
    android:text="Change Layout"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.498"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:text="BTN A"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/guideline" />

<ImageView
    android:id="@+id/imageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginBottom="8dp"
    app:layout_constraintBottom_toBottomOf="@+id/button3"
    app:layout_constraintEnd_toStartOf="@+id/button3"
    app:layout_constraintStart_toEndOf="@+id/button2"
    app:layout_constraintTop_toTopOf="@+id/button2"
    app:srcCompat="@android:drawable/btn_star_big_on" />

<Button
    android:id="@+id/button3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:text="BTN B"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="@+id/guideline" />

<android.support.constraint.Guideline
    android:id="@+id/guideline"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:layout_constraintGuide_percent="0.3" />
</android.support.constraint.ConstraintLayout>

layout_opt1.xml

<android.support.constraint.ConstraintLayout 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:id="@+id/layout"
android:layout_height="match_parent"
tools:context=".MainActivity">

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="16dp"
    android:layout_marginEnd="8dp"
    android:onClick="changeLayout"
    android:text="Change Layout"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.498"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:text=" BTN A"
    app:layout_constraintBottom_toBottomOf="@+id/button3"
    app:layout_constraintEnd_toStartOf="@+id/button3"
    app:layout_constraintStart_toEndOf="@+id/imageView"
    app:layout_constraintTop_toTopOf="@+id/imageView" />

<ImageView
    android:id="@+id/imageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/guideline"
    app:srcCompat="@android:drawable/btn_star_big_on" />

<Button
    android:id="@+id/button3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:text="BTN B"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="@+id/guideline" />

<android.support.constraint.Guideline
    android:id="@+id/guideline"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:layout_constraintGuide_percent="0.3" />
</android.support.constraint.ConstraintLayout>

layout_opt2.xml

<android.support.constraint.ConstraintLayout 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:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="16dp"
    android:layout_marginEnd="8dp"
    android:onClick="changeLayout"
    android:text="Change Layout"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.498"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:text="BTN A"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/guideline" />

<ImageView
    android:id="@+id/imageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="@+id/guideline"
    app:srcCompat="@android:drawable/btn_star_big_on" />

<Button
    android:id="@+id/button3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:text="BTN B"
    app:layout_constraintBottom_toBottomOf="@+id/button2"
    app:layout_constraintEnd_toStartOf="@+id/imageView"
    app:layout_constraintStart_toEndOf="@+id/button2"
    app:layout_constraintTop_toTopOf="@+id/imageView" />

<android.support.constraint.Guideline
    android:id="@+id/guideline"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:layout_constraintGuide_percent="0.3" />
</android.support.constraint.ConstraintLayout>

Вы можете видеть в приведенных выше макетах все виды одинаковы.

0 голосов
/ 13 января 2019

Вы сказали, что макеты делают то же самое, но имеют разные дизайны. Подскажите, пожалуйста, чем отличаются дизайны? (Как разные кнопки или фоны, или, как вы сказали, это игра) Трудно предложить что-то, не понимающее концепцию ясно.

Зависит от того, как вы меняете макеты. Вы можете использовать фрагменты или попробовать установить Видимость (Вид / Унесенные) виджетов, сохраняя данные и функции в одном и том же действии. Но не могу сказать наверняка без достаточного количества информации. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...