[英]Creating Tabs and showing and hiding Layout inside an Activity
我正在 Android 中構建一個應用程序,您可以看到它的示例圖片。 在紅色矩形中,我輸入了一些 Imagebuttons。 當用戶單擊其中一個圖像按鈕時,其下方的控件應該會發生變化。 這就像我們在普通桌面應用程序中的選項卡一樣。
但我不知道如何在 Android 中實現它以及我應該使用什么樣的技術。 我應該使用布局並隱藏一個並顯示另一個嗎? 或者是否有類似於我應該使用的布局的選項卡技術?
我已經看到 Salesforce 在它的平板電腦應用程序中實現了這一點。 所以一定是可以的。 但是我幾乎到處找遍了,四處打聽,但還是找不到答案。
我將不勝感激任何類型的提示、代碼示例或其他可以顯示在 Xamarin.Android 中解決該問題的方法。
根據您在此處顯示的布局,我假設這是使用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 上托管的此示例:
第一:您獨立於 Xamarin,因為 Xamarin 支持幾乎所有 native-android-API-classes。 因此,如果您找到本機 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 一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.