Я разрабатываю приложение для Android, которое должно поддерживать арабский язык. (Который должен читаться справа налево). После того, как быстро гугл решения, я выясняю Android полностью поддерживает арабский язык изначально уровня 17 API с объявлениемAndroid RTL layout direction align center issue
андроидом: supportsRtl = «истинным»
в теге приложения внутри от AndroidManifest так что я могу использовать зеркалирование макета, чтобы автоматически перевернуть макет для лучшего права на чтение слева. Тем не менее, я заметил, что проблема возникает, когда я использую centerInParent в представлении, что внутри sub RelativeLayout во время зеркального отображения макета. Ниже приведены мои коды и ожидаемый макет.
<RelativeLayout
android:background="@color/white"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:padding="20dp">
<RelativeLayout
android:background="@drawable/shape_flag_imageview_boarder"
android:id="@+id/imageLayout"
android:layout_height="wrap_content"
android:layout_width="wrap_content">
<ImageView
android:id="@+id/image"
android:layout_height="100dp"
android:layout_width="100dp"
android:visibility="invisible" />
<ProgressBar
android:id="@+id/progressbar"
android:layout_centerInParent="true"
android:layout_height="wrap_content"
android:layout_width="wrap_content" />
</RelativeLayout>
<TextView
android:id="@+id/text"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_toEndOf="@id/imageLayout"
android:layout_width="wrap_content"
android:text="Some text here bla bla bla"
android:textColor="@color/black" />
</RelativeLayout>
Изображение выше показывает ожидаемый результат в нормальном направлении компоновки, который слева направо. Целью я обернуть ImageView и ProgressBar вместе в подвале, потому что я хочу, чтобы ProgressBar показывался в середине ImageView, когда изображение загружается из Интернета. После того, как я изменил Locale на арабский, он становится таким, как
Как я пытался и ошибка, и выясните, что это вызывает центрInParent ProgressBar. Вместо того, чтобы центрировать внутреннее представление, он выравнивает центр с корневым представлением корня, который является самым внешним RelativeLayout. Ниже показан снимок экрана удаления кода CenterInParent из ProgressBar.
Это ясно показывает расположение зеркалирование работает хорошо, но позиция ProgressBar не то, что я ожидал. Поэтому я стараюсь работать на centerVertical и centerHorizontal, результат показан на изображениях ниже соответственно.
Ни одно из решений не работает, и никто из этой темы я не искал, связанные с этим вопросом. Так что, наверное, это может быть ошибка из библиотеки Android? Если кто-нибудь знает проблемы или решения, пожалуйста, поделитесь со мной. Спасибо
По крайней мере, часть вашей проблемы заключается в том, что вы не указываете, где все должно идти полностью - ничто во внешнем относительном макете не выровнено ни с чем в родительском. Поэтому я не удивлен, что он не выясняет, как правильно это сделать. –
родительский RelativeLayout, внутри которого вы позиционируете progressbar, не имеет фиксированной высоты и ширины. так что это может привести к нежелательным результатам. – TheLittleNaruto
@GabeSechan. В шортах, слева показан макет, показанный выше, и я ожидаю, что он будет выглядеть точно так же, но перевернулся вправо налево в арабском языке. Я не использовал выравнивание влево или вправо, но вместо этого использовал Start и End, поэтому я ожидаю, что он будет работать нормально, но это не так. –