Android用户界面缩放奇怪吗?
我们应用程序中的UI在不同的手机中无法正常扩展。下面的屏幕截图来自三星2和Xperia Z1 Compact。这两款手机都使用中等大小的屏幕,因此我认为是API 14引入的黑色导航条导致了缩放问题。我在项目中添加了以下代码,但结果仍然相同:Android用户界面缩放奇怪吗?,android,height,scaling,navigationbar,sony-xperia,Android,Height,Scaling,Navigationbar,Sony Xperia,我们应用程序中的UI在不同的手机中无法正常扩展。下面的屏幕截图来自三星2和Xperia Z1 Compact。这两款手机都使用中等大小的屏幕,因此我认为是API 14引入的黑色导航条导致了缩放问题。我在项目中添加了以下代码,但结果仍然相同: mMainView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);//sets the layout as if the navigation bar is hidden
mMainView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);//sets the layout as if the navigation bar is hidden (even if it’s not)
mMainView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);//help your app maintain a stable layout.
=Xperia Z1紧凑型
=
三星2
正如您在屏幕截图中所看到的,高度并不是Xperia中应有的高度(我们希望用户界面能够像三星2那样进行缩放)。Xperia中的文本较小,我们的徽标较小(主要在高度上),等等。似乎Xperia UI的宽度更宽,还是?如果不是导航栏,可能是什么原因造成的?即使我99%确定XML文件没有问题,我也会发布它:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:paddingBottom="4sp"
android:paddingLeft="35dp"
android:paddingRight="35dp"
android:weightSum="1.0" >
<ViewSwitcher
android:id="@+id/landing_search_switcher_banner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inAnimation="@anim/fadein"
android:outAnimation="@anim/fadeout" >
<ImageView
android:id="@+id/landing_search_image_banner_license"
android:layout_width="wrap_content"
android:layout_height="230dp"
android:layout_gravity="center"
android:layout_marginTop="1sp"
android:contentDescription="@string/ContentDescriptionLogo"
android:gravity="center"
android:scaleType="fitCenter"
android:src="@drawable/app" />
<ImageView android:id="@+id/landing_search_image_banner"
android:layout_width="wrap_content"
android:layout_height="230dp"
android:layout_marginTop="1sp"
android:contentDescription="@string/ContentDescriptionLogo"
android:gravity="center"
android:layout_gravity="center"
android:scaleType="centerInside"
android:src="@drawable/app"/>
</ViewSwitcher>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:orientation="horizontal"
android:weightSum="1.0" >
<EditText
android:id="@+id/landing_search_field"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:layout_weight="0.75"
android:background="@android:drawable/edit_text"
android:digits="/0123456789.abcdefghijklmnopqrstuvwxyz"
android:gravity="left|center"
android:hint="xlarge res"
android:inputType="number"
android:maxLines="1"
android:textSize="35sp"/>
<ImageButton
android:id="@+id/landing_search_button"
android:layout_width="0dip"
android:layout_height="80dp"
android:layout_gravity="center"
android:layout_weight="0.25"
android:background="@android:drawable/btn_default"
android:contentDescription="@string/ContentDescriptionSearchButton"
android:scaleType="center"
android:src="@drawable/ic_button_search" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="2sp"
android:layout_marginRight="4sp"
android:layout_marginTop="6sp"
android:background="#ffffff"
android:orientation="vertical" >
<LinearLayout style="@style/BarTitleStyle"
android:layout_height="58dp"
android:layout_width="fill_parent"
>
<TextView
android:id="@+id/landing_search_list_topbar_label"
style="@style/TitleTextStyle"
android:text="@string/LabelInformation"
android:textSize="32sp"
>
</TextView>
<include layout="@layout/menu_button"
/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:weightSum="1.0" >
<ListView
android:id="@+id/landing_search_list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0.9"
android:background="@color/white"
android:cacheColorHint="@color/white"
android:gravity="left"
android:isScrollContainer="false"
android:visibility="gone" />
<LinearLayout
android:id="@+id/landing_search_search_information_section"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_weight="0.9"
android:orientation="vertical"
android:paddingBottom="9sp"
android:visibility="visible" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:orientation="vertical"
android:weightSum="1.0" >
<TextView
android:id="@+id/landing_search_current_book_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="-9.5dp"
android:gravity="center|bottom"
android:text="@string/LabelCurrentBook"
android:textColor="#515151"
android:textSize="39sp"
android:textStyle="bold" />
<Button
android:id="@+id/landing_search_button_book"
android:layout_width="wrap_content"
android:layout_height="80dp"
android:layout_gravity="center|top"
android:ellipsize="end"
android:maxLines="1"
android:minWidth="170sp"
android:textSize="39.5sp"
android:scrollHorizontally="true"
android:singleLine="true"
android:background="@null"
android:text="@string/ButtonLabelChooseBook"
android:textColor="#1453DB" />
<Button
android:id="@+id/landing_search_button_school"
android:layout_width="wrap_content"
android:layout_height="92sp"
android:layout_gravity="center|top"
android:ellipsize="end"
android:maxLines="1"
android:minWidth="170sp"
android:scrollHorizontally="true"
android:singleLine="true"
android:text="@string/ButtonLabelChooseSchool"
android:textColor="#1453DB"
android:visibility="gone" />
</LinearLayout>
<!--
<Button
android:id="@+id/landing_search_choose_book_button"
android:layout_width="wrap_content"
android:layout_height="18.5dp"
android:layout_gravity="center|top"
android:autoLink="web"
android:background="@null"
android:gravity="center|top"
android:text="@string/ButtonLabelChooseBook"
android:textColor="#5c5cff"
android:textSize="14sp" >
</Button>
-->
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginRight="3sp"
android:layout_marginTop="-5.5sp"
android:gravity="center"
android:text="@string/LabelNoSearchResult"
android:textColor="#7f7f7f"
android:textSize="28.5sp" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6.5sp"
android:gravity="center"
android:text="@string/LabelNoSearchResult2"
android:textColor="#515151"
android:textSize="28.5sp"
android:layout_marginBottom="7.5dp" >
</TextView>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:autoLink="email"
android:gravity="center"
android:text="@string/LabelContactEmail"
android:textColor="#1453DB"
android:textColorLink="#1453DB"
android:textSize="32.5sp"
android:layout_marginBottom="7.5dp" >
</TextView>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<Button
android:id="@+id/landing_search_button_buy"
android:layout_width="420dp"
android:layout_height="130dp"
android:layout_gravity="center"
android:layout_marginTop="9dp"
android:background="@drawable/button_buy"
android:contentDescription="@string/ButtonLabelSubscribe"
android:gravity="center"
android:paddingBottom="0sp"
android:textColor="#515151"
android:textSize="14.5sp"
android:textStyle="bold" >
</Button>
<Button
android:id="@+id/landing_search_premium"
android:layout_width="825sp"
android:layout_height="220sp"
android:layout_gravity="center"
android:layout_marginTop="-12dp"
android:background="@drawable/premium_logo"
android:gravity="center"
android:paddingBottom="0sp"
android:textColor="#515151"
android:textSize="14.5sp"
android:textStyle="bold" >
</Button>
</LinearLayout>
这两个设备的DP单位宽度可能不完全相同 假设你说的是S2星系: 它们都有大致相同大小的屏幕。然而,S2是217ppi,它朝向
hdpi
存储桶的低端,而Xperia是342ppi,它朝向xhdpi
存储桶的高端。这是因为它们落在自己的密度桶内,所以它们的比例有所不同,对此你无能为力
DP和SP单元仅确保所有设备上的元件尺寸大致相同
想想你可能使用过的旧版本的Windows,应用程序忽略了显示器的dpi。如果使用dpi较高的显示器,只会看到较小的文本。这就像所有监视器都在同一个dpi存储桶中一样
Android的多个dpi存储桶有助于支持更大范围的屏幕密度,但在比较位于各自dpi存储桶不同端的设备时,仍然可以获得与Windows相同的效果
iOS没有这个问题,因为每个“bucket”只对应一个dpi,而不是一个dpi范围。这个差异是由于不同的设备密度或不同的ppi造成的。使用这个比例的图像可能会解决你的问题。但这样你就不能对所有的设备都做得很好。所以你想说的是:不管你做什么,总会有一些Android设备的UI缩放方式不同于它的预期?那么您应该以什么方式构建UI呢?对于多个设备,使用多个布局/可绘制文件夹集,这些文件夹集几乎/完全匹配您的设备集。如果他们的设备仍然不适合你的用户界面,那么选择可用宽度或最小宽度布局/可绘制文件夹。我在回答中忘记提到的一件事是,在Android 3.2及更高版本中,你可以定义自己的存储桶,因此你可以潜在地避免这个问题,但我认为你必须创建许多桶,使所有设备看起来非常相似。此处的信息: