How to use tablet-specific layout when in landscape mode? - android

I have defined a tablet-specific layout in the res/layout-sw600dp folder. Now. It loads correctly in tablet emulator and is checked and managed by code as expected. The problem is that I cannot access this layout variant to use in mobile emulator after I check that orientation is landscape. When I type in code R.layout., no hint is given as to the specific tablet layout, only one instance is given, activity_main. How can I use that tablet layout in the landscape orientation as well?
./app/src/main/res/layout-sw600dp/activity_filter.xml
./app/src/main/res/layout/activity_filter.xml

The "smallest width" qualifier doesn't care about device orientation. You'll have to make a copy of your layout and put it in the res/layout-land/ directory if you want that same layout on phones in landscape.
If you don't want to have two exact duplicate layouts (one in sw600dp and one in land), you can look into using a resource alias: https://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters

Related

Android manually select layout folder

In Android is it possible to select layout directory programmatically (in my case select the layout-land layout when I request)?
The reason I am asking is that in my application I am having hard time adopting it do various screen proportions, and the default Android logic of picking the layout file from layout-land or from layout does not work for me. It would be much better if I could manually decide which proportion is considered landscape. And I do not want to fix the screen orientation.
You can force your activities to be always in a landscape mode see here
<activity
...
android:screenOrientation="landscape"
...
/>
but note that
If your application targets Android 3.2 (API level 13) or higher, then you should also declare the "screenSize" configuration, because it also changes when a device switches between portrait and landscape orientations.
And you can set the same data in your code as well.
myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
In Android is it possible to select layout directory programmatically (in my case select the layout-land layout when I request)?
No, sorry.
the default Android logic of picking the layout file from layout-land or from layout does not work for me
Then use other resource set qualifiers, such as -wNNNdp (use these layouts for devices whose current width is NNN dp or larger) or -swNNNdp (use these layouts for devices whose smallest width, in any orientation, is NNN dp or larger).
If none of those suffice, you will need to have distinct layout resources (e.g., activity_main.xml and activity_main_other.xml), and request those yourself based on your own criteria.

Layout landscape mode and Categories of layout folders

I created following layout folders.
res/layout-sw320dp
res/layout-sw480dp
res/layout-sw600dp
res/layout-sw720dp
It is ok, layout from corresponding smallest width in dp folder are triggered.
Is it sufficient to create these four folders and our app will looks fine on any density screen or any size screen ? Plz explain this in some detail.
To create layout for landscape mode. what can i do with this ?
what is the use of multi port ui using fragments ? Is it used for landscape and port-rate layout in one xml file ?
By default, the layouts in /res/layout are applied to both portrait and landscape device screeens.
For example you have main.xml
/res/layout/main.xml
you just need to add a new folder /res/layout-land, copy main.xml into it and make the needed adjustments, and so on for all of your layout files.
You just need to have same files for land and portrait but with different folders and of course with different modifications.
Hope this to help!

How to handle size and position of controls in Android's Activity for portrait and landscape orientation?

I want to desing a GUI for android's tablet. By default i want to use landscape orientation of this application, so i placed the controls (text boxes, text views etc) accordingly, but when i change the orientation of tablet from landscape to portrait, whole GUI of activity gets distrubed. Can anybody guide/help me what is the best approach for designing of GUI in android such that controls appearance should remain correct in either orientation (portrait or landscape)? Thanks in advance.
You have to create another folder in the res directory called "layout-land". Put the layout file for landscape in this folder and the one for protrait mode in the normal "layout" folder. Both files must have the same name. Android will automatically chose the correct layout depending of the current orientation of the device.
Check the link below, it will provide all information about how to design an application to support multiple screens with different sizes and resolutions.
Supporting multiple screens

Portrait, Landscape in Android app

