这是编码游戏的新手,想知道是否以及如何在Android Studio中执行以下操作。
我有一种类型的游戏的活动,并且有三种布局:layout_main
,layout_opt1
,layout_opt2
。它们都做相同的事情,只是设计不同,因此用户可以根据自己的需要或喜好选择最佳的产品。
用户可以在按下按钮时在它们之间切换,但是我的问题是,当我从一个切换到另一个时,即使我使用相同的ID也不显示最后一个的数据。领域,并想知道如何防止这种情况的发生。
不幸的是,我现在没有代码,因为由于其他问题,我从头开始删除了该项目。
答案 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之类的类型。
并在setcontent视图之前检查类型,然后onsetcontentview设置所需的布局,并使用类型检查为该特定布局调用方法。
您可以使用片段来更好地管理代码。
使用<include/>
将不同的视图添加到单个xml文件。
并根据类型为该布局设置可见性。
使用ConstraintSet
获得更好的优化和内存管理。
答案 2 :(得分:0)
您说布局执行相同的操作,但是设计不同。您能否说明一下设计有何不同? (就像您说的那样,就像其他按钮或背景一样) 很难提出一些不清楚的概念。
取决于您如何更改布局。 您可以使用片段或尝试设置窗口小部件的Visibility(View / Gone),以保持同一活动中的数据和功能持久。但是如果没有足够的信息就不能确定。 谢谢。