我在支持不同手机/平板电脑屏幕尺寸的布局方面遇到了一些问题。我的布局可能不适合或缩放在所有屏幕上。有些屏幕尺寸会占用太多空间,而其他屏幕尺寸则无法容纳所有视图。
我尝试使用不同的限定符生成不同的布局:PX中的密度,尺寸和大小以及大/小/ x大限定符。 但我无法弄清楚我应该用什么来完全适应所有的屏幕。
这是我的布局如何在不同的屏幕上运行的描述(使用genymotion模拟器测试)
480px x 800px 240dpi (S3 Mini):视图dosn不适合高度。
480px x 800px 120dpi :(模拟器):视图dosn不适合高度
480px x 800px 320dpi:视图周围的可用空间过多。
600px x 1024px 240dpi:完美契合!
600px x 1024px 420dpi:几乎没有空间可以显示任何内容。最多可能有2-3次观看
1440px x 2560px 560dpi :一点点自由空间
1440px x 2560px 640DPI:完美契合!
1440px x 2560px 320DPI:视图周围的空间太多
以下是布局统计数据如何针对不同屏幕进行缩放的屏幕截图示例:
三星S3 MINI:480px x 800px 240dpi: https://www.dropbox.com/s/kvxggql80ivcmlp/galaxys3mini.png?dl=0
三星Galaxy S7:1440px x 2560px 640DPI: https://www.dropbox.com/s/ivjd6a0zgc81oqy/galaxys7.png?dl=0
Nexus 9 API 23 2048x1536 xhdpi: https://www.dropbox.com/s/r70h4da1xcf2lhi/nexus9.PNG?dl=0
我应该使用哪些限定符?'
布局xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/arion_darkblue">
<TextView
android:id="@+id/stats_title"
style="@style/fragment_titles_style"
android:layout_alignParentTop="true"
android:text="Stats" />
<RelativeLayout
android:id="@+id/statsgroup1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/stats_title"
android:layout_centerHorizontal="true"
android:layout_marginTop="25dp">
<ImageView
android:id="@+id/stats_distance_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:background="@drawable/ic_stats_distance" />
<TextView
android:id="@+id/stats_distance_txt"
style="@style/fragments_textstyles"
android:layout_below="@id/stats_distance_img"
android:text="0,0 Km" />
<ImageView
android:id="@+id/stats_jump_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginLeft="35dp"
android:layout_toRightOf="@id/stats_distance_txt"
android:background="@drawable/ic_stats_jump" />
<TextView
android:id="@+id/stats_jump_txt"
style="@style/fragments_textstyles"
android:layout_below="@id/stats_distance_img"
android:layout_marginLeft="35dp"
android:layout_toRightOf="@id/stats_distance_txt"
android:text="00" />
<ImageView
android:id="@+id/stats_transition_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="65dp"
android:layout_toRightOf="@id/stats_jump_txt"
android:background="@drawable/ic_stats_transition" />
<TextView
android:id="@+id/stats_transition_txt"
style="@style/fragments_textstyles"
android:layout_below="@id/stats_distance_img"
android:layout_marginLeft="80dp"
android:layout_toRightOf="@id/stats_jump_txt"
android:text="00" />
<ImageView
android:id="@+id/stats_intensity_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="40dp"
android:layout_toRightOf="@id/stats_transition_img"
android:background="@drawable/ic_stats_intensity" />
<TextView
android:id="@+id/stats_intensity_txt"
style="@style/fragments_textstyles"
android:layout_below="@id/stats_distance_img"
android:layout_marginLeft="55dp"
android:layout_toRightOf="@id/stats_transition_txt"
android:text="0000" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/stats_symmetric_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/statsgroup1"
android:layout_marginTop="50dp"
android:paddingLeft="30dp"
android:paddingRight="30dp">
<TextView
android:id="@+id/stats_sym_txt1"
style="@style/fragments_textstyles"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:text="50%" />
<ImageView
android:id="@+id/stats_symmertic_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@id/stats_sym_txt1"
android:background="@drawable/ic_stats_symmetric" />
<TextView
style="@style/fragments_textstyles"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@id/stats_symmertic_img"
android:text="50%" />
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true">
<TextView
android:id="@+id/stats_rotation_txt1"
style="@style/fragments_textstyles"
android:layout_alignParentLeft="true"
android:layout_marginRight="10dp"
android:text="50%" />
<ImageView
android:id="@+id/stats_rotation_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/stats_rotation_txt1"
android:background="@drawable/ic_stats_rotation" />
<TextView
android:id="@+id/stats_rotation_txt2"
style="@style/fragments_textstyles"
android:layout_marginLeft="10dp"
android:layout_toRightOf="@id/stats_rotation_img"
android:text="50%" />
</RelativeLayout>
</RelativeLayout>
答案 0 :(得分:0)
您是否听说过using several dimens.xml档案?
这样你可以有一个布局,但是可以定义来自不同dimens.xml
的元素的大小,这些元素分别为你想要支持的每个大小描述dp大小。
官方android页面的示例:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="textview_height">25dp</dimen>
<dimen name="textview_width">150dp</dimen>
<dimen name="ball_radius">30dp</dimen>
<dimen name="font_size">16sp</dimen>
</resources>
然后您可以使用布局中的这些值:
<TextView
android:layout_height="@dimen/textview_height"
android:layout_width="@dimen/textview_width"
android:textSize="@dimen/font_size"/>
如果您有多个dimens.xml但页面只有一个layout.xml,则更容易一致地更改它们。
此外,考虑使用平板电脑尺寸检查smallestWidth
资源,您可以轻松处理更大的屏幕,将dimens.xml和/或布局添加到layout-sw600dp/
和values-sw600dp/
等文件夹。
More info here