RTL布局的反向输入和退出动画-Android导航组件

RTL布局的反向输入和退出动画-Android导航组件,android,xml,animation,navigation,android-architecture-navigation,Android,Xml,Animation,Navigation,Android Architecture Navigation,我使用Android导航架构组件在片段之间进行导航。我已经为片段目的地之一设置了进入和退出动画。动画工作正常,并且对于从左到右和从右到左的布局都是相同的。我需要这个动画应该考虑RTL布局的相对边缘,即什么开始< /代码>和结束属性,而不是左< /代码>和右< /代码>。实现同样目标的最简单方法是什么 <fragment android:id="@+id/sign_in_fragment" android:name="com.example.Si

我使用Android导航架构组件在片段之间进行导航。我已经为片段目的地之一设置了进入和退出动画。动画工作正常,并且对于从左到右和从右到左的布局都是相同的。我需要这个动画应该考虑RTL布局的相对边缘,即什么<代码>开始< /代码>和<代码>结束<代码>属性,而不是<代码>左< /代码>和<代码>右< /代码>。实现同样目标的最简单方法是什么

<fragment
    android:id="@+id/sign_in_fragment"
    android:name="com.example.SignInFragment">

    <action
        android:id="@+id/action_sign_up"
        app:destination="@id/sign_up_fragment"
        app:enterAnim="@anim/slide_in_right"
        app:exitAnim="@anim/slide_out_left"/>

</fragment>

<fragment
    android:id="@+id/sign_up_fragment"
    android:name="com.example.SignUpFragment"/>

动画/滑出左

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_shortAnimTime"
        android:fromXDelta="0"
        android:toXDelta="-100%p" />
</set>

动画/幻灯片在右侧

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_shortAnimTime"
        android:fromXDelta="100%p"
        android:toXDelta="0" />
</set>

使用数据绑定可以做到这一点

<layout>
    <data>
      <variable
            name="isRTL"
            type="Boolean" />
    </data>

    <fragment
        android:id="@+id/sign_in_fragment"
        android:name="com.example.SignInFragment">
    
        <action
            android:id="@+id/action_sign_up"
            app:destination="@id/sign_up_fragment"
            app:enterAnim="@{isRTL ? @anim/slide_in_right : @anim/slide_out_left}"
            app:exitAnim="@{isRTL ? @anim/slide_out_left : @anim/slide_in_right}"/>
    
    </fragment>
</layout>

就像您对不同密度版本的可绘制文件所做的一样,您可以在
anim ldrtl
中使用相同的
anim
资源名称来使用资源的RTL版本,但交换行为

例如,
res\anim ldrtl\
中的
slide\u left.xml
将包含
slide\u right.xml
的动画,依此类推

您可以在
res
下创建
anim ldrtl
目录,也可以使用Android studio:

右键单击
res\anim
->新建->动画资源文件


您是否在应用程序中使用数据绑定?是。虽然这个动画应该独立工作@普里扬卡格比:我认为没有直截了当的道路,至少我不知道。因此,您可能必须创建一个单独的文件来反转它,并根据LocaleThanks使用它来进行回复。如果存在布局文件,此解决方案(条件语句)似乎有效。我有
navigation
(navGraph),我想唯一支持的根标记是
navigation
,并且
layout
data
标记在此文件中是允许的。