2013-08-19 15 views
19

Potrzebuję okna dialogowego do wypełnienia ekranu, z wyjątkiem miejsca na górze i na dole. Szukałem rozwiązania, ale nie mogłem go znaleźć prawdopodobnie dlatego, że deklaruję je w onClickListener. Czy ktoś może podać rozwiązanie?Android powoduje wyświetlenie okna dialogowego w trybie pełnoekranowym

kod aktywny:

sort.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       AlertDialog.Builder sort = new AlertDialog.Builder(HomeScreen.this); 
       // Get the layout inflater 
       LayoutInflater inflater = HomeScreen.this.getLayoutInflater(); 
       View sortView = inflater.inflate(R.layout.sort_layout, null); 
       sort.setView(sortView); 
       sort.create().show(); 
      } 
     }); 

XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_marginBottom="50dp" 
    android:layout_marginTop="50dp" 
    android:background="@color/white" 
    android:orientation="vertical" android:layout_gravity="center"> 
    + some more stuff here I dont think it's relevant 
</LinearLayout> 

enter image description here

+0

Sprawdź to proszę http://stackoverflow.com/questions/1362723/how-can-i-get-a-dialog-style-activity-window-to-fill-the-screen –

+0

Próbowano już getWindow(). setLayout (LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT), ale nie robi nic i mówi, że jest przestarzałe. –

+0

masz niestandardowy styl do tego ... –

Odpowiedz

38

tutaj ustawić szerokość i szerokości ekranu do okna

WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); 
    lp.copyFrom(dialog.getWindow().getAttributes()); 
    lp.width = width; 
    lp.height = height; 
    dialog.getWindow().setAttributes(lp); 

lub w style utworzyć styl jak to wtedy

<style name="DialogTheme" parent="android:Theme.Dialog"> 

    <item name="android:layout_width">fill_parent</item> 
    <item name="android:layout_height">fill_parent</item> 


    <!-- No backgrounds, titles or window float --> 
    <item name="android:windowBackground">@null</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowIsFloating">false</item> 
</style> 

utworzyć obiekt dialogowe jak to

dialog = new Dialog(this, R.style.DialogTheme); 

Edit ::

otrzymania szerokości i wysokości jak ta dla każdego urządzenia będzie wypełnia ..

WindowManager manager = (WindowManager) getSystemService(Activity.WINDOW_SERVICE); 
    int width, height; 
    LayoutParams params; 

    if (Build.VERSION.SDK_INT > VERSION_CODES.FROYO) { 
     width = manager.getDefaultDisplay().getWidth(); 
     height = manager.getDefaultDisplay().getHeight(); 
    } else { 
     Point point = new Point(); 
     manager.getDefaultDisplay().getSize(point); 
     width = point.x; 
     height = point.y; 
    } 
+0

Twój sposób działania metody, ale jak ustawić wartości, aby pasowały do ​​dowolnego ekranu? –

+0

Działa, ale po prostu użyłem metody manager.getDefaultDisplay(). GetWidth(), ponieważ punkt wymaga wyższego poziomu interfejsu API i rozwijam dla 2.2 –

+0

Ustawienie ' @ null' wygrał ' t tobie przezroczyste tło, ale '' item name = "android: windowBackground"> ​​@ android: color/transparent 'will. –

3

Spróbuj tego

aktywność, która ma styl zestaw Theme.Dialog, to zrobić:

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

setContentView(R.layout.your_layout); 

getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
} 
11

najpierw dokonać niestandardowego stylu dla okna w pliku style.xml:

<style name="full_screen_dialog" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowFullscreen">true</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> 
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
</style> 

Następnie po ustawić ten motyw do Okno alertu:

AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.full_screen_dialog)); 

Możesz też wywołać nowe działanie i nadać temu stylowi niestandardowemu tę aktywność jako motyw w pliku manifestu ...

+0

Testowałem to na Nexus4 (Android 5.0.1 Lollipop) nie działa –

2

Producent obiekt jak poniżej tematu

Dialog objD = new Dialog(this,  android.R.style.Theme_Translucent_NoTitleBar); 
3

może to pomocne dla kogoś. Chcę, aby okno dialogowe zajmowało całą szerokość ekranu. przeszukano wiele, ale nic nie okazało się przydatne. Wreszcie ten pracował dla mnie:

mDialog.setContentView(R.layout.my_custom_dialog); 
mDialog.getWindow().setBackgroundDrawable(null); 

po dodaniu tego, mój dialogowe pojawia się w całej szerokości ekranu.

+0

Ten kod w połączeniu z odpowiedzią @kalyanpvs pracował dla mnie. –

+0

, a następnie pełna wysokość ??? – kemdo

0

myślę ty powinien spróbować tego:

Wewnątrz dialogFragment:

@Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Black_NoTitleBar_Fullscreen); 
     } 
0
Dialog dialog2 = new Dialog(context, R.style.DialogTheme); 
    dialog2.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    dialog2.getWindow().setBackgroundDrawable(null); 
    dialog2.setContentView(R.layout.dialog_img); 
    WindowManager.LayoutParams lp = dialog2.getWindow().getAttributes(); 
    Window window = dialog2.getWindow(); 
    lp.copyFrom(window.getAttributes()); 
    lp.width = WindowManager.LayoutParams.MATCH_PARENT; 
    lp.height = WindowManager.LayoutParams.MATCH_PARENT; 
    window.setAttributes(lp); 
    lp.gravity = Gravity.CENTER; 
    final ImageView imgprofile=(ImageView)dialog2.findViewById(R.id.img_centre); 
    Picasso.with(context) 
      .load(arrayImages.get(position).get("image")) 
      .resize(800,1000) 
      .centerInside() 
      .into(imgprofile, new Callback() { 

       @Override 
       public void onSuccess() { 

       } 

       @Override 
       public void onError() { 
        imgprofile.setImageResource(R.drawable.user); 
       } 
      }); 
    dialog2.show(); 

A w pliku dialog_img.xml dodać ImageView z scaleType (fitXY).