我正在Android中构建应用,您可以看到它的示例图片。在红色矩形中,我输入了一些图像按钮。当用户单击其中一个图像按钮时,其下方的控件应该更改。这就像我们在普通桌面应用程序中作为选项卡一样 但是我不知道如何在Android中实现它以及我应该使用什么样的技术。我应该使用布局并隐藏一个并显示另一个吗?或者是否有类似于我应该使用的布局的标签技术? 我已经看到Salesforce已经在平板电脑应用中实现了这一点。所以一定是可能的。但我几乎到处寻找并四处询问,但却无法找到答案 我会感谢任何类型的提示,代码示例或其他可以在Xamarin.Android中找到解决方法的方法。
答案 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上托管:
答案 1 :(得分:0)
第一:你独立于Xamarin,因为Xamarin几乎支持所有native-android-API类。因此,如果您找到原生Android代码,您应该可以轻松地将其转换为Xamarin / C#。
所以你要找的是一个TabHost: 例如,请参阅本教程:
对于Xamarin文档中的TabHost,请参阅:
http://docs.xamarin.com/guides/android/user_interface/tab_layout/
我不建议您创建自定义tabview,但请使用现有的解决方案。
修改强>
如果您想在活动中嵌入类似于标签的控件,那么您可以创建一个Master-Detail-View,如下所示:
此问题已在以下问题中讨论过:Android Master Detail Flow Example
您还可以在ADT-Eclipse中创建一个新的Master-Detail-Flow-Project。尝试了解生成的代码的作用。您可以简单地将其转换为Xamarin C#。
我不太了解的另一个可能性是将MVVM模式与mvvmcross一起使用。