我正在开发一个针对平板电脑和谷歌电视的应用程序。它将像许多标准的 Google TV 应用程序一样,带有一个 LeftNavBar 和一个所有应用程序屏幕通用的顶部搜索栏。它将类似于下图:
主屏幕
对于所有其他屏幕,红色区域将有所不同。它可能包含以下屏幕模型之类的数据:
活动一加载到主容器中
活动二加载到主容器中
所以你可以看到在主区域可以加载完全不同的部分。
在选择屏幕2中的任何列表项目(在片段列表中)中选择任何列表项目时,屏幕3可以作为详细的部分加载,也可以通过选择选项卡(将出现在LeftNavbar中)加载。
这是我尝试实现它的方式。
第 1 步。我使用以下 XML 创建了一个主 Activity:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#9ccc" >
<!-- Top Bar -->
</LinearLayout>
<FrameLayout
android:id="@+id/mainContainer"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<!-- main Red Container that will load other Activities -->
</FrameLayout>
</LinearLayout>
mainContainer
是我要加载活动的 RED 容器。LeftNavBar
将作为 All 的父级添加到此 Activity。
第 2 步我分别在其中创建ActivityOne
了ActivityTwo
两个和三个片段(如上图第二个和第三个图像所示)。
*第 3 步我正在尝试ActivityOne
在主页的mainContainer FrameLayout 中加载...但我无法添加它。
我尝试通过添加ActivityOne
如下mainContainer
:
View v = (new ActivityOne()).getWindow().getDecorView();
FrameLayout mainContainer = (FrameLayout) findViewById(R.id.mainContainer);
mainContainer.addView(v);
但getWindow()
回报null
....
发生其他问题是因为所有数据都来自远程服务..所以还请建议我如何能够mainContainer
在某种堆栈中保存对所有已加载活动的引用......所以我可以重新加载已经加载的活动而不是创建它的新实例。这将在按下 BACK 按钮时使用。
或者
与其将活动加载到上述 RED 容器中,我应该创建两个活动,每个活动都有自己的片段和一个 LeftNavBar。这可能比上述方法更容易。或者这可能是唯一的解决方案....但是我觉得为 BACK 按钮保存状态可能会变得混乱..但我会尝试实现这个
如果您必须创建这种类型的应用程序,您会怎么做?您将如何设计 UI 布局以获得最佳性能/实践?
非常感谢您帮助我设置此应用程序布局的建议。