#android #android-layout
Вопрос:
Я пробовал около 5 различных способов, чтобы попытаться заставить кнопки отображаться поверх действия с картами, но, что бы я ни пытался, я не могу заставить их отображаться, кто-нибудь знает, что я делаю не так? Это относится к Android studio
Вот код из activity_maps.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@ id/currentloca"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:backgroundTint="#818181"
android:orientation="vertical"
android:visibility="visible">
<fragment
android:id="@ id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="553dp"
tools:context=".MapsActivity" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:orientation="horizontal">
<Button
android:id="@ id/zoomin"
android:layout_width="205dp"
android:layout_height="wrap_content"
android:onClick="onZoom"
android:text="Zoom In" />
<Button
android:id="@ id/zoomout"
android:layout_width="205dp"
android:layout_height="wrap_content"
android:onClick="onZoom"
android:text="Zoom Out" />
</androidx.appcompat.widget.LinearLayoutCompat>
</FrameLayout>
Комментарии:
1. вы используете линейную компоновку во фрагменте карты, поэтому она не работает. я думаю, что вместо этого вам нужен RelativeLayout, потому что я предполагаю, что вам нужна кнопка, расположенная в верхней части карты
2. Я думаю, вам следует протестировать свой макет с помощью какого-нибудь макетного фрагмента, отличного от фрагмента SupportMapFragment.
Ответ №1:
Как было предложено в комментарии, я думаю, что вам нужна относительная компоновка. Вот вам пример.
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@ id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="553dp"
tools:context=".MapsActivity" />
<LinearLayout
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button />
<Button />
</LinearLayout>
</RelativeLayout>
Таким образом, кнопки будут отображаться в верхней части фрагмента карты.
Ответ №2:
Вы должны использовать FrameLayout
или его разновидность вместо LinearLayout
этого . Ниже просто показана структура для объяснения:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button />
<Button />
</LinearLayout>
</FrameLayout>
LinearLayout
размещает свои дочерние представления на горизонтальной или вертикальной линии. В то время FrameLayout
как перерождает своих детей.
Что касается вашего фактического кода, сначала замените (перезапишите) окружающий (самый внешний) LinearLayout
:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@ id/currentloca"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:backgroundTint="#818181"
android:orientation="vertical"
android:visibility="visible">
(...)
</LinearLayout>
с FrameLayout
:
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@ id/currentloca"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:backgroundTint="#818181"
android:orientation="vertical"
android:visibility="visible">
(...)
</FrameLayout>
Комментарии:
1. @Newtz Попробуйте изменить окружающий линейный вывод на фреймовый.
2. Я не могу опубликовать новый измененный код здесь из-за макс. символов комментариев
3. Я отредактировал исходный пост до того, что у меня есть сейчас. Я не уверен, правильно ли я понимаю вас в том, что вы говорите. Пожалуйста, уточните, это ли то, что вы имели в виду, в любом случае, хотя при попытке создать это я получаю ошибку.
4. @Newtz изменение вашего кода было не тем, что я предполагал. Я обновил свой пост.
5. Я попытался настроить его так, чтобы он был отображением кадров, и все равно получил тот же результат, карту, но без отображаемых кнопок. (p.s. извините за поздний ответ, я работаю сверхдлинные смены)
Ответ №3:
Удалите первого родителя LinearLayout
из своего кода. Обновленный код должен выглядеть так.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@ id/currentloca"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:backgroundTint="#818181"
android:orientation="vertical"
android:visibility="visible">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="555dp">
<fragment
android:id="@ id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="553dp"
tools:context=".MapsActivity" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:orientation="horizontal">
<Button
android:id="@ id/zoomin"
android:layout_width="205dp"
android:layout_height="wrap_content"
android:onClick="onZoom"
android:text="Zoom In" />
<Button
android:id="@ id/zoomout"
android:layout_width="205dp"
android:layout_height="wrap_content"
android:onClick="onZoom"
android:text="Zoom Out" />
</androidx.appcompat.widget.LinearLayoutCompat>
</FrameLayout>
</RelativeLayout>
Если вы хотите, чтобы ваши представления потенциально перекрывались, используйте a FrameLayout
. Если вы хотите, чтобы они отображались линейно, используйте LinearLayout
Комментарии:
1. Я обновляю свой код в исходном сообщении. Это все еще не работает @nitish chaudhary
2. @Newtz , я полагаю, что вы не хотите показывать карты на весь экран в виде фрагмента карты с фиксированной высотой 555dp. Если вы хотите , чтобы карты отображались на весь экран, замените высоту карт на match_parent. Но если это то , что вам нужно, я обновил код для настройки кнопок в нижней части карты. В этом случае нижняя часть экрана будет белой(пустой) для больших устройств.
3. Я пробовал разные устройства, но ничего не изменилось. У меня никогда не было столько проблем
4. Можете ли вы прикрепить скриншот в запросе как то, что именно происходит и что требуется в пользовательском интерфейсе для лучшего понимания.
Ответ №4:
Ну, вы должны использовать ConstriantLayout и LinearLayout.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".Activities.Maps">
<fragment
android:id="@ id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:orientation="horizontal"
map:layout_constraintEnd_toEndOf="parent"
map:layout_constraintStart_toStartOf="parent"
map:layout_constraintTop_toTopOf="parent">
<Button
android:id="@ id/zoomin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_weight="1"
android:onClick="onZoom"
android:text="Zoom In" />
<Button
android:id="@ id/zoomout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_weight="1"
android:onClick="onZoom"
android:text="Zoom Out" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
Комментарии:
1. Я попробовал это, и в разделе мои инструменты:контекст выдает мне красную ошибку. Также при запуске кода он тоже не работает. На самом деле ни один из комментариев не сработал и даже не изменил само приложение. Он показывает это в части дизайна, но в реальном приложении он не показывает кнопки выше или какие-либо изменения вообще