2011-08-23 120 views
3

我正在开发320 * 480的应用程序。如何使应用程序在480 * 854屏幕上运行?当我试图在480 * 854屏幕上运行时,应用程序的原始设计看起来很小。我想为Android中的每个屏幕创建单独的布局吗?如果是这样,请提供示例提示继续。多屏分辨率

回答

2

的,你可以让你的布局动态参考可用宽度和高度的设备

Display mDisplay= activity.getWindowManager().getDefaultDisplay(); 
int width= mDisplay.getWidth(); 
int Height= mDisplay.getHeight(); 

设置您的布局perecentage方面参考利用规模

+0

你也可以看看这里:http://developer.android.com/guide/practices/screens_support.html –

+0

为此,你已经为每种屏幕类型创建单独的drawables –

+0

是的,我尝试过类似的东西。但我不确定这种方法是否正确。既然我们必须为所有可用的屏幕创建单独的布局?这里是我的代码: DisplayMetrics displaymetrics = new DisplayMetrics(); \t \t getWindowManager()。getDefaultDisplay()。getMetrics(displaymetrics); \t \t ht = displaymetrics.heightPixels; \t \t wt = displaymetrics.widthPixels; \t \t如果(ht == 240 && wt == 320){ \t \t \t setContentView(R.layout.timetable_ldpi);其他如果(ht == 240 && wt == 400){ \t \t} \t \t} – gowri

0

在Android中,你不要的不是靠绝对分辨率,而是专注于屏幕密度。 是的,你可能需要创建不同的布局来支持各种密度和屏幕尺寸。一般来说,Android支持四种密度(低,中,高,特高)

我建议您阅读Supporting Multiple Screens。我认为这会帮助你实现你需要做的事情。它有多个部分,分别介绍设计替代布局和绘图以及与支持多屏幕分辨率相关的其他有用信息。

+0

谢谢你的答案。 – gowri

0

喜欢迎堆栈溢出...
从1.6版开始,Android支持可分为以下三类多种屏幕分辨率和像素密度:

  • 小:设备的屏幕尺寸比T-Mobile的小G1或三星I7500,如HTC Tattoo
  • 正常:屏幕尺寸与G1或I7500大致相同的设备。
  • 大型:设备的屏幕尺寸大于G1或I7500更大

开发人员可以控制是否以及如何应用通过使用在导入工具似乎设备各组(诸如平板式装置)。 Android框架API和SDK。有关实施的详细信息,请参阅Android开发人员指南文章支持多屏幕。您可以参考以下链接MultiResolution

或者可以使用

Display displayparm= activity.getWindowManager().getDefaultDisplay(); 
int width= displayparm.getWidth(); 
int Height= displayparm.getHeight(); 
8

我已经实现了我自己的处理多种屏幕分辨率的方式。

你当然可以通过在百分比

问题发生方面只与Views/Layouts具有某种恒定的宽度高度可以说280dp在运行时设置LayoutParams避免这个问题。解决方案很简单,如果我们以编程方式百分比方面树立我们Views/Layouts布局PARAMS只有用不断宽度高度在必要时,其他地方尝试使用match_parent来填补空白或使用weights和定义每View相对于其他Views这将有助于你的布局好看几乎在每一个屏幕分辨率

这里是一个示例XML

<?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> 

说明:我已经使用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; 

      float heightInPercentage = ((float) 300/480) * 100; 

      int mLayoutWidth = (int) ((widthInPercentage * deviceWidth)/100); 

      int mLayoutHeight = (int) ((heightInPercentage * deviceHeight)/100); 

      LayoutParams layoutParams = new LayoutParams(mLayoutWidth, mLayoutHeight); 

      mLayout.setLayoutParams(layoutParams); 
     } 
    }); 

现在可能是一些人想知道发生了什么事在这里

float widthInPercentage = ((float) 280/320) * 100

让我解释一下是我LinearLayout和的宽度是我的设备屏幕的宽度(关于这一点我很开发),我目前知道我有一个设备分辨率320×480上测试,我在做什么是计算我的布局是多少百分比方面覆盖,然后

int mLayoutWidth = (int) ((widthInPercentage * deviceWidth)/100)

在这里,我根据屏幕分辨率,并通过这种方式你Views/Layouts看起来完全一样在每个屏幕分辨率计算新的宽度为我的布局。

结论:如果您需要在布局文件(即XML),然后PX设置一些固定宽/高Views/Layouts始终设置值编程设置LayoutParams

一种谷歌Android工程师的建议,我想你们应该认真思考改变dp/dip单位,以percentage

+0

难道你没有很多可能的错误,因为这不会在所有的Android设备上运行,例如在3-4 API上运行的API –

+0

@AkshatAgarwal是的,上面的解决方案已经针对** Api 8 **进行了测试。 –

1

先生巴巴尔

我想你应该按照下面的公式,而不是计算像

float widthInPercentage = ((float) 280/320) * 100; 
float heightInPercentage = ((float) 300/480) * 100; 
int mLayoutWidth = (int) ((widthInPercentage * deviceWidth)/100); 
int mLayoutHeight = (int) ((heightInPercentage * deviceHeight)/100); 

,如果你采取了这个原则,我建议这样的:

int baseWidth=320; 
int baseHeight=480; 

int mLayoutWidth = (int) ((280* deviceWidth)/baseWidth); 
int mLayoutHeight = (int) ((300* deviceHeight)/baseHeight); 

而且这是要为工作视图而不是文本大小;