当屏幕从纵向模式移动到横向模式时,如何在屏幕右侧设置工具栏?

时间:2016-02-10 09:51:40

标签: android android-layout android-toolbar

我以纵向模式制作了一个像这样的屏幕:

工具栏内的三个图像下面  但我想在横向模式下看起来像这样:

enter image description here

但是我无法移动工具栏右侧的屏幕。

下面是我的toolbar.xml文件:

   <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
 android:layout_height="match_parent">

  <android.support.v7.widget.Toolbar
    android:id="@+id/toolbar_bottom"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:background="#ffffff"
    android:minHeight="?attr/actionBarSize"
    android:layout_alignParentRight="true">

  <LinearLayout
    android:id="@+id/toolbarmenucontainer"
    android:layout_width="match_parent"
    android:weightSum="3"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:background="@drawable/ic_location"
        android:clickable="true"
        android:scaleType="fitXY"
        android:layout_weight="1"
        />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:background="@drawable/ic_setting"
        android:clickable="true"
        android:scaleType="fitXY"
        android:layout_weight="1"
        />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:background="@drawable/ic_people"
        android:clickable="true"
        android:scaleType="fitXY"
        android:layout_weight="1"
        />

</LinearLayout>
</android.support.v7.widget.Toolbar>

</RelativeLayout> 

还有一件事如何制作可折叠的谷歌地图,如图所示。点击红色条带,它从下到上,从上到下展开。任何帮助都将在先进的过程中受到赞赏。

3 个答案:

答案 0 :(得分:0)

一种简单的方法是使用两个布局xml文件:一个在屏幕处于纵向模式时使用,另一个在屏幕处于横向模式时使用。

  • 纵向文件顶部有条形
  • 横向的景观

选项1:然后您可以将它们放在相应的资源文件夹中:

  • /layout-land用于lansdcape one
  • /layout-port为肖像
  • 使用此选项,每次定向更改时,系统会调用Activity onCreate(),因为Activity实际上已重新创建。

选项2:或者,您也可以通过编程方式检测和处理方向:

警告:除非您有理由不使用选项1中所述的Android内置方向处理系统,否则不应首选此选项。例如,如果您需要{{ 1}}不要重新创建。

    在您的Activity
  • ,在Manifest添加configChange检测器:

    Activity
  • 在您的<activity android:name=".YourActivity" android:configChanges="orientation" />
  • ,捕获配置更改以使用正确的布局XML文件:

    Activity
  • 使用此选项,您的@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // set the Layout file to use using newConfig.orientation. For example: final boolean isLandscape = (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE); setContentView(isLandscape ? R.layout.toolbar_horizontal : R.layout.toolbar_vertical); doAnyOtherNeededStuffAccordingToTheScreenOrientation(isLandscape); } 不会重新创建,因此在更改方向时不会调用Activity。通过捕获/处理onCreate()事件来阻止这种情况。

答案 1 :(得分:0)

您可以使用以下名称定义备用布局资源文件: 的 RES /布局陆 添加您的布局xml文件与右侧的工具栏。当屏幕方向改变时,系统将从该目录设置活动的内容视图。

答案 2 :(得分:-1)

为AndroidManifest文件中的活动添加 android:screenOrientation =“sensorLandscape”

<activity
            android:name=".MainActivity"
            android:label="Sample"
            android:screenOrientation="sensorLandscape"
            android:theme="@style/AppTheme"/>

你可以像这样以编程方式更改它

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);