创建选项卡并在活动中显示和隐藏布局

时间:2014-04-08 13:34:27

标签: android layout xamarin

我正在Android中构建应用,您可以看到它的示例图片。在红色矩形中,我输入了一些图像按钮。当用户单击其中一个图像按钮时,其下方的控件应该更改。这就像我们在普通桌面应用程序中作为选项卡一样 但是我不知道如何在Android中实现它以及我应该使用什么样的技术。我应该使用布局并隐藏一个并显示另一个吗?或者是否有类似于我应该使用的布局的标签技术? 我已经看到Salesforce已经在平板电脑应用中实现了这一点。所以一定是可能的。但我几乎到处寻找并四处询问,但却无法找到答案 我会感谢任何类型的提示,代码示例或其他可以在Xamarin.Android中找到解决方法的方法。enter image description here

2 个答案:

答案 0 :(得分:2)

根据您在此处显示的布局,我认为这是使用FrameLayout然后使用Fragments来控制内容。

当用户按下按钮时,使用事务重新填充框架布局。它看起来像这样:

<强>布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <Button
            android:id="@+id/buttonOne"
            android:text="One"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
        <Button
            android:id="@+id/buttonTwo"
            android:text="Two"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
    </LinearLayout>
    <FrameLayout
        android:id="@+id/frameContent"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
</LinearLayout>

<强>活动:

public class MainActivity : Activity
{
    protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);

        SetContentView (Resource.Layout.Main);

        var btnOne = this.FindViewById<Button> (Resource.Id.buttonOne);
        btnOne.Click += (object sender, EventArgs e) => {
            var fragment = new MyFragment(Resource.Layout.FrameLayoutOne);
            FragmentManager
                .BeginTransaction()
                .Replace(Resource.Id.frameContent, fragment)
                .Commit();
        };

        var btnTwo = this.FindViewById<Button> (Resource.Id.buttonTwo);
        btnTwo.Click += (object sender, EventArgs e) => {
            var fragment = new MyFragment(Resource.Layout.FrameLayoutTwo);
            FragmentManager
                .BeginTransaction()
                .Replace(Resource.Id.frameContent, fragment)
                .Commit();
        };
    }
}

<强>片段:

public class MyFragment : Fragment
{
    int layoutId;
    public MyFragment(int layoutId)
    {
        this.layoutId = layoutId;
    }

    public override void OnCreate (Bundle savedInstanceState)
    {
        base.OnCreate (savedInstanceState);
    }

    public override View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        var view = inflater.Inflate (layoutId, container, false);
        return view;
    }
}

有关完整示例,请参阅此示例我在我的github上托管:

FragmentTransactionSample

答案 1 :(得分:0)

第一:你独立于Xamarin,因为Xamarin几乎支持所有native-android-API类。因此,如果您找到原生Android代码,您应该可以轻松地将其转换为Xamarin / C#。

所以你要找的是一个TabHost: 例如,请参阅本教程:

  

http://androidituts.com/android-tab-layout-example/

对于Xamarin文档中的TabHost,请参阅:

  

http://docs.xamarin.com/guides/android/user_interface/tab_layout/

我不建议您创建自定义tabview,但请使用现有的解决方案。

修改

如果您想在活动中嵌入类似于标签的控件,那么您可以创建一个Master-Detail-View,如下所示:

  • 在左侧创建一个ListView,在右侧创建一个空片段
  • 在ListView项目上单击您必须将正确的片段加载到右侧
  • 将布局或其他片段中的所有内容包装为可移植

此问题已在以下问题中讨论过:Android Master Detail Flow Example

您还可以在ADT-Eclipse中创建一个新的Master-Detail-Flow-Project。尝试了解生成的代码的作用。您可以简单地将其转换为Xamarin C#。

我不太了解的另一个可能性是将MVVM模式与mvvmcross一起使用。