DP在不同的屏幕上显示不同的布局

时间:2016-05-15 13:08:43

标签: android android-layout android-studio

我已经在布局文件中创建了一个布局并定义了以下Xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.kirmani.myapplication.MainActivity"
    android:orientation="vertical"
    >

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="@color/colorPrimary"
        />

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="150dp"
        android:background="@color/colorPrimaryDark"
        />

    <ImageView
        android:layout_width="405dp"
        android:layout_height="260dp"
        android:background="@color/colorAccent"
        />

</LinearLayout>

这样可以在Nexus 4屏幕中完美填满整个屏幕。但是当我预览所有屏幕时,它会在某些屏幕上给出非常奇怪的外观。

我正在使用DP,它应该在所有屏幕上保持相同的display,但它不是那样的。请指导我..

enter image description here

3 个答案:

答案 0 :(得分:2)

实际上,dp根据所有屏幕保持相同的显示。这是因为每个设备都不应该在dp中具有相同的宽度。有些设备有480dp,有些设备有360dp等。

如果您希望图像适合您的宽度,则必须使用

 <ImageView
    android:layout_width="match_parent"
    android:layout_height="260dp"
    android:background="@color/colorAccent"
    />

不要使用固定的dp。

编辑:

如果你想填充高度,请使用:

 <ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorAccent"
    />

答案 1 :(得分:1)

您的第3张图片视图宽度应与父图片相匹配。喜欢这个

 text='really long text string that i want to scroll 15 characters at a time'

 canvastext=canvas.create_text(1,1,text=scrolltext(text),
 tag=(calmotag,booktag,'texttag'),width=20)

def scrolltext(text):
     textlength=15
     shorttext=tkinter.StringVar() 
     shorttext.set(text.get()[0:14])
     itemtext=text.get()
     if len(itemtext)>textlength:

         newindex=0
         endindex=newindex+14
         while endindex<len(itemtext)+2:
             oldtext=shorttext.get()
             oldindex=itemtext.index(oldtext)
             newindex=oldindex+1
             endindex=newindex+14
             newtext=itemtext[newindex:endindex]
             shorttext.set(newtext)
             root.update_idletasks()
             root.after(1000)

而不是

<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorAccent"
    />

答案 2 :(得分:1)

我们在这里谈论Android ABC。您需要了解其工作原理,而不是寻找具体问题的具体答案,as I already recommend you here

每个设备在DP中都有特定的维度。 Nexus 4是384x640但是图像中唯一具有这些尺寸的一个。请注意,这并不是“在某些屏幕上看起来很奇怪”,事实上在所有屏幕上看起来并不奇怪,而不是384x640。例如,你的图像中的Nexus One(533dp x 320dp)没有按预期工作,但更难以实现,因为错误在视图之外,但视图比屏幕大。与Nexus S相同。

如果您尝试从边缘到边缘(所有屏幕宽度)获取视图,请使用match_parent。不要在DP中指定大小。

如果您尝试水平或垂直分发视图,请使用特定的ViewGroup和/或权重,或者您可以使用Percent Support Library执行thisthis等操作。 Take a look at this tutorial for more

无论如何,这里有你的复制和粘贴代码。

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <View
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="@color/colorPrimary" />

    <View
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1.5"
        android:background="@color/colorPrimaryDark"/>

    <View
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2.6"
        android:background="@color/colorAccent"/>

</LinearLayout>