Неправильная гравитация применяется к элементам LinearLayout
После применения свойств Gravity к моим XML-элементам они, похоже, не расположены в нужном месте. Как можно решить эти проблемы, чтобы выполнить следующие условия?:
- Кнопка "Вверх" должна быть в верхней части экрана.
- Кнопка "Вниз" должна быть внизу экрана
GridView
должен быть в вертикальном центре экрана
activity_main.xml
<?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:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_moveup"
android:text="move up"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_gravity="top"
/>
<GridView
android:id="@+id/abslistview_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:numColumns="auto_fit"
/>
<Button
android:id="@+id/btn_movedown"
android:text="move down"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_gravity="bottom"
/>
</LinearLayout>
ОБНОВЛЕНИЕ (предложение akshay_shahane)
<?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:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_gravity="center_vertical"
android:orientation="vertical"
android:weightSum="100"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_moveup"
android:text="move up"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="5"
android:onClick="moveup_click"
/>
<GridView
android:id="@+id/abslistview_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="90"
android:layout_gravity="center_vertical"
android:numColumns="auto_fit"
/>
<Button
android:id="@+id/btn_movedown"
android:text="move down"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="5"
android:onClick="movedown_click"
/>
</LinearLayout>
3 ответа
Либо установить вес GridLayout
до 1 и layout_height
0dp, как это
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_moveup"
android:text="move up"
android:layout_height="wrap_content"
android:layout_width="match_parent" />
<GridView
android:id="@+id/abslistview_main"
android:layout_width="match_parent"
android:layout_height="0dp"
android:numColumns="auto_fit"
android:layout_weight="1"
/>
<Button
android:id="@+id/btn_movedown"
android:text="move down"
android:layout_height="wrap_content"
android:layout_width="match_parent"
/>
</LinearLayout>
Или оберните сетку в другой контейнер, как это.
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_moveup"
android:text="move up"
android:layout_height="wrap_content"
android:layout_width="match_parent" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<GridView
android:id="@+id/abslistview_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:numColumns="auto_fit" />
</LinearLayout>
<Button
android:id="@+id/btn_movedown"
android:text="move down"
android:layout_height="wrap_content"
android:layout_width="match_parent"
/>
</LinearLayout>
Второй вариант будет лучше, потому что он позволяет GridLayout
центрироваться с помощью android:layout_gravity="center"
,
Попробуй это
<?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:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
android:weightSum="1"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_moveup"
android:text="move up"
android:layout_weight="0.1"
android:layout_height="0dp"
android:layout_width="match_parent"
android:layout_gravity="top"
/>
<GridView
android:id="@+id/abslistview_main"
android:layout_width="match_parent"
android:layout_weight="0.8"
android:layout_height="0dp"
android:layout_gravity="center_vertical"
android:numColumns="auto_fit"
/>
<Button
android:id="@+id/btn_movedown"
android:text="move down"
android:layout_weight="0.1"
android:layout_height="0dp"
android:layout_width="match_parent"
android:layout_gravity="bottom"
/>
</LinearLayout>
Просто нужно установить gridview вес на 1
<?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:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_moveup"
android:text="move up"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_gravity="top"
/>
<GridView
android:id="@+id/abslistview_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:numColumns="auto_fit"
/>
<Button
android:id="@+id/btn_movedown"
android:text="move down"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_gravity="bottom"
/>
</LinearLayout>