AppWidget 在模拟器和手机上看起来不同 - 移动查看内容

发布于 2025-01-08 17:40:42 字数 2651 浏览 2 评论 0原文

布局在手机上看起来与预期一致,但在模拟器上看起来有所不同。我正在使用 SDK API 10 (Android 2.3)。测试手机是搭载 Android 2.3.3 (Cyanogen Mod 7) 的 Motorola Milestone。

SDK布局预览像模拟器一样呈现预览。

下图显示了右侧的预期渲染(通过手机渲染)和左侧的意外渲染(SDK API 10、模拟器和预览)。

shifted View

造成差异的原因是什么?如何解决?删除边距和填充(通过在 TextView1 将其设置为 0dp)没有帮助。

主布局(父)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/test_bg_red" 
      android:padding="20dp"
>

    <include
        android:layout_width="fill_parent"
        android:layout_height="26dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        layout="@layout/test_child" />
/>

     <include
        android:layout_width="fill_parent"
        android:layout_height="26dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        layout="@layout/test_child" />

</RelativeLayout>

子布局

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

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="4dp"
        android:gravity="top"
        android:includeFontPadding="false"
        android:text="42"
        android:textSize="32dp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textView1"
        android:layout_toRightOf="@+id/textView1"
        android:includeFontPadding="false"
        android:text="TextView2"
        android:textSize="12dp" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView2"
        android:layout_alignParentTop="true"
        android:includeFontPadding="false"
        android:text="TextView3"
        android:textSize="10dp" />

</RelativeLayout>

The Layout is looking as expected on the phone and looking different on the emulator. I am using SDK API 10 (Android 2.3). The test phone is a Motorola Milestone with Android 2.3.3 (Cyanogen Mod 7).

The SDK layout preview renders the preview like the Emulator.

The following image shows the expected rendering on the right side (rendered by phone) and the unexpected rendering on the left side (SDK API 10, emulator and preview).

shifted View

What is the reason for the difference and how do I fix it? Removing margin and padding (by setting it to 0dp at TextView1) did not help.

main layout (parent)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/test_bg_red" 
      android:padding="20dp"
>

    <include
        android:layout_width="fill_parent"
        android:layout_height="26dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        layout="@layout/test_child" />
/>

     <include
        android:layout_width="fill_parent"
        android:layout_height="26dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        layout="@layout/test_child" />

</RelativeLayout>

child layout

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

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="4dp"
        android:gravity="top"
        android:includeFontPadding="false"
        android:text="42"
        android:textSize="32dp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textView1"
        android:layout_toRightOf="@+id/textView1"
        android:includeFontPadding="false"
        android:text="TextView2"
        android:textSize="12dp" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView2"
        android:layout_alignParentTop="true"
        android:includeFontPadding="false"
        android:text="TextView3"
        android:textSize="10dp" />

</RelativeLayout>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

后知后觉 2025-01-15 17:40:42

我相信这是由不同的屏幕具有不同的宽高比引起的。由于无论物理屏幕尺寸如何,手机都具有 4x4 单元,因此每个单元必须更宽或更窄才能容纳 4 个连续单元。使用 DP 可以考虑密度,但或多或​​少的正方形屏幕仍然需要单元或多或少的正方形。这意味着每个单元的 DP 数量会有所不同,并导致您的视图在不同设备上看起来不一样。

我发现的唯一解决方案是使布局尽可能灵活。

I believe this is caused by different screens having different aspect ratios. Since phones have 4x4 cells regardless of physical screen size, each cell must be wider or narrow to fit 4 in a row. Using DP takes care of density, but screens which are more or less square will still require cells to be more or less square. That means the number of DP per cell will vary and cause your views to not look the same on different devices.

The only solution I have found is to make your layouts as flexible as possible.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文