Почему кнопка не центрирована по вертикали в LinearLayout?

У меня есть LinearLayout, который содержит только одну кнопку. Я хочу, чтобы эта кнопка была центрирована по вертикали и выровнена вправо. Я пробовал много способов, но я не мог сделать эту кнопку по центру вертикально. Он всегда совпадает с вершиной. Я также попытался поместить кнопку в RelativeLayout, кнопка также не может быть центрирована по вертикали.

XML выглядит следующим образом. Что-то не так с этим макетом? Спасибо.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:background="#E8E3E4">
    <Button 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:text="More" 
        android:layout_gravity="right" />
</LinearLayout>

Изменение андроида: layout_gravity = "right" to android: layout_gravity = "right | center_vertical" не разрешило проблему в моем вопросе.

Ответ 1

Вы говорите словами, что хотите, чтобы это было вертикально по центру, но вы не сказали в XML, что хотите, чтобы это было по центру по вертикали. Вам нужно будет настроить свой атрибут android:layout_gravity, чтобы указать как right, так и center_vertical.

Однако я бы порекомендовал вам вернуться к RelativeLayout. Используйте android:layout_centerVertical="true" и android:layout_alignParentRight="true", чтобы кнопка была центрирована по вертикали и по правому краю.

Также учтите, что ваш текущий LinearLayout имеет android:layout_height="wrap_content", что означает, что внутри нечего центрировать. Вам нужно, чтобы контейнер имел больше места, чем его содержимое (например, fill_parent), если вы хотите, чтобы центрирование имело какое-либо значение.

Ответ 2

Этот код поместит кнопку в вертикальном центре и на правом экране

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:gravity="center_vertical">

    <Button 
        android:id="@+id/btnClick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:text="Click Me" />

</LinearLayout>

Ответ 3

Попробуйте добавить android: gravity = "center" к вашему LinearLayout. Я помню, что где-то читал, что это может сделать трюк.