在 Xamarin.Android 中的布局之间移动

Posted

技术标签:

【中文标题】在 Xamarin.Android 中的布局之间移动【英文标题】:Move between layouts in Xamarin.Android 【发布时间】:2021-12-18 15:23:07 【问题描述】:

我正在 Xamarin android 中开发一个应用程序。我想使用一个按钮,然后移动到下一个布局(我有 3 个布局)。我可以从布局 1 移动到布局 2,但不能从布局 2 移动到布局 3。

布局一

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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:background="#1f1e1e"
    android:layout_
    android:layout_
    android:layout_gravity="center"
    android:orientation="vertical">

    <Button
        android:text="One"
        android:clickable="true"
        android:id="@+id/btnOne"
        android:textSize="16sp"
        android:layout_
        android:backgroundTint="#484848"
        android:layout_marginTop="3dp"
        android:layout_gravity="center_horizontal"
        android:layout_/>

 </LinearLayout>

/////////////////////////////

protected override void OnCreate(Bundle savedInstanceState)
    
        base.OnCreate(savedInstanceState);
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        SetContentView(Resource.Layout.LayoutOne);

        Button btnOne = FindViewById<Button>(Resource.Id.btnOne);
        btnOne.Click += btnOne_Click;
    
private void btnOne_Click(object Sender, EventArgs e)
    
       SetContentView(Resource.Layout.LayoutTwo);
    

布局二

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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:background="#1f1e1e"
    android:layout_
    android:layout_
    android:layout_gravity="center"
    android:orientation="vertical">

    <Button
        android:text="Two"
        android:clickable="true"
        android:id="@+id/btnTwo"
        android:textSize="16sp"
        android:layout_
        android:backgroundTint="#484848"
        android:layout_marginTop="3dp"
        android:layout_gravity="center_horizontal"
        android:layout_/>

 </LinearLayout>

/////////////////////////////

protected override void OnCreate(Bundle savedInstanceState)
    
        base.OnCreate(savedInstanceState);
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        SetContentView(Resource.Layout.LayoutTwo);

        Button btnTwo = FindViewById<Button>(Resource.Id.btnTwo);
        btnTwo.Click += btnTwo_Click;
    
private void btnTwo_Click(object Sender, EventArgs e)
    
       SetContentView(Resource.Layout.LayoutThree);
    

布局三

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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:background="#1f1e1e"
    android:layout_
    android:layout_
    android:layout_gravity="center"
    android:orientation="vertical">

    <TextView
        android:textSize="16sp"
        android:layout_
        android:layout_
        android:text="This is Layout3"
        android:layout_gravity="center_horizontal"
        android:textColor="@android:color/white"/>

 </LinearLayout>

没有错误,应用程序运行。我使用 USB 调试通过手机运行它。

【问题讨论】:

【参考方案1】:

如果你想在三个不同的布局之间导航,一个常见的方法是创建三个不同的活动并为它们设置三个布局。 例如,FirstActivity 加载 LayoutOneSecondActivity 加载 LayoutTwoThirdActivity 加载 LayoutThree ,之后我们可以使用 Intent 在它们之间导航。

请参考以下代码:

FirstActivity.cs

public class FirstActivity : AppCompatActivity

    protected override void OnCreate(Bundle savedInstanceState)
    
        base.OnCreate(savedInstanceState);
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.LayoutOne);

        Button btnOne = FindViewById<Button>(Resource.Id.btnOne);
        btnOne.Click += BtnOne_Click;
    

    private void BtnOne_Click(object sender, System.EventArgs e)
    
        // SetContentView(Resource.Layout.LayoutTwo);

        Intent intent = new Intent(this,typeof(SecondActivity));

        StartActivity(intent);
    

SecondActivity.cs

public class SecondActivity : Activity

    protected override void OnCreate(Bundle savedInstanceState)
    
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.LayoutTwo);

        Button btnTwo = FindViewById<Button>(Resource.Id.btnTwo);
        btnTwo.Click += btnTwo_Click;


    

    private void btnTwo_Click(object sender, EventArgs e)
    
        //SetContentView(Resource.Layout.LayoutThree);

        Intent intent = new Intent(this,typeof(ThirdActivity));
        StartActivity(intent);
    

ThirdActivity.cs

public class ThirdActivity : Activity

    protected override void OnCreate(Bundle savedInstanceState)
    
        base.OnCreate(savedInstanceState);

        // Create your application here

       SetContentView(Resource.Layout.LayoutThree);
    

【讨论】:

以上是关于在 Xamarin.Android 中的布局之间移动的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin Android 中的响应式布局

xamarin android 怎么设置布局的最大高度

使用 tabhost 中的每个选项卡设置 axml 布局:Xamarin Android

抽屉布局在 Xamarin.Android.Support.Core.UI 和 Xamarin.Android.Support.V4 中都存在

在 Xamarin Android 中设置布局背景 - 覆盖暗模式

在xamarin.android中的absoluteLayout中定位到右下角