Android通知自定义视图布局在另一台设备

时间:2017-01-31 18:59:20

标签: android

我已经从自定义视图中创建了通知 问题是它在Nexus 5X设备上看起来很好,但在三星Galaxy S4设备上看起来很糟糕 我的通知包含希伯来语内容,因此需要采用从右到左的方向(意味着按钮位于左侧,文本位于右侧)。

这是Nexus 5X设备上的通知(就像我的意思一样): notification on nexus 5x

这是Samsung Galaxy S4设备上的通知: notification on Samsung Galaxy S4

正如您所看到的,Galaxy S4上的通知是不同的(右侧的按钮,文本缩进是关闭的等等)

我不得不说大多数应用程序在两个设备上看起来都很好。 这是唯一让两者分开的因素 此外,两个设备都设置为相同的语言和区域设置。

这是布局的代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="1"
     android:layout_marginTop="-4dip"
    android:layoutDirection="locale">


    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="59dp"
        android:text="סבבה"
        android:layout_height="227dp"
        android:id="@+id/attendButton"
        android:layout_marginLeft="-5dip"
        android:layout_marginTop="-72dip" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="59dp"
        android:text="לא טוב"
        android:layout_height="245dp"
        android:id="@+id/declineButton"
        android:layout_marginLeft="-7dip"
        android:layout_marginTop="-80dip" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Event Name"
            android:tag="event"
            android:id="@+id/eventName"
            android:textColor="@android:color/black"
            android:textSize="21sp" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">


            <TextView
                android:text="TextView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/textView"
                android:layout_weight="1"
                android:visibility="invisible"/>

            <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:text="EventTime"
            android:id="@+id/eventTimeTxt"
            android:textColor="#000000"
            android:gravity="right"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:text="EventDayOfWeek"
                android:id="@+id/eventDayOfTheWeekTxt"
                android:textColor="#000000"/>

        </LinearLayout>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:text="yesFromInvited"
            android:textColor="#000000"
            android:id="@+id/yesFromInvitedTxt"/>

    </LinearLayout>


</LinearLayout>

我认为通知中文本和按钮的位置可能与内容是希伯来语(从右到左语言)的事实有关。

我在两个不同的Galaxsy S4设备上试过它,它们都有Android 5.0.1,它们看起来都一样。所有设备都是相同的语言和区域设置。

我可以做些什么来解决这个问题?

3 个答案:

答案 0 :(得分:0)

我不会提到您的设计没有遵循通知的设计建议这一事实(因为您可以阅读here)。

我要说的是,关于你宣称你的内容是希伯来语的事实,你只是没有正确设计你的xml属性。你应该使用:

android:layoutDirection="rtl"

并确保在清单中的android:supportsRtl="true"标记中添加Application

您的按钮需要插入根LinearLayout的末尾,而不是在开头。 你的xml应该是这样的:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:orientation="vertical">

    <TextView
        android:id="@+id/eventName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:tag="event"
        android:text="שם האירוע"
        android:textColor="@android:color/black"
        android:textSize="21sp"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">


        <TextView
            android:id="@+id/textView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="TextView"
            android:visibility="invisible"/>

        <TextView
            android:id="@+id/eventTimeTxt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="right"
            android:text="EventTime"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="#000000"/>

        <TextView
            android:id="@+id/eventDayOfTheWeekTxt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="EventDayOfWeek"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="#000000"/>

    </LinearLayout>

    <TextView
        android:id="@+id/yesFromInvitedTxt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="yesFromInvited"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textColor="#000000"/>

</LinearLayout>

<Button
    android:id="@+id/attendButton"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="59dp"
    android:layout_height="227dp"
    android:layout_marginLeft="-5dip"
    android:layout_marginTop="-72dip"
    android:text="סבבה"/>

<Button
    android:id="@+id/declineButton"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="59dp"
    android:layout_height="245dp"
    android:layout_marginLeft="-7dip"
    android:layout_marginTop="-80dip"
    android:text="לא טוב"/>

答案 1 :(得分:0)

在你的三星设备RTL正在应用,它可能因为三星自定义android框架。

在这里,我认为您应该通过在XML中设置android:layoutDirection="ltr"属性来禁用RTL。

答案 2 :(得分:0)

首先,从Android设置菜单打开Galaxy S4的开发人员选项页面,然后选中&#34;强制RTL布局方向&#34;。检查通知是否以任何方式更改 - 如果是,则表示设备首先无法正确识别布局为RTL。

或者,您需要检查您的设备是否实际支持RTL语言环境。请记住,区域设置不仅仅是<language>_<country>,还具有脚本,变体和扩展的概念。最简单的方法来检查:

Configuration config = getResources().getConfiguration();
if(config.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
//in Right To Left layout
}

除此之外,当您创建旨在使用RTL语言环境的布局时,请避免使用android:gravity="right"android:gravity="left"。请改用endstart