2015-01-06 1 views
0

Я использую класс WindowManager.LayoutParams, используя TYPE_SYSTEM_ALERT, чтобы получить активность поверх всего. Все работает отлично, за исключением разрешения экрана, которое, как представляется, увеличивается, и поэтому я не могу видеть полный контент макета.Недопустимое разрешение дисплея при использовании TYPE_SYSTEM_ALERT из WindowManager

Вот скриншот

Layout Snapshot

(очень жаль, что не загружая изображения непосредственно из-за моей низкой репутации, как я новичок в StackOverflow)

Мой код для WindowManager. LayoutParams is

final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
     WindowManager.LayoutParams.FLAG_FULLSCREEN, 
     WindowManager.LayoutParams.FLAG_FULLSCREEN, 
     WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, 
     WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, 
     PixelFormat.TRANSLUCENT); 
     params.gravity = Gravity.RIGHT | Gravity.TOP; 

     wm = (WindowManager) getApplicationContext() 
      .getSystemService(Context.WINDOW_SERVICE); 

     mTopView = (ViewGroup) getLayoutInflater().inflate(R.layout.block_device, null); 
     getWindow().setAttributes(params); 
     wm.addView(mTopView, params); 

Я также пробовал WRAP_CONTENT вместо FLAG_FULLSCREEN, но он показал IllegalStateException, что ActionBarView может использоваться только с MatchParent.

Любые исправления, которые я могу опробовать ???

ответ

0

В качестве части дополнительного обеспечения system_alert вид диалога, который записывает поверх другого приложения, является UI устаревшим. В моем приложении у меня было одно действие, в котором было диалоговое окно system_alert, которое работало до 5.0, но в 5.1 не работало (после android.permission.SYSTEM_ALERT_WINDOW разрешение тоже не работает). Я говорил androidxref U можно увидеть в следующей ссылке http://androidxref.com/5.1.1_r6/xref/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java#1639

Они будут проверять и выбросить исключение, если приложение пытается писать в окне другого приложения Наконец, мы должны были переделать приложение, чтобы не использовать предупреждение такой системы диалогового окна См. следующий фрагмент кода для кода примера ...

String message = getString(R.string.progress_message);   
    mProgressDialog = new ProgressDialog(this); 

    mProgressDialog.setTitle(R.string.progress_title_message); 
    mProgressDialog.setMessage(message); 
    mProgressDialog.setProgressStyle(mProgressDialog.STYLE_HORIZONTAL); 
    mProgressDialog.setProgress(0); 
    mProgressDialog.setCancelable(false); 
    mProgressDialog.setMax(100); 
    mProgressDialog.show();` 
Смежные вопросы