与多屏幕支持相关的布局问题

时间:2010-11-11 09:08:05

标签: android layout screen

我正在尝试开发一个我想要多屏幕支持的应用程序。我已阅读有关多屏支持最佳实践的Android文章。根据文章,我们必须遵循3个重要的事项:

  1. 在AndroidManifest.xml中提及对不同屏幕尺寸(大,中,小)和任何密度的支持。
  2. 将3 dpi(120,160,240)的图像放在3个文件夹res / ldpi,res / mdpi和res / hdpi中。
  3. 在布局中,应以“dip”单位提及尺寸。然后Android将自己处理扩展。
  4. 我已在项目中实施了所有这些要点。从相应的文件夹中正确拾取图像。但控制的安排并不相同。

    e.g。我在三个模拟器上运行了应用程序

    1
    。分辨率240 * 320 dpi 120。
    2。分辨率240 * 320 dpi 160。
    3。分辨率240 * 320 dpi 240。
    (所有仿真器都具有相同的分辨率但密度不同。)

    问题是控件的位置在所有三个仿真器上都不相同。根据我的理解,如果在“dip”中提到android:layout_marginLeft和android:layout_marginTop,那么这个问题不应该发生。随着模拟器密度的增加,控件越往右侧。

    即使所有设备的布局相同,我是否绝对有必要为所有屏幕尺寸和密度组合提供布局?

    我错过了一些重要的观点吗?

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
      <ImageView android:layout_width="fill_parent"
            android:layout_height="fill_parent" android:src="@drawable/bgd" android:scaleType="fitXY">
        </ImageView>
       <ImageView android:id="@+id/wtButton"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:src="@drawable/button" android:layout_marginLeft="170dip"
            android:layout_marginTop="9dip"></ImageView>
        <ImageView android:id="@+id/htButton"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:src="@drawable/button2" android:layout_marginLeft="220dip"
            android:layout_marginTop="90dip"></ImageView>
    </RelativeLayout>
    

    图片:

    https://docs.google.com/leaf?id=0By3GYC3k5AMDNzUwNjkwMWEtOGQzZC00MjQ0LWE2OTgtYjFhYzZmM2ExOGVl&hl=en&authkey=CLOEsZsI

3 个答案:

答案 0 :(得分:3)

是的,您必须在清单文件中添加以下内容,然后才会使用 根据需要从ldpi,mdpi或orhdpi中获得

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

    <compatible-screens>
 <screen
            android:screenDensity="mdpi"
            android:screenSize="mediaum" />      
  <screen
            android:screenDensity="hdpi"
            android:screenSize="large" />
        <screen
            android:screenDensity="xhdpi"
            android:screenSize="large" />
    </compatible-screens>

答案 1 :(得分:0)

首先计算设备高度和宽度

然后如果你想将180设置为leftpadding值而将48设置为toppadding view for view,则将其设置为

(320 /1.8 = 1.77)

meterView.setPadding((int)(width / 1.8),(int)(height / 10),3,5);

试试这个。

答案 2 :(得分:0)

问题在于设备的尺寸会增加图像尺寸的减小。 相应地重新调整图像大小(增加mdp和ldpi图像的大小)。 如果你想要瞄准Nexus系列,那么它总会以Xhdpi和hdpi为目标,这是一个真正的痛苦。 你也可以在这里参考我的答案: Android: support multiple screens