1

В моем приложении для Android я использую custom dialog в моем activity. Я дал стиль этому настраиваемому диалоговому окну для прозрачного фона. Я столкнулся с странной проблемой в Kitkat 4.4. Диалог вырезается с верхней стороны только на Kitkat 4.4. Режимы с уровнем sdk < 4.4 дает правильный результат в соответствии с моим требованием. Почему это так? Просьба помочь мне решить эту проблему. Я попробовал ссылку this, но не получил, как ее реализовать с моим требованием. Спасибо.Пользовательский диалог на android Kitkat 4.4 cuts top area

Код:

public void showGameOverDialog(int score) { 

     final Dialog dialog = new Dialog(Level1Activity_Room.this, 
       R.style.DialogBackground); 
     dialog.setContentView(R.layout.gameover_dialog_layout);   
     dialog.setCanceledOnTouchOutside(false); 
     dialog.setCancelable(false); 
     dialog.show(); 
} 

R.style.DialogBackground:

<style name="DialogBackground" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
</style> 

ответ

0

Проблема не в KitKat 4.4, я думаю, что проблема заключается в R.layout.gameover_dialog_layout для поддержки экрана

+0

Но он отлично выглядит в других устройствах, имеющих sdk <4.4. Поэтому в моем макете нет проблем. – zanky

1

Наконец, я решил эту проблему с некоторыми изменениями в моем существующем коде. Также изменен целевой уровень для Android 4.4 от Project->Right Click->Android

public void showGameOverDialog(int score) { 
     final Dialog dialog = new customeDialogClass(Level1Activity_Room.this, 
       R.style.DialogBackground); 
     dialog.setContentView(R.layout.gameover_dialog_layout); 
     dialog.setCanceledOnTouchOutside(false); 
     dialog.setCancelable(false); 
dialog.show(); 
} 

customeDialogClass.java

@TargetApi(14) 
public class customeDialogClass extends Dialog { 

    public customeDialogClass(Context context) { 
     super(context); 
     if (Build.VERSION.SDK_INT < 18) { 
      return; 
     } 

     // The UI options currently enabled are represented by a bitfield. 
     // getSystemUiVisibility() gives us that bitfield. 
     int uiOptions = getWindow().getDecorView().getSystemUiVisibility(); 
     int newUiOptions = uiOptions; 
     boolean isImmersiveModeEnabled = ((uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) == uiOptions); 
     if (isImmersiveModeEnabled) { 
      Log.e("log1---", "Turning immersive mode mode off."); 
     } else { 
      Log.e("log2-----", "Turning immersive mode mode on."); 
     } 

     // Status bar hiding: Backwards compatible to Jellybean 
     if (Build.VERSION.SDK_INT >= 16 
       && (newUiOptions & View.SYSTEM_UI_FLAG_FULLSCREEN) <= 0) { 
      newUiOptions ^= View.SYSTEM_UI_FLAG_FULLSCREEN; 
     } 

     if (Build.VERSION.SDK_INT >= 18 
       && (newUiOptions & View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) <= 0) { 
      newUiOptions ^= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; 
     } 

     getWindow().getDecorView().setSystemUiVisibility(newUiOptions); 
    } 

    public customeDialogClass(Context context, boolean cancelable, 
      OnCancelListener cancelListener) { 
     super(context, cancelable, cancelListener); 
    } 

    public customeDialogClass(Context context, int theme) { 
     super(context, theme); 
     if (Build.VERSION.SDK_INT < 18) { 
      return; 
     } 

     // The UI options currently enabled are represented by a bitfield. 
     // getSystemUiVisibility() gives us that bitfield. 
     int uiOptions = getWindow().getDecorView().getSystemUiVisibility(); 
     int newUiOptions = uiOptions; 
     boolean isImmersiveModeEnabled = ((uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) == uiOptions); 
     if (isImmersiveModeEnabled) { 
      Log.e("log1---", "Turning immersive mode mode off."); 
     } else { 
      Log.e("log2-----", "Turning immersive mode mode on."); 
     } 

     // Status bar hiding: Backwards compatible to Jellybean 
     if (Build.VERSION.SDK_INT >= 16 
       && (newUiOptions & View.SYSTEM_UI_FLAG_FULLSCREEN) <= 0) { 
      newUiOptions ^= View.SYSTEM_UI_FLAG_FULLSCREEN; 
     } 

     if (Build.VERSION.SDK_INT >= 18 
       && (newUiOptions & View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) <= 0) { 
      newUiOptions ^= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; 
     } 
     getWindow().getDecorView().setSystemUiVisibility(newUiOptions); 
    } 

} 
0

Оно обычно проходит через строку заголовка, который добавляется в Android 4.4 или более низких версиях. Решается путем добавления следующей строки в пользовательский диалог.

dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);