三种布局可对一项活动执行相同的操作

时间:2019-01-13 15:01:24

标签: android android-layout

这是编码游戏的新手,想知道是否以及如何在Android Studio中执行以下操作。 我有一种类型的游戏的活动,并且有三种布局:layout_mainlayout_opt1layout_opt2。它们都做相同的事情,只是设计不同,因此用户可以根据自己的需要或喜好选择最佳的产品。

用户可以在按下按钮时在它们之间切换,但是我的问题是,当我从一个切换到另一个时,即使我使用相同的ID也不显示最后一个的数据。领域,并想知道如何防止这种情况的发生。

不幸的是,我现在没有代码,因为由于其他问题,我从头开始删除了该项目。

3 个答案:

答案 0 :(得分:3)

这是最经济高效的方式来完成您想做的事情。此方法可以节省内存,并且不会强制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。

请记住,您必须在所有布局中使用具有相同ID的相同视图。 如果您不想在某个布局中显示任何视图,只需从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>

您可以在上述布局中看到所有视图。

答案 1 :(得分:1)

如果您要为Activity使用3种不同的布局,请使用1,2,3之类的类型。

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

并在setcontent视图之前检查类型,然后onsetcontentview设置所需的布局,并使用类型检查为该特定布局调用方法。

第二招

您可以使用片段来更好地管理代码。

第三招

使用<include/>将不同的视图添加到单个xml文件。 并根据类型为该布局设置可见性。

第四把戏

使用ConstraintSet获得更好的优化和内存管理。

答案 2 :(得分:0)

您说布局执行相同的操作,但是设计不同。您能否说明一下设计有何不同? (就像您说的那样,就像其他按钮或背景一样) 很难提出一些不清楚的概念。

取决于您如何更改布局。 您可以使用片段或尝试设置窗口小部件的Visibility(View / Gone),以保持同一活动中的数据和功能持久。但是如果没有足够的信息就不能确定。 谢谢。