2015-10-19 36 views
0

这个问题可能会被要求超过1000次,我仍然在这里困惑,这将是正确的方法吗?当我谷歌搜索时,我发现了一些相关的链接link1, link2,link3 etc.解决方案我发现是使用xml中的相对布局design.All布局将位于layout文件夹中(如果您正在创建电话应用程序),并且尺寸应该在dimens.xml(位于values-mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi文件夹中)中给出以支持所有屏幕。如何在android中创建应该支持所有设备的布局?

我该如何给图像视图的marginTop。我做这样的计算:在比率 (1:1.5:2:3:4) - (mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi) - (10dp -15dp-20dp-30DP-40dp)。 我的方法是正确的还是?

我在drawable(mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi)文件夹中给出了不同分辨率的不同图像。

我的问题是在values-mdpi/dimens.xml-margintop-10dp, values-hdpi/dimens.xml-margintop-15dp,values-xhdpi/dimens.xml-margintop-20dp等。不同的屏幕比例(1:1.5:2:3:4)是正确的? main.xml中:

<RelativeLayout 
    android:id="@+id/rl_submain" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    > 


    <ImageView 
     android:id="@+id/iv_papa" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="@dimen/s_mtop" 
     android:background="@drawable/papa1" 
     android:gravity="center"/> 

    <TextView 
      android:id="@+id/tv_power" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center_horizontal" 
      android:layout_marginBottom="@dimen/s_mbot" 
      android:textSize="12sp" 
      android:textColor="@color/white" 
      android:layout_alignParentBottom="true" 
      android:text="@string/poweredby"/> 

</RelativeLayout> 



<resources> 
<!--Splash-->mdpi 
<dimen name="s_mtop">10dp</dimen> 
<dimen name="s_mbot">2dp</dimen> 

<resources> 
<!--Splash-->hdpi 
<dimen name="s_mtop">15dp</dimen> 
<dimen name="s_mbot">3dp</dimen> 

<resources> 
<!--Splash-->xhdpi 
<dimen name="s_mtop">20dp</dimen> 
<dimen name="s_mbot">4dp</dimen> 

<resources> 
<!--Splash-->xxhdpi 
<dimen name="s_mtop">30dp</dimen> 
<dimen name="s_mbot">6dp</dimen> 

<resources> 
<!--Splash-->xxxhdpi 
<dimen name="s_mtop">40dp</dimen> 
<dimen name="s_mbot">8dp</dimen> 

+2

您是否考虑过为不同屏幕尺寸创建资源?例如layout-sw300dp,layoutsw400dp,layout-sw600dp?布局sw800dp?然后很容易看到600和800覆盖平板电脑 – Eenvincible

+0

[Android可以高效地加载图像]可能重复(http://stackoverflow.com/questions/32665582/android-load-images-from-drawable-efficiently) – YUVRAJ

+3

@murugalonger我不认为这个问题涉及从drawables文件夹加载图像;它是关于支持布局中的所有屏幕尺寸/设备 – Eenvincible

回答

1

我怎样才能给marginTop用于图像view.I正在做的计算像 这样的:在比 (1:1.5:2:3:4) - (MDPI:HDPI:xhdpi :xxhdpi:xxxhdpi) - (10dp-15dp-20dp-30DP-40dp)。 我的方法是正确的还是?

尺寸比(1:1.5:2:3:4) - (MDPI:HDPI:xhdpi:xxhdpi:xxxhdpi)是正确的,但它不适合尺寸单元DP /浸...它为像素

DP:密度独立像素 - 即基于屏幕的 物理密度的抽象单元。这些单位是相对于160 dpi (每英寸点数)屏幕,其中1dp大致等于1px。当在更高密度屏幕上运行 时,用于绘制1dp的像素数量将按适合屏幕dpi的倍数放大。 同样,在较低密度的屏幕上,1dp使用的像素数量将缩小。

更多细节上different dimension unit refer doc

所以按您的例子中,让marginTop = 10dp然后按比例(1:1。5:2:3:4) - (mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi) - (10px-15px-20px-30px-40px)
表示您也可以使用marginTop = 10px,但它仍然保持10px all..so更高的dpi为marginTop看起来小,这种情况下..

对于利用DIP/DP超过PX can refer here

你SP类似与DP;但它是在字体大小的上下文中的原因是指尺寸单元DOC

You can also refer the converter here

的尺寸等应该dimens.xml(这是 值-MDPI给出,HDPI,xhdpi,xxhdpi ,xxxhdpi文件夹)支持所有屏幕。

即将到来的这个维度,你不应该做values-mdpi,hdpi ...等等。因为如果你使用单位dp,那么它与前面提到的屏幕密度无关。
如果使用单位像素,那么你可以去价值观MDPI,价值观,HPDI ...等等,但是这同样会成为手工计算并收到骚扰值引起错误的可能性的开销。

所以倒不如说dimesnion值只会在屏幕尺寸方面推迟不在屏幕密度而言。所以你的布局或值的文件夹可以按照Android操作系统(API)版本,屏幕尺寸正常人一样,大的或作为链接1所提到的,链接2和意见通过Eenvicible

更新基于评论
如果您经过Supporting Different Screens那么你会意识到
布局,我们有文件夹结构布局正常,布局大,布局大的土地......但这又可能会有所不同
在同一个链接,您可以看到绘制,mdpi..and等等。这里我们使用的图像通常不是密度独立的,所以我们需要不同密度的相同图像,并且我们将其相应地添加到文件夹
中,以得到我们具有像文件夹结构的值,如果您使用的值为fr-Supporting Different Language
有意思的是values-mdpi,值-hpdi我已经在上面解释过了。

请通过每一个环节properly..bcoz我指(中文)Visa DOC ONLY

+0

我已经通过了所有的链接,转换器在这里非常有用。但仍然困惑在这里。只有这样,我可以通过net.helpless清除我的疑惑。 –

+0

但是什么让你感到困惑......从你的问题我可以看出,你不知道dp和px之间的区别,所以我回答了 –

+0

我在dimens.xml中给出的值是错误的,那么我我在这里做错了什么?那么最好的方法是什么? –

0

你为什么不使用重布局来代替。在图像上方有一个空白视图并按照您的要求进行加重,它会自动拉伸。你可以找到例子here

或者尝试这样的。根据您对空白布局的需求给空间赋予重量

 <?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
    > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:weightSum="1"> 
    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@android:color/holo_green_dark" 
     android:layout_weight="0.2" 
     android:id="@+id/view1" /> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/imageView" 
     android:src="@drawable/ic_register" 
     android:layout_weight="0.8" 
     /> 
    </LinearLayout> 
</RelativeLayout> 
+0

我已经使用相对布局instead.pls chk我编辑的问题 –

+0

我已编辑检查它 –

1

是的,您的dimens.xml文件中的值完全错误。请删除所有不同的dimens.xml。不同的密度是当你与你的图像编辑器编辑的实际图像。

如果您希望在图像周围留有边距,请使用带有weightsrelative布局的线性布局,但不要使用dps。加权线性布局或相对布局更加灵活。

但是,如果您确实选择了dps,我不建议您再次了解,您的dimens.xml中的一组度量就足够了。

理想情况下,不要创建比您需要更多的xml布局/维度变化。如果需要,可以调整这些参数,但在开始添加更多限定符之前,请确保解决实际问题。

+0

我想你有什么我想尝试在这里说..谢谢。 –

+0

@stephen ...ü给了我完美的解决方案,但ShadowDroid给了我很好的解释.. –

相关问题