Мое приложение было сначала разработано для 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, но я думал, что предупредить что некоторые макетные трюки, которые раньше работали, теперь могут быть нарушены.
Это было бы лучше обработать как вопрос и ответ, [чтобы соответствовать структуре сайта] (https://stackoverflow.com/help/self-answer). Если вы это сделаете, вы также можете рассмотреть скриншоты до и после, так как трудно понять, что «сломан» действительно означает в этом контексте. – CommonsWare
Я предполагаю, что 'large_cust_btn' определяет layout_width и layout_height? – njzk2
Извините, что я забыл эту деталь. Под «сломанным» я подразумеваю, что поле EditText не появилось на экране. Кнопки были видны, как ожидалось, но слева от них было пустое место. Кроме того, стиль large_cust_button определяет ширину и высоту (например, wrap_content с некоторыми полями). – gordonwd