Один XML файл в разных папках! Помогите найти ошибку

Интерфейс, диалоги, темы, стили, меню
Ответить
Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Один XML файл в разных папках! Помогите найти ошибку

Сообщение Mikhail_dev » 04 фев 2014, 23:39

Мне надо один файл использовать в разных папках ресурсов. В документации сказано:
The smallest-width qualifier is available only on Android 3.2 and above. Therefore, you should also still use the abstract size bins (small, normal, large and xlarge) to be compatible with earlier versions. For example, if you want to design your UI so that it shows a single-pane UI on phones but a multi-pane UI on 7" tablets, TVs and other large devices, you'd have to supply these files:

res/layout/main.xml: single-pane layout
res/layout-large: multi-pane layout
res/layout-sw600dp: multi-pane layout
The last two files are identical, because one of them will be matched by Android 3.2 devices, and the other one is for the benefit of tablets and TVs with earlier versions of Android.

To avoid this duplication of the same file for tablets and TVs (and the maintenance headache resulting from it), you can use alias files. For example, you can define the following layouts:

res/layout/main.xml, single-pane layout
res/layout/main_twopanes.xml, two-pane layout
And add these two files:

res/values-large/layout.xml:
<resources>
<item name="main" type="layout">@layout/main_twopanes</item>
</resources>
res/values-sw600dp/layout.xml:
<resources>
<item name="main" type="layout">@layout/main_twopanes</item>
</resources>
These latter two files have identical content, but they don’t actually define the layout. They merely set up main to be an alias to main_twopanes. Since these files have large and sw600dp selectors, they are applied to tablets and TVs regardless of Android version (pre-3.2 tablets and TVs match large, and post-3.2 will match sw600dp).
создаю папку по примеру "values-sw600dp-land", в нём файл layout, в нём
<item name="a_new_task" type="layout">@layout/a_new_task_twopanes_land</item>
где "a_new_task" имя XML ресурса, которое ожидается в самой программе, а "@layout/a_new_task_twopanes_land" сам ресурс. Всё вроде просто и логично, но приложение крашится с ошибкой о том, что ресурс не был найден. Что я делаю не так?

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Один XML файл в разных папках! Помогите найти ошибку

Сообщение altwin » 04 фев 2014, 23:56

*а сам файл a_new_task_twopanes_land в папке res/layout есть?
*я так понимаю элемент <item ... /> в values не в корне, а внутри тега <resources></resources>?
Изображение

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Один XML файл в разных папках! Помогите найти ошибку

Сообщение Mikhail_dev » 05 фев 2014, 08:18

*а сам файл a_new_task_twopanes_land в папке res/layout есть?
да, есть. Вот скопировал имя "a_new_task_twopanes_land"
*я так понимаю элемент <item ... /> в values не в корне, а внутри тега <resources></resources>?
Я скопипастил пример у гугла, так что у меня в XML файле только эти 3 строчки (со своими данными)
<resources>
<item name="main" type="layout">@layout/main_twopanes</item>
</resources>

altwin, а ты собственно хоть раз реализовывал через ссылки, как написано у гугла? А то может бы глянул как у тебя оно там, а то я у меня даже идей нет, что тут может работать не так.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Один XML файл в разных папках! Помогите найти ошибку

Сообщение altwin » 05 фев 2014, 11:11

Я предпочитаю использовать fragments вместо alias, но попробывал - работает, тебе нужно просто в item name="main" , указать вместо main <имя layout>, который будет в @layout/<имя layout>

т.е. я создал в папке layout два файла one.xml и two.xml, далее в папке values файл layout.xml:
[syntax=xml]
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="one" type="layout">@layout/one</item>
</resources>

[/syntax]
пробывал менять имена я так понял name="one" должно быть первым в имени файла, т.е. допустимо one_<любое>_<имя>
Изображение

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Один XML файл в разных папках! Помогите найти ошибку

Сообщение Mikhail_dev » 07 фев 2014, 13:05

Итак, после игры в Шерлока Холмса, всё же удалось выявить проблему.
А проблема собственно в том, что псевдо имя НЕ ДОЛЖНО БЫТЬ именем самого ресурса.
Другими словами, это будет падать
<item name="one" type="layout">@layout/one</item>
А вот так
<item name="one" type="layout">@layout/one_blablabla</item>
или так
<item name="one_blablabla" type="layout">@layout/one</item>
будет работать.
Оох, спасибо кешу гугла за сохраненную статейку, а также этому человеку за помощь в столь мутном вопросе.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Один XML файл в разных папках! Помогите найти ошибку

Сообщение altwin » 07 фев 2014, 13:25

самое интересное, что похоже на правду, сделал как я сам писал и не компилируется :)
но, что интересно: <item name="spam" type="layout">@layout/one</item> - компилируется т.е. всетаки имя можно ставить любое, главное, чтобы оно не совпадало с именем ресурса.
Нифига не понял я почему он раньше мне не давал использовать другое имя(выделял редактор @layout красным...)... может перезагрузить idea надо было фиг его знает, но вывод для себя сделал, не хочу это использовать :)
Изображение

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Один XML файл в разных папках! Помогите найти ошибку

Сообщение Mikhail_dev » 07 фев 2014, 13:30

Да да, тут черт ногу сломит. А с другой стороны, а как делать ссылочную связь, дабы не плодить лишние копии файлов?
Есть конечно вариант через include, но ведь он для внутреннего использования. Т.е. он вставляется непосредственно в файл. Тоже некрасиво.

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Один XML файл в разных папках! Помогите найти ошибку

Сообщение damager82 » 08 фев 2014, 23:14

altwin писал(а):Тут был бред, читай следующее сообщение...
Справа на своем сообщении должен быть синий крестик для удаления сообщения. У вас есть такой?
Я проверил тестовой не админской учеткой, у меня он отображается.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Один XML файл в разных папках! Помогите найти ошибку

Сообщение altwin » 09 фев 2014, 11:59

damager82 писал(а):
altwin писал(а):Тут был бред, читай следующее сообщение...
Справа на своем сообщении должен быть синий крестик для удаления сообщения. У вас есть такой?
Я проверил тестовой не админской учеткой, у меня он отображается.
в том то и дело, что нет. На некоторых сообщених в режиме редактирования есть checkbox для удаления, но похоже если после сообщения есть чей то ответ, то удалить я не могу.

P.S. вот написал это сообщение и обратил внимание. что крестик есть. Но только тут, возможно тоже будет, пока никто не ответит или не будет сообщений после.
Изображение

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Один XML файл в разных папках! Помогите найти ошибку

Сообщение rezak90 » 09 фев 2014, 12:12

Я ответил =). Проверяй. Потом своё удалю.
P.S. Кстати проверил на своих старых сообщениях. То действительно кнопка "удалить" доступна только на последнем сообщении.
R.id.team
Политика на форуме запрещена

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Один XML файл в разных папках! Помогите найти ошибку

Сообщение altwin » 09 фев 2014, 19:37

Проверил, можно удалять ... :mrgreen: :)
Изображение

Ответить