我正在尝试使用嵌入式Google地图片段以及有关地图下方选定标记的一些信息来创建布局。我希望地图下方的信息仅占用其所需的空间,并将其余空间留给地图。
据我了解,layout_weight
为不同的小部件分配额外的空间,这些空间与给定的值成比例。因此,如果我有一个带有layout_weight = 1
的小部件,而另一个带有layout_weight = 0
的小部件,则第一个小部件将占用所有多余的空间,第二个小部件将仅占用所需的空间。因此,如果我给第二个小部件layout_height = wrap_content
,那么我应该得到想要的东西。但是,在实践中似乎并非如此。我更改了很多值,或者其中一个小部件占据了所有空间,或者一个都不占据任何空间。使它们正常显示的唯一方法是将第二个小部件的layout_height
设置为特定值。
这可能是问题的一部分,但是我正在动态填充小部件map_frag_event_icon
,map_frag_person
和map_frag_event_details
。
layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="@dimen/fragment_margins"
android:orientation="vertical">
<fragment
xmlns:tools="http://schemas.android.com/tools"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:id="@+id/map_frag_google_map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:paddingBottom="@dimen/fragment_margins"
tools:context=".fragment.MapFragment"/>
<LinearLayout
android:id="@+id/map_frag_event_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:orientation="horizontal"
android:gravity="center_vertical">
<ImageView
android:id="@+id/map_frag_event_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/icon_padding"
android:layout_weight="0" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical"
android:gravity="center_vertical">
<TextView
android:id="@+id/map_frag_event_person"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/text_size"/>
<TextView
android:id="@+id/map_frag_event_details"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/text_size"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
strings.xml
<resources>
<string name="app_name">Family Map</string>
<string name="title_activity_maps">Map</string>
<dimen name="fragment_margins">8dp</dimen>
<dimen name="horizontal_layout_padding">8dp</dimen>
<dimen name="vertical_layout_padding">4dp</dimen>
<dimen name="icon_size">48sp</dimen>
<dimen name="icon_padding">8dp</dimen>
<dimen name="text_size">20sp</dimen>
<dimen name="small_text_size">14sp</dimen>
<dimen name="large_text_size">24sp</dimen>
<dimen name="map_event_layout_height">120sp</dimen>
<dimen name="map_event_icon_size">40sp</dimen>
</resources>
编辑
这是我要寻找的常规设计,但是我希望文本的空白区域尽可能小,并且我想创建一个设置来更改文本大小,因此底部的空白区域应为动态的。
如果可以的话,请说明解决方案。
答案 0 :(得分:0)
在片段中保留android:layout_weight="1"
,但在LinearLayout中应用android:layout_weight="0.5"
。检查结果,然后根据需要更改值。把它看成是关系百分比,所以1到0.5就是66%到33%
答案 1 :(得分:0)
尝试以下布局:
<fragment xmlns:map="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/map_frag_google_map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/map_frag_event_layout"
android:paddingBottom="@dimen/fragment_margins"
tools:context=".fragment.MapFragment" />
<LinearLayout
android:id="@+id/map_frag_event_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+id/map_frag_event_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:padding="@dimen/icon_padding" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:id="@+id/map_frag_event_person"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/text_size" />
<TextView
android:id="@+id/map_frag_event_details"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/text_size" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
答案 2 :(得分:0)
尝试以下代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/fragment_margins"
android:orientation="vertical">
<fragment
xmlns:tools="http://schemas.android.com/tools"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:id="@+id/map_frag_google_map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:id="@+id/map_frag_google_map"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:paddingBottom="@dimen/fragment_margins"
tools:context=".fragment.MapFragment" />
<LinearLayout
android:id="@+id/map_frag_event_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+id/map_frag_event_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/icon_padding"
android:src="@mipmap/ic_launcher" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:id="@+id/map_frag_event_person"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/text_size" />
<TextView
android:id="@+id/map_frag_event_details"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/text_size" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
答案 3 :(得分:0)
以此替换您的xml代码,
>
您正在将两个视图的权重都设置为1。所以
答案 4 :(得分:0)
我发现我发布的原始代码存在两个问题。我不知道在最初的测试中何时添加它,但是有两个致命错误。在根LinearLayout
中,我有layout_height = "0dp"
,应该是layout_height = "match_parent"
。在包含两个LinearLayout
的{{1}}中,我有TextViews
,应该是layout_height = "match_parent"
。
在修正了这两个错误之后,@ MuhammadMuzammilSharif关于删除layout_height = "wrap_content"
的原始评论奏效了。
layout.xml
layout_weight = "0"