【问题标题】:Android: How to use screen orientation change to switch between activitiesAndroid:如何使用屏幕方向更改在活动之间切换
【发布时间】:2010-11-12 17:25:12
【问题描述】:

我是 Android 开发新手。我正在尝试使用方向更改在两个活动之间切换。我的想法是使用三个活动一个 TabActivity 和一个正常的活动。这是一些伪代码:

public class Main extends Activity{
// this is the entry point into my app
    @Override
    public void onCreate(...){
        if(this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
            // Start Activity1
    } else { //Start Activity2}
}

Activity Activity1 和 Activity2 将覆盖其 onPause() 函数,以再次启动 Main Activity。

onPause(){
    Intent intent = new Intent(this.ActivityX, Main.class);
    startActivity(intent);
}

\/\/\/\/编辑\/\/\/\/

好的,我采取了不同的方法。因为我需要一个 TabActivity,因为我希望能够在我的选项卡中启动不同的活动(我认为在这种情况下我必须使用 TabActivity)。

我已经编辑了 Manifest.xml 并为 TabActivity 和第二个 Activity 添加了 android.configChanges="orientation"。然后我重写了 onConfigurationChanged() 函数。通过这种方法,我可以从横向(这是“正常”活动)切换到纵向(TabActivity)。 反过来也行不通,我还不知道为什么。我有完全相同的 onConfigurationChanged 函数(复制和粘贴),并且只更改了基本部分。

覆盖在选项卡中启动的活动的 onConfigurationChanged 也没有效果。

【问题讨论】:

  • 为什么要在方向改变时切换整个活动而不是仅仅切换布局?
  • 在横向中我想显示一个图形,您可以在其中选择图片。我想在纵向视图的选项卡中显示相应的数据。而选项卡式视图需要一个 TabActivity。
  • @mbaird:请注意,当方向改变时,当前活动将被终止并创建一个新活动。登录onDestroyonCreate 看看会发生什么。
  • @Darokthar:你不需要TabActivity 来使用标签。请不要在方向更改时切换整个活动。
  • @CommonsWare:我的经验是,当方向发生变化时,活动会自动终止并重新创建(即使它是同一个类)。那么为纵向和横向使用不同的活动不应该那么昂贵吗?你有这方面的经验吗?

标签: android screen-orientation


【解决方案1】:

您不必编写任何代码 - Android 已经 handles this automatically。只需创建两个不同的布局资源文件夹:

/res/layout-land  // layout resources for landscape
/res/layout-port  // portrait layout

把同名不同内容的资源描述文件放在xyz.xml这个文件夹里。一个用于纵向,另一个用于横向。

请注意,您可以对可绘制对象(位图)或任何其他资源(文本)使用相同的技术(-port-land 限定符)。

注意:这在 Android 1.5 上不受支持。如果你想支持这个版本,你必须另外添加/res/layout 文件夹。

【讨论】:

  • 我知道。但我不知道如何从布局文件中启动活动。正常的方法是在运行时使用 setContentView() 加载布局。但是由于一个活动是选项卡式的,因此 TabActivity 即使这样也行不通,因为 TabActivity 没有 setContentView() 函数。我想我的问题是 TabActivity。也许可以在 Manifest.xml 文件中创建两个入口点,一个用于纵向,一个用于横向?
  • 看@CommonsWare 上面的评论:你不需要 TabActivity 来创建标签。
【解决方案2】:

如果您仍然想在纵向模式下使用选项卡时使用 TabActivity 的优势,而在横向模式下没有选项卡,您可以使用以下(丑陋但仍然有效)解决方法。创建 /res/layout-land 文件夹并放置一个相应的布局文件(它应该与布局文件夹中的文件具有相同的名称,用于纵向)。但是,此文件应包含 TabActivity 工作所需的块。没关系,添加这些块并将它们的可见性设置为“消失”,如下面的 sn-p:

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="5dp">
    <TabWidget
        android:id="@android:id/tabs"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:visibility="gone" />
    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="5dp"
        android:visibility="gone" />
    <!-- Feel free to add your REAL layout for the landscape -->
</LinearLayout>
</TabHost>

当然,请确保您在活动类中正确处理内容管理,具体取决于方向。

【讨论】:

    猜你喜欢
    • 2020-04-08
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多