如何设置android布局来支持所有的屏幕尺寸?

我正在开发Android版本2.2的程序。 我已经阅读了许多关于支持多种屏幕尺寸的文档,但仍然感到困惑。 我devise了一个布局文件,支持大屏幕和普通屏幕,当我用小屏幕尝试时,它不调整布局以适合屏幕。 我也在清单中使用了这个代码。

<supports-screens android:resizeable="true" android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:anyDensity="true" /> 

小屏幕的图像在这里。 如何设置兼容小屏幕的屏幕? 我发现通过使用文件夹“布局小”的地方,但如果我使用这个项目的大小越来越大,我不想这样,所以任何人都可以build议我这样做的最好方法吗?

6 Solutions collect form web for “如何设置android布局来支持所有的屏幕尺寸?”

请通过以下链接。 这些可能会帮助你:

支持不同的屏幕尺寸

支持多个屏幕

支持不同的密度

支持平板电脑和手机

AFAIK,支持所有屏幕的唯一方法是通过做文件夹分叉。 每个XML文件上升到几千字节。 所以,大小不应该太像这样的问题。

解决scheme为所有屏幕和支持所有布局。

  ldpi mdpi hdpi xhdpi xxhdpi xxxhdpi ic_launcher 36x36 48x48 72x72 96x96 144x144 192x192 Notification 18x18 24x24 36x36 48x48 72x72 96x96 Action Bar & Tab 24*24 32*32 48*48 64*64 96*96 128*128 Background 240x320 320x480 480x800 720x1280 1080x1920 1440X2560 

可绘制的文件夹:

 res/drawable (default) res/drawable-ldpi/ (240x320 and nearer resolution) res/drawable-mdpi/ (320x480 and nearer resolution) res/drawable-hdpi/ (480x800, 540x960 and nearer resolution) res/drawable-xhdpi/ (720x1280 - Samsung S3, Micromax Canvas HD etc) res/drawable-xxhdpi/ (1080x1920 - Samsung S4, HTC one, Nexus 5, etc) res/drawable-xxxhdpi/ (1440X2560 - Nexus 6,Samsung S6edge). ldpi (low) ~120dpi mdpi (medium) ~160dpi hdpi (high) ~240dpi xhdpi (extra-high) ~320dpi xxhdpi (extra-extra-high) ~480dpi xxxhdpi (extra-extra-extra-high) ~640dpi 

布局:

 layout-large-mdpi (1024x600) layout-large-tvdpi (800x1280) layout-large-xhdpi (1200x1920) layout-xlarge-mdpi (1280x800) layout-xlarge-xhdpi (2560x1600) res/layout/activity_main.xml # For handsets (smaller than 600dp available width) res/layout-sw600dp/activity_main.xml # For 7 inches tablets (600dp wide and bigger) res/layout-sw720dp/activity_main.xml # For 10 inches tablets (720dp wide and bigger) OR res/layout/layout #this is the default res/layout/layout-large #for 7 inches tablet and images from res/drawable-mdpi/xyz.png res/layout/layout-xlarge #for 10 inches tablet 

参考链接:

不同的分辨率支持android

https://developer.android.com/guide/practices/screens_support.html

https://design.google.com/devices/

是否有所有基于Android的手机和平板电脑的屏幕分辨率列表?

http://www.emirweb.com/ScreenDeviceStatistics.php

Android手机上最stream行的屏幕尺寸/分辨率

是的,我已经解决了你的问题,你是对的,我个人认为,为每个屏幕分辨率做布局是花费时间,并使您的项目规模变大。

要制作适合所有屏幕分辨率的布局,我已经实现了我自己的技术,即按百分比设置宽度高度

问题发生在我们设置Views/Layouts与一些固定的宽度高度值可以说100dp

解决方法是相当简单的尝试使用match_parent ,使视图填充空白或使用weight和定义每个View相对于其他Views这将帮助您的布局几乎在每个屏幕分辨率看起来不错,并在运行时设置LayoutParams只有这些Views/Layouts根据百分比有一些不变的宽度高度的 Views/Layouts

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:id="@+id/mLayout" android:layout_width="280px" android:layout_height="300px" /> </RelativeLayout> 

注意:由于在LayoutParams layoutParams = new LayoutParams(int width, int height);所以我使用了px作为固定大小的布局的宽度/高度 LayoutParams layoutParams = new LayoutParams(int width, int height); widthheight像素单位

这是一个示例代码

 final ViewTreeObserver mLayoutObserver = mLayout.getViewTreeObserver(); mLayoutObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { DisplayMetrics metrics = getResources().getDisplayMetrics(); int deviceWidth = metrics.widthPixels; int deviceHeight = metrics.heightPixels; float widthInPercentage = ( (float) 280 / 320 ) * 100; // 280 is the width of my LinearLayout and 320 is device screen width as i know my current device resolution are 320 x 480 so i'm calculating how much space (in percentage my layout is covering so that it should cover same area (in percentage) on any other device having different resolution float heightInPercentage = ( (float) 300 / 480 ) * 100; // same procedure 300 is the height of the LinearLayout and i'm converting it into percentage int mLayoutWidth = (int) ( (widthInPercentage * deviceWidth) / 100 ); int mLayoutHeight = (int) ( (heightInPercentage * deviceHeight) / 100 ); LayoutParams layoutParams = new LayoutParams(mLayoutWidth, mLayoutHeight); mLayout.setLayoutParams(layoutParams); } }); 

如果有人仍然需要帮助,您可以立即询问,我想代码是非常明显的

结论:如果你需要为你的Views/Layouts设置一些常数宽度/高度 ,在布局文件(例如xml)中总是设置px值,然后以编程方式设置LayoutParams

build议:我认为Google Android Guys应该认真考虑将dp/dip单位换成percentage

现在支持不同的屏幕尺寸更容易! 使用新的尺寸单位SDP

SDP – 一个可扩展的大小单位

提供新尺寸单位的android SDK – sdp(可缩放dp)。 这个尺寸单位与屏幕尺寸成比例。 它可以帮助Android开发者支持多个屏幕。

对于文本视图请参考基于SP大小单位的文本。

https://github.com/intuit/sdp

尝试使用layout_weight,他们将帮助。 🙂

我不知道解决scheme,但我想与你分享将无处不在,它涵盖了大部分地区。

我已经通过使用LinearLayout划分屏幕并定义其方向(水平或垂直), layout_weightsum = 3 (3将屏幕划分为3个部分)来解决此问题。

然后在那个Root Linear布局里面,我再次把LinearLayoutlayout_height = "0dp" (如果你只需要垂直分区,否则layout_height = "wrap_content" ,如果你需要水平的话那么make layout_width = "0dp"layout_weight =1 (1是for屏幕的1部分,你也可以把这个值浮在1.2上)。

可以尝试这个帮助我,也许和希望会帮助你。

  • 设置Android布局元素的背景颜色
  • 是否有可能使用VectorDrawable在button和TextViews使用android:DrawableRight?
  • 如何以编程方式在Androidbutton上设置drawableLeft?
  • 错误:呈现问题以下类无法findandroid.support.v7.internal.widget.ActionBarOverlayLayout
  • 在导航抽屉中禁用暗淡的淡入淡出
  • 我在哪里可以find一些Android UI的好例子?
  • Android SDK中的getWidth / Height()和getMeasuredWidth / Height()之间的区别是什么?
  • Android:如何创build一个没有标题的对话框?
  • 如何将内容置于线性布局中?
  • 导航抽屉(Google+与YouTube)
  • 删除AppBarLayout小部件android下的阴影