1

我正在更新我的 Android 应用程序,并意识到我已经为每个可能的屏幕尺寸(小布局、大布局等)创建了一个布局。浏览每个 XML 文件并手动制作一个小改变。我正在尝试创建一个 XML 文件来支持所有屏幕尺寸。在查看了有关 stackoverflow 的 Android 文档和其他问题后,LinearLayout 似乎是最佳选择,因为您可以为布局中的每个项目提供 weightSum 和 layout_weight。这没有按预期工作(见下面的代码和图像)。我这样做正确吗?我是否必须返回为每个可能的屏幕尺寸创建一个 RelativeLayout?

我的图像是一个可绘制的文件夹,我的布局位于一个布局文件夹中。

XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg"
    android:gravity="center"
    android:orientation="vertical"
    android:weightSum="100" >

    <ImageButton
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:scaleType="fitCenter"
        android:src="@drawable/image0"
        android:background="@null"
        android:layout_weight="30" />

    <ImageButton
        android:id="@+id/btn2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"  
        android:scaleType="fitCenter"
        android:src="@drawable/image1"
        android:background="@null"
        android:layout_weight="30" />

    <ImageButton
        android:id="@+id/key"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="30"
        android:background="@null"
        android:src="@drawable/image0_key" />

    <TextView
        android:id="@+id/tvScore"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:text="Score: 0"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_weight="10"
        android:layout_gravity="left" />

</LinearLayout>

结果视图(项目溢出和布局与屏幕尺寸不一致)

连结一:

在此处输入图像描述

药片:

在此处输入图像描述

编辑:我添加了以下 drawable-____ 文件夹。它产生相同的结果。

在此处输入图像描述

4

6 回答 6

2

您可能需要考虑创建兼容性布局文件夹。:)

在此处输入图像描述

于 2013-11-01T06:58:58.660 回答
2

是的,我们通过使用我们现在可以使用的 android 的百分比布局来解决相同的问题,app:layout_heightPercentapp:layout_widthPercent使用单一布局来适应所有屏幕。

compile 'com.android.support:percent:23.0.0'

为什么weight现在使用 LinearLayout 属性,我们有了更简单的解决方案。

演示在这里!

GitHub 项目在这里!

考虑一个简单的样本

<android.support.percent.PercentRelativeLayout
    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">
    <TextView
        android:id="@+id/fifty_huntv"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="#ff7acfff"
        android:text="20% - 50%"
        android:textColor="@android:color/white"
        app:layout_heightPercent="20%"
        app:layout_widthPercent="50%" />
    <TextView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_toRightOf="@id/fifty_huntv"
        android:background="#ffff5566"
        android:text="80%-50%"
        app:layout_heightPercent="80%"
        app:layout_widthPercent="50%"
        />

</android.support.percent.PercentRelativeLayout>

在此处输入图像描述

希望它对某人有用:-)

于 2015-09-06T07:28:15.813 回答
0

使用下面的布局来安排您的 ImageButton 和 TextView。它适用于所有屏幕尺寸的布局。

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="3" />

<ImageButton
    android:id="@+id/imageBtn1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:background="@drawable/ic_launcher" />

<ImageButton
    android:id="@+id/imageBtn2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:background="@drawable/ic_launcher" />

<TextView
    android:id="@+id/tv1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="Score: 0" />

</LinearLayout>
于 2014-01-13T11:13:40.347 回答
0

永远不要把重量总和像百,试着用个位数

于 2015-06-26T06:42:17.187 回答
0
DisplayMetric dm =new DisplayMetric();

getWindowManager().getDefaultDisplay().getMetrics(dm);
int h= dm.heightPixels;
int w= dm.widthPixels;
h=h/10; // 10 is for example for 10% of display height
w=((w*20)/100); // 20%of display width
LinearLayout.LayoutParams params= new LinearLayout.LayoutParams(w,h);
YourObject.setLayoutParams(params);

//(YourObject) 可以是任何东西,例如按钮、图像按钮、文本视图、...

于 2015-09-06T08:05:36.353 回答
0

这里有两个问题,一个是填充屏幕的大小,另一个是支持手机的各种分辨率大小。即使在 xxxhdpi 内,也存在变化,因为新的旗舰三星手机正在漂移到 19.5 x 16。

线性布局和权重属性确实提供了很好的覆盖范围,但要注意嵌套标签和性能。对于我处理过的大多数场景,它都运行良好。

此外,正如其他答案中所指出的,标准尺寸的不同可绘制/资源有助于在所有设备中保持相似的视图。

在此处输入图像描述

于 2018-08-17T09:33:54.313 回答