我有一个片段在顶部包含另一个片段,然后是一个水平的LinearLayout,它有两列,total weightSum = 3。左列是垂直RelativeLayout(权重1),带有TextView和ListView。右边是一个垂直的LinearLayout(权重2),带有TextView,GridView和Button。牛轧糖的间距发生了巨大变化。 Studio仿真器和我自己的三星S7 Edge都有。此外,仿真器报告不同的屏幕布局。对于Nexus 6P(1440 x 2560),API 23报告LARGE,其中API 25报告NORMAL。我的三星s7 Edge(1440 x 2560)也报告正常,运行7.0(API 24)。
在API 24及更高版本中,正确的布局与右边缘紧密挤压,就好像忽略了重量一样。
API 23工作正常。我使用了相同的模拟器类型,6P和不同的API。
这就是API 25的样子:
这是我的片段:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fragment_course"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.hubbardsoftware.racetac.CourseActivityFragment"
tools:showIn="@layout/activity_course">
<fragment
android:name="com.hubbardsoftware.racetac.TimerFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:layout="@layout/fragment_timer" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="3">
<RelativeLayout
android:id="@+id/course_part"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/course_course_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/title_course"
android:gravity="center"
android:textSize="@dimen/text_course_title"
android:textColor="#ff000000"
android:textStyle="bold" />
<ListView
android:id="@+id/listview_course"
android:layout_below="@id/course_course_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
</RelativeLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:layout_toEndOf="@id/course_part"
android:layout_toRightOf="@id/course_part"
android:layout_gravity="right"
android:orientation="vertical">
<TextView
android:id="@+id/course_marks_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"
android:text="@string/title_marks"
android:textSize="@dimen/text_course_title"
android:textColor="#ff000000"
android:textStyle="bold" />
<GridView
android:id="@+id/gridview_course"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:numColumns="auto_fit"
android:stretchMode="columnWidth" />
<Button
android:id="@+id/button_clear_course"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/button_rounded"
android:backgroundTint="@color/clearCourseButton"
android:text="@string/clear_all"
android:textSize="@dimen/text_course_clear"
android:textStyle="bold" />
<TextView
android:id="@+id/course_length"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"
android:text="Length"
android:textSize="@dimen/text_course_length"
android:textColor="#ff000000"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
有关改变原因的任何想法?似乎它可能与API 24和25中的以下内容有关,对于这种尺寸的设备:
((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL)
它等于API 23中的Configuration.SCREENLAYOUT_SIZE_LARGE。
答案 0 :(得分:0)
这个Java代码解决方法解决了这个问题,但是如果有人知道的话,我仍然会喜欢一个合适的XML解决方案。我按原样保留上面的XML,RelativeLayout的宽度为200dp。然后我在片段onCreateView方法中执行了以下操作:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
{
RelativeLayout coursePart = (RelativeLayout) rootView.findViewById(R.id.course_part);
ViewGroup.LayoutParams params = coursePart.getLayoutParams();
params.width = 0;
}
旧版和新版API都显示与此代码相同的内容。