Android Scaling密度

时间:2013-10-16 16:33:44

标签: android scaling

我遇到了在多个屏幕上扩展Android的问题。根据文档,Android OS将假设您的dimens.xml是为mdpi创建的,并相应地针对hdpi,xhdpi等进行缩放...

但是,我无法看到这项工作。如果我有一个值为-hdpi的文件夹,我的SGS4看起来很好,应用了位于values-hdpi中的dimens.xml文件的1.5比例。但是,每当我从项目中删除values-hdpi文件夹以允许Android操作系统将其扩展到hdpi时,SGS4只会运行mdpi值。我不确定我做错了什么。

Android Manifest:

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


<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="15"/>

文件夹结构包括 值 值-ES 值-FR 值-sw600dp

值具有存储在dimens.xml文件中的mdpi值,所有这些值都在dp和sp中完成。 dimens.xml:

(注*)每当我尝试从dimens.xml中添加xml片段时,它都会将其格式化为有趣并删除所有dimen name = stuff,并列出其中使用的dp和sp。不知道为什么。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="center_text_margin_right">20dp</dimen>
    <dimen name="answer_row_top_padding">7dp</dimen>
    <dimen name="answer_row_bottom_padding">7dp</dimen>
    <dimen name="answer_number_text_size">12sp</dimen>
    <dimen name="answer_left_margin_from_answer_number">18dp</dimen>
    <dimen name="answer_text_size">12sp</dimen>
    <dimen name="answer_points_right_margin">20dp</dimen>
    <dimen name="answer_points_left_margin">18dp</dimen>
    <dimen name="answer_number_left_margin">60dp</dimen>
    <dimen name="center_text_size">12sp</dimen>
    <dimen name="center_text_margin_left">20dp</dimen>
    <dimen name="center_text_margin_right">20dp</dimen>
    <dimen name="answer_title_height">28dp</dimen>
    <dimen name="round_circle_margin_left">6dp</dimen>
    <dimen name="round_circle_height">6dp</dimen>
    <dimen name="round_circle_width">6dp</dimen>
    <dimen name="total_score_right_margin">26dp</dimen>
    <dimen name="total_score_left_margin">5dp</dimen>
    <dimen name="score_text_size">12sp</dimen>
    <dimen name="trivia_logo_height">25dp</dimen>
    <dimen name="trivia_logo_width">84dp</dimen>
    <dimen name="trivia_logo_margin_left">8dp</dimen>
    <dimen name="question_margin_left">26dp</dimen>
    <dimen name="question_margin_right">26dp</dimen>
    <dimen name="question_top_margin">15dp</dimen>
    <dimen name="question_margin_bottom">20dp</dimen>
    <dimen name="question_text_size">12sp</dimen>
    <dimen name="fun_fact_margin_bottom">100dp</dimen>
    <dimen name="fun_fact_text_size">12dp</dimen>
    <dimen name="answer_row_height">25dp</dimen>
</resources>

如果我使用此文件创建values-hdpi文件夹 dimens.xml

    30.00dp     10.50dp     10.50dp     18.00dp     27.00dp     18.00dp     30.00dp     27.00dp     90.00dp     18.00dp     30.00dp     30.00dp     42.00dp     9.00dp     9.00dp     9.00dp     39.00dp     7.50dp     18.00dp     37.50dp     126.00dp     8DP     39.00dp     39.00dp     22.50dp     30.00dp     18.00dp     150.00dp     18.00dp     37.50dp

一切都会正常工作

values-es和values-fr只是包含strings.xml的文件夹。我用@ dimen / answer_row_height引用了我的布局xml文件中的所有文件。

正如我前面所述,如果我在其中放入带有缩放的dimens.xml文件的values-hdpi,它可以完美地工作,但是如果我删除它,则Android不会扩展它。有没有人打过这个或者知道我搞砸了什么?

2 个答案:

答案 0 :(得分:3)

值不会自动缩放,只有drawables。

由您来定义您的应用所需的所有替代资源(包含的值),框架不能也不会为您做出这些决定。

答案 1 :(得分:1)

  

根据文档,Android OS将假设您的dimens.xml   是为mdpi创建的,并相应地为hdpi,xhdpi等进行缩放...

这是不正确的。如果尺寸以像素为单位(dimens.xml),那么您在px中放置的内容将按原样使用。您需要将它们放在与密度无关的像素(dp)中以使其缩放。 dimens.xml不应基于分辨率,而应基于屏幕尺寸。您可能在dimens.xmlvalues中有一个values-large,为较大的屏幕指定不同的间距,甚至不同的字体大小。

dimens.xmlvalues中的values-hdpi,因为dp单位已经负责密度缩放。< / p>

根据您在各个地方留下的评论,您似乎没有正确访问维度资源。你应该使用类似的东西:

getResources().getDimensionPixelSize( R.dimen. round_circle_height );

如果从代码中检索值,或

@dimen/round_circle_height

如果从xml引用。