Search code examples
androiddialogorientation

always view dialog in landscape


I'm repeating a post I've made at the android group in google groups (http://groups.google.com/group/android-developers/browse_thread/thread/78d0b7496a51e3b7# ), hopefully I'll have some luck here!

I have an activity displaying a list of items. Upon clicking an item, I display a full-screen dialog with some buttons and an image. This looks great in landscape, but doesn't look good in portrait (Due to the image aspect ratio). I would like to know if its possible to always display this dialog in landscape irrespective of current screen orientation. And after the dialog is dismissed, I'll handover the orientation back to the sensor. Here's what I have so far:

OnItemClickListener listlistener = new OnItemClickListener() { 
                @Override 
                public void onItemClick(AdapterView parent, View arg1, int position, 
                                long arg3) { 
                        final Dialog dialog = new Dialog(getParent()); 
                        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
                        final int orientation = 
getResources().getConfiguration().orientation; 
                        if (orientation == 1){ 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
                        } 
                        dialog.setContentView(R.layout.dialog); 
                        dialog.setCancelable(true); 
                        ImageView img = (ImageView) dialog.findViewById(R.id.img); //A 
static image for testing UI 
                        //BUTTON LISTENERS HERE 
                        dialog.show(); 
                        dialog.setOnCancelListener(new OnCancelListener() { 
                                @Override 
                                public void onCancel(DialogInterface dialog) { 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 
                                } 
                        }); 
                } 
        }; 

But by doing so, the screen changes orientation first and then tries to display the dialog. But on orientation change the screen is restarting the activity and my dialog isn't shown. Is there a simpler way to do this? Could I use two different layout for the dialog and load a corresponding one depending on the orientation? If so, then what would the XML for the portrait mode look like? Thanks!


Solution

  • If you are using a custom layout for the dialog, just design a new one and put it in the layout-land folder (create it if necesary), that way it will load the corresponding one automatically.