2016-09-03 4 views
1

В моем приложении, когда я пытаюсь отобразить пользовательский флажок AlertDialog, он отлично работает в Android-телефоне. Теперь, когда я устанавливаю приложение на свою вкладку Android, все работает отлично только с пользовательским полем AlertDialog. Он не отображается. Поэтому я подумал, что я должен проверить нормальное диалоговое окно, и он отлично работает. Ниже приведен код для диалогового окна как обычного диалога, так и предупреждения.Пользовательский флажок предупреждения не отображается

Нормальный Диалог:

AlertDialog.Builder alertDialog = new AlertDialog.Builder(this); 

// Setting Dialog Title 
alertDialog.setTitle("Confirm Delete..."); 

// Setting Dialog Message 
alertDialog.setMessage("Are you sure you want delete this?"); 

// Setting Icon to Dialog 
// alertDialog.setIcon(R.drawable.delete); 

// Setting Positive "Yes" Button 
alertDialog.setPositiveButton("YES", 
     new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 

       // Write your code here to invoke YES event 
       Toast.makeText(getApplicationContext(), 
         "You clicked on YES", Toast.LENGTH_SHORT) 
         .show(); 
      } 
     }); 

// Setting Negative "NO" Button 
alertDialog.setNegativeButton("NO", 
     new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       // Write your code here to invoke NO event 
       Toast.makeText(getApplicationContext(), 
         "You clicked on NO", Toast.LENGTH_SHORT) 
         .show(); 
       dialog.cancel(); 
      } 
     }); 

// Showing Alert Message 
alertDialog.show(); 

пользовательского макета Dialog

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getApplicationContext()); 

// AlertDialogBuilder.setMessage(diadis); 
LayoutInflater inflater = (LayoutInflater)getApplicationContext() 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View view = inflater.inflate(R.layout.update_status, null); 
alertDialogBuilder.setView(view); 

final AlertDialog alertDialog = alertDialogBuilder.create(); 
alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 
alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
alertDialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
alertDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); 
alertDialog.show(); 
alertDialog.findViewById(R.id.positive_button).setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     alertDialog.dismiss(); 
    } 
}); 

// Close 
alertDialog.findViewById(R.id.close_button).setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     alertDialog.dismiss(); 
    } 
}); 
+0

вместо ** getApplicationContext() ** использовать ** Y ourActivity.this ** –

+0

Пробовал не работать –

+0

09-03 10: 20: 13.396 14147-14147/loginscreen.example.com.app I/dalvikvm-heap: Вырастить кучу (фрагмент фрейма) до 25.714MB для размещения 147472 байта –

ответ

0

проверить этот фрагмент кода

private void openQuitDialog() { 
    AlertDialog.Builder quitDialog 
      = new AlertDialog.Builder(MainActivity.this); 
    quitDialog.setTitle(getResources().getString(R.string.are_you_sure_to_exit)); 
    quitDialog.setPositiveButton(getResources().getString(R.string.yes), new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      // TODO Auto-generated method stub 
      finish(); 
     } 
    }); 

    quitDialog.setNegativeButton(getResources().getString(R.string.no), new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      // TODO Auto-generated method stub 

     } 
    }); 

    quitDialog.show(); 
} 

и вызвать openQuitDialog(), где вы хотите.

-1

Прежде чем показывать это, вам нужно будет скомпилировать диалог, используя функцию create().

alertDialog.create().shown(); 

Надежда помогает.

0

Для этого Вам нужно добавить разрешение

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 

а также благодаря CommonsWare's blog post, за время работы с Зефир

Предполагая, что ваш код в Activity или Fragment, проверьте разрешение наложения и сделать запросить его при необходимости:

public static int OVERLAY_PERMISSION_REQ_CODE = 1234; 

Вызовите этот метод до вашего alertdialog

checkDrawOverlayPermission(); 

Метод копирования в класс

public void checkDrawOverlayPermission() { 
    if (!Settings.canDrawOverlays(this)) { 
     Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, 
       Uri.parse("package:" + getPackageName())); 
     startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE); 
    } 
} 

Затем повторно проверить разрешение для лучшего УБ:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == OVERLAY_PERMISSION_REQ_CODE) { 
     if (!Settings.canDrawOverlays(this)) { 
      // SYSTEM_ALERT_WINDOW permission not granted... 
     } 
    } 
} 

pemission на для вашего проекта по рисованию в marashmallow как GIF, когда вам добавьте этот код в свой проект enter image description here