有一个我无法弄清楚的 Android 问题,所以我在这里要求另一双眼睛:D。我有一个片段,我试图在横向模式下并排显示地图和列表视图,在纵向模式下自上而下显示。现在它在横向时按预期工作,但由于某种原因,当它处于纵向模式时,地图占用的空间比我列出的重量要多。想法?下面是横向和纵向的 xml 布局,以及片段代码和一些当前外观的屏幕截图。根据我的经验,它应该按我的预期工作,而不是现在的样子。再次感谢!:)
XML 风景
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayoutMapSearch"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/npecCarbon"
android:baselineAligned="false"
android:orientation="horizontal" >
<FrameLayout
android:id="@+id/placeHolderMapView"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" >
</FrameLayout>
<LinearLayout
android:id="@+id/LinearLayout2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" >
<ListView
android:id="@+id/listViewTicketSearchResults"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/label_no_data"
android:textAppearance="@android:style/TextAppearance.Medium"
android:textColor="@color/npecWhite"
android:visibility="gone" >
</TextView>
</LinearLayout>
</LinearLayout>
XML 肖像
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayoutMapSearch"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/npecCarbon"
android:orientation="vertical" >
<FrameLayout
android:id="@+id/placeHolderMapView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" >
</FrameLayout>
<LinearLayout
android:id="@+id/LinearLayout2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" >
<ListView
android:id="@+id/listViewTicketSearchResults"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/label_no_data"
android:textAppearance="@android:style/TextAppearance.Medium"
android:textColor="@color/npecWhite"
android:visibility="gone" >
</TextView>
</LinearLayout>
</LinearLayout>
片段代码
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if(mapFragment == null) {
mapFragment = SupportMapFragment.newInstance();
mapFragment.setRetainInstance(true);
FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.placeHolderMapView, mapFragment);
fragmentTransaction.commit();
}
if(mapResults == null) {
mapResults = new ArrayList<String>();
mapResults.add("One");
mapResults.add("Two");
mapResults.add("Three");
mapResults.add("Four");
}
ArrayAdapter<String> simpleAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_single_choice, mapResults.toArray(new String[mapResults.size()]));
listViewSearchResults.setAdapter(simpleAdapter);
}
截图 Imgur 相册截图
更新 我能够达到我想要的效果,但不依赖重量属性。对于纵向布局,我将地图视图的容器高度设置为显示高度的一半,并且由于列表视图的权重起作用,它会自动填充屏幕的剩余一半。
身高代码
private void calculateNewHeightForMap() {
Display display = getActivity().getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
if(size.y > size.x) { //We're in portrait mode, calculate height
LayoutParams mapParams = new LayoutParams(LayoutParams.MATCH_PARENT, size.y / 2);
frameLayoutMapPlaceHolder.setLayoutParams(mapParams);
}
虽然这在技术上总是对我有用,虽然它确实达到了相同的结果,但我仍然很好奇为什么地图部分的权重似乎被忽略了