I am designing with LinearLayout which is working for portrait but landscape it does arranged properly. I do not use x,y positions. If I change anything in xml it affects the design -- how do I design both portrait and landscape?
You can specify a layout-land folder, to put all your landscape layouts (duplicate them, but with little differences in order to they show properly in corresponding orientation). In order to avoid this, you should work with RelativeLayouts. But if it's too late and you don't want to change everything, you can create the mentioned folder and make the proper layout changes.
So you will have a
layout/activity.xml
and a
layout-land/activity.xml
If your app is big, it might become a pain to make every change two times, but it's not so bad.
Not recommended, but you can also avoid changing orientation by supporting only portrait orientation in your app: you would have to put "android:screenOrientation="portrait"" in your app's Manifest then.
You can define a second xml file that is the layout for the landscape version. That file must be named the same and placed in a layout-land folder:
i.e.
Portrait:
layout/main.xml
Landscape:
layout-land/main.xml

How do I specify different layouts for portrait and landscape orientations?

I've seen references to being able to specify two separate layout xml files for an activity, one for Portrait and one for Landscape. I've not been to find any information on how to do that though. How do I specify for each activity which xml file is it's portrait layout and which is the Landscape layout?
Is it also possible to specify different layouts for different screen sizes? If so, how is this done?
Create a layout-land directory and put the landscape version of your layout XML file in that directory.
You just have to put it under separate folders with different names depending on orientation and resolution, the device will automatically select the right one for its screen settings
More info here:
http://developer.android.com/guide/practices/screens_support.html
under "Resource directory qualifiers for screen size and density"
For Mouse lovers! I say right click on resources folder and Add new resource file, and from Available qualifiers select the orientation :
But still you can do it manually by say, adding the sub-folder "layout-land" to
"Your-Project-Directory\app\src\main\res"
since then any layout.xml file under this sub-folder will only work for landscape mode automatically.
Use "layout-port" for portrait mode.
Just a reminder:
Remove orientation from android:configChanges attribute for the activity in your manifest xml file if you defined it:
android:configChanges="orientation|screenLayout|screenSize"
Fastest way for Android Studio 3.x.x and Android Studio 4.x.x
1.Go to the design tab of the activity layout
2.At the top you should press on the orientation for preview button, there is a option to create a landscape layout (check image), a new folder will be created as your xml layout file for that particular orientation
Update: On newer versions the options have been moved to the context menu of the .xml filename button. (Big thanks to Oliver Hoffmann for pointing that out).
I think the easiest way in the latest Android versions is by going to Design mode of an XML (not Text).
Then from the menu, select option - Create Landscape Variation.
This will create a landscape xml without any hassle in a few seconds. The latest Android Studio version allows you to create a landscape view right away.
I hope this works for you.
Create a new directory layout-land, then create xml file with same name in layout-land as it was layout directory and align there your content for Landscape mode.
Note that id of content in both xml is same.
The last line below is an example for applying two quantifiers: landscape and smallest width(600dp) screen. Update 600dp with the ones you need.
res/layout/main_activity.xml # For handsets
res/layout-land/main_activity.xml # For handsets in landscape
res/layout-sw600dp/main_activity.xml # For 7” tablets
res/layout-sw600dp-land/main_activity.xml # For 7” tablets in landscape
The above applies to dimens as well
res/values/dimens.xml # For handsets
res/values-land/dimens.xml # For handsets in landscape
res/values-sw600dp/dimens.xml # For 7” tablets
res/values-sw600dp-land/dimens.xml # For 7” tablets in landscape
A useful device metrics: https://material.io/tools/devices/
Or use this:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:scrollbars="vertical"
android:layout_height="wrap_content"
android:layout_width="fill_parent">
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!-- Add your UI elements inside the inner most linear layout -->
</LinearLayout>
</ScrollView>
Right click res folder,
New -> Android Resource File
in Available qualifiers, select Orientation,
add to Chosen qualifier
in Screen orientation, select Landscape
Press OK
Using Android Studio 3.4.1, it no longer creates layout-land folder. It will create a folder and put two layout files together.
In Android Studio Chipmunk, the options you are looking for are here.
For landscape, the option is "Create Landscape Qualifier" in the XML name drop-down.
For different screen sizes, the option is "Create Tablet Qualifier"
these have been moved from previous Android Studio versions.
Source: https://stackoverflow.com/a/74047314/3718756

Categories

Resources