在Nougat 7.0 API 24和7.1 API 25

时间:2017-05-18 18:40:28

标签: android api android-layout android-fragments

我有一个片段在顶部包含另一个片段,然后是一个水平的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 23的样子: enter image description here

这就是API 25的样子:

enter image description here

这是我的片段:

<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。

1 个答案:

答案 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都显示与此代码相同的内容。