从backgrounded返回后,具有Dialog Theme的活动将被剪切

时间:2016-02-18 18:00:06

标签: android android-layout android-dialog

我有一种奇怪的行为,如果我为应用程序添加背景然后返回到前台,则启动带有Theme.AppCompat.Dialog的活动会被剪裁。我也在其他情况下观察到这种行为,例如不使用AppCompat。

我已经创建了一个测试应用程序(下面的代码)来演示此问题。我还包括截图以更好地说明问题。

这并非在所有设备上都会发生。运行Android 5.1.0的Nexus 5存在这个问题。 M看起来很好。

屏幕截图

App Launch / After Backgrounding

enter image description here

从背景返回

enter image description here

如您所见,标题区域较小,您可以在下面的活动中看到一些文字。如果您关闭对话框,对话框中缺失的部分将暂时重新出现,然后一切都会因您的预期而消失。

代码

MainActivity.java

public class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    startActivity(new Intent(this, DialogActivity.class));
  }
}

DialogActivity.java

public class DialogActivity extends AppCompatActivity {
  @Override
  protected void onCreate (@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dialog);
  }
}

DialogActivity在我的清单中声明如下

<activity android:name=".DialogActivity"
          android:theme="@style/DialogTheme"/>

activity_dialog.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="400dp"
              android:layout_height="1000dp"
              android:background="@color/dialogColor"
              android:orientation="vertical">
</LinearLayout>

styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="DialogTheme" parent="Theme.AppCompat.Dialog">
    <!-- Customize your theme here. -->
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowIsFloating">true</item>
</style>

有什么想法吗?如果需要,我可以提供更多信息!

谢谢:)

编辑 - 添加了主要活动布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.ben.movingdialog.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"/>
</RelativeLayout>

1 个答案:

答案 0 :(得分:0)

要克服此裁剪,首先删除您的活动标题,然后在 setContentView() 之前添加以下

requestWindowFeature(Window.FEATURE_NO_TITLE);

然后,将textView添加到活动布局的顶部,以服务器作为标题。