Android Marshmallow打破旧布局

时间:2015-10-15 13:28:54

标签: android android-layout

我的应用程序最初是针对Android 2.3开发的,但已经许多次更新,目前针对的是V21。当我的Nexus 5收到Marshmallow更新并发现我的应用程序的一个重要功能被破坏时,我感到很惊讶。我有一个顶部有一条线的屏幕,我想在最右边有两个按钮,一个EditText框(用于搜索文本)填满左边的屏幕剩余部分。这是我的第一个应用程序,我不清楚各种布局技术,但从Android 2.3到5.1这个代码继续工作:

    <RelativeLayout android:layout_width="match_parent"
    android:layout_height="wrap_content"
    style="@style/upper_detail_section"
    android:elevation="@dimen/upper_elevation"
>
    <Button android:id="@+id/sort"
        style="@style/large_cust_btn"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:text="@string/sort"
    />
    <Button android:id="@+id/clear"
        style="@style/large_cust_btn"
        android:layout_toLeftOf="@+id/sort"
        android:layout_alignParentTop="true"
        android:layout_alignWithParentIfMissing="true"
        android:text="@string/clear"
    />
    <EditText android:id="@+id/lookup"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/clear"
        android:layout_alignBaseline="@+id/clear"
        android:singleLine="true"
        android:hint="@string/item_search_hint"
        android:scrollHorizontally="true"
        android:textSize="16sp"
        android:inputType="textFilter"
    />
</RelativeLayout>

在Android 6.0中启动此屏幕,按钮就在那里,但EditText字段完全消失!知道我现在知道的事情,结果是使用LinearLayout和加权的简单修复:

    <LinearLayout android:layout_width="match_parent"
    android:layout_height="wrap_content"
    style="@style/upper_detail_section"
    android:orientation="horizontal"
    android:elevation="@dimen/upper_elevation"
    >
    <EditText android:id="@+id/lookup"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:hint="@string/item_search_hint"
        android:scrollHorizontally="true"
        android:textSize="16sp"
        android:inputType="textFilter"
        />
    <Button android:id="@+id/clear"
        style="@style/large_cust_btn"
        android:text="@string/clear"
        android:onClick="clearClicked"
        />
    <Button android:id="@+id/sort"
        style="@style/large_cust_btn"
        android:text="@string/sort"
        android:onClick="sortClicked"
        />
</LinearLayout>

现在一切都很顺利,我正在使用新的APK更新商店,但我想我会警告人们,过去工作的一些布局技巧现在可能会被打破。

1 个答案:

答案 0 :(得分:0)

如果我正确理解并重现您的问题,那么使用RelativeLayout修复您的问题也非常简单。棉花糖仅以不同的宽度处理match_parent。所以只需将其设置为其他类似于LinearLayout和alignParentLeft到true的其他内容:

<EditText android:id="@+id/lookup"
    android:layout_alignParentLeft="true"
    android:layout_width="0dp"
    [...] />

这对我来说就像在Marshmallow之前一样产生了相同的布局。