2015-10-15 2 views
0

Мое приложение было сначала разработано для Android 2.3, но было обновлено много раз и в настоящее время цели V21. Поэтому я был удивлен, когда мой Nexus 5 получил обновление Marshmallow и обнаружил, что критическая функция моего приложения была сломана. У меня есть экран с линией наверху, где я хочу две кнопки в крайнем правом углу, а окно EditText (для текста поиска) заполняет оставшуюся часть экрана влево. Это было мое первое приложение, и я неясно о различных методах разметки, но с Android 2.3 до 5.1 этот код продолжает работать:Android Marshmallow разбивает старый макет

<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

Это было бы лучше обработать как вопрос и ответ, [чтобы соответствовать структуре сайта] (https://stackoverflow.com/help/self-answer). Если вы это сделаете, вы также можете рассмотреть скриншоты до и после, так как трудно понять, что «сломан» действительно означает в этом контексте. – CommonsWare

+1

Я предполагаю, что 'large_cust_btn' определяет layout_width и layout_height? – njzk2

+0

Извините, что я забыл эту деталь. Под «сломанным» я подразумеваю, что поле EditText не появилось на экране. Кнопки были видны, как ожидалось, но слева от них было пустое место. Кроме того, стиль large_cust_button определяет ширину и высоту (например, wrap_content с некоторыми полями). – gordonwd

ответ

0

Если я правильно понимаю и воспроизвожу вашу проблему, довольно просто исправить ваши проблемы с помощью RelativeLayout. Зефир обрабатывает ширину match_parent по-разному. Так что просто установить его на что-то другое, как с LinearLayout и alignParentLeft к true:

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

Это дало тот же макет для меня, как и в предварительно Зефир.

Смежные вопросы