gpt4 book ai didi

android - ViewCompat.getLayoutDirection 在 onResume() 之前不会返回正确的布局

转载 作者:太空狗 更新时间:2023-10-29 14:52:29 29 4
gpt4 key购买 nike

我正在尝试在包含两个 TextView 和一个 ImageButton 的复杂布局中处理 RTL(从右到左)布局。

但是,直到调用 onResume() 方法一段时间后,布局方向才返回 RTL 作为布局方向。对 ViewCompat.getLayoutDirection(getView()) 的调用总是在我检查过的生命周期中的每个点返回 LTR,onStop()

除外

我们一直使用此方法来处理 RecyclerView 中的绑定(bind) View 持有者,但这是我们第一次尝试在 RecyclerView 之外的复杂布局上使用它。

有没有其他人看到过这种行为或知道如何(或何时)获得正确的布局方向?

这是我处理 RTL 的方法:

MyFragment.java:

private TextView title;
private TextView subtitle;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_preview_audio, container, false);
loadAsset();
validateAsset();

int layoutDirection = ViewCompat.getLayoutDirection(container);
setupUi(layoutDirection);

populateData();

return view;
}

private void setupUi(int layoutDirection) {
int gravity = GravityCompat.getAbsoluteGravity(GravityCompat.START, layoutDirection);
title.setGravity(gravity);
subtitle.setGravity(gravity);
}

details.xml(包含在fragment_preview_audio中)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/details_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginBottom="16dp"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:orientation="vertical"
>

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

<TextView
android:id="@+id/title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="24sp"
android:textColor="@color/text_dark_grey"
android:textStyle="bold"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginBottom="8dp"
android:layout_weight="1"
/>

<ImageButton
android:id="@+id/menu_button"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="8dp"
android:layout_marginTop="8dp"
android:src="@drawable/ic_more_vert_black_24dp"
style="?android:attr/buttonBarButtonStyle"
tools:ignore="ContentDescription"/>

</LinearLayout>

<TextView
android:id="@+id/subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textColor="@color/text_light_grey"
android:singleLine="false"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
/>

最佳答案

使用具有需要预测开始或结束布局重力的子组件的容器小部件,并将其指示为方法 ViewCompat.getLayoutDirection(container) 中的参数。我在我的 itemdecorator 中使用了 recyclerview,它终于起作用了。

关于android - ViewCompat.getLayoutDirection 在 onResume() 之前不会返回正确的布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34209728/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com