Эффект листания

Интерфейс, диалоги, темы, стили, меню
Ответить
Аватара пользователя
Isaev
Сообщения: 145
Зарегистрирован: 03 сен 2013, 09:39
Откуда: Германия
Контактная информация:

Эффект листания

Сообщение Isaev » 20 сен 2013, 09:49

Подскажите пожалуйста, каким компонентом реализуется сдвиг страницы?
Например как в app для vk.com
сдвигаешь страницу вправо - видишь меню, выбираешь пункт - оно задвигается назад и появляется соответствующая страница

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Эффект листания

Сообщение klblk » 20 сен 2013, 10:54

Есть сторонняя библиотека SlidingMenu (вроде бы так зовется).

еще есть офф доки:
http://developer.android.com/intl/ru/de ... rawer.html
http://developer.android.com/intl/ru/tr ... rawer.html

Аватара пользователя
Isaev
Сообщения: 145
Зарегистрирован: 03 сен 2013, 09:39
Откуда: Германия
Контактная информация:

Re: Эффект листания

Сообщение Isaev » 20 сен 2013, 12:45

klblk, пытаюсь собрать тот пример из доки, получаю следующую ошибку

Код: Выделить всё

09-20 09:36:27.635: INFO/ActivityManager(59): Start proc com.example.NavigationDrawer for activity com.example.NavigationDrawer/.MainActivity: pid=687 uid=10003 gids={}
09-20 09:36:27.635: DEBUG/AndroidRuntime(681): Shutting down VM
09-20 09:36:27.645: DEBUG/dalvikvm(681): Debugger has detached; object registry had 1 entries
09-20 09:36:27.655: INFO/AndroidRuntime(681): NOTE: attach of thread 'Binder Thread #3' failed
09-20 09:36:27.846: WARN/dalvikvm(687): Unable to resolve superclass of Lcom/example/NavigationDrawer/MainActivity$PlanetFragment; (12)
09-20 09:36:27.846: WARN/dalvikvm(687): Link of class 'Lcom/example/NavigationDrawer/MainActivity$PlanetFragment;' failed
09-20 09:36:27.855: ERROR/dalvikvm(687): Could not find class 'com.example.NavigationDrawer.MainActivity$PlanetFragment', referenced from method com.example.NavigationDrawer.MainActivity.selectItem
09-20 09:36:27.855: WARN/dalvikvm(687): VFY: unable to resolve new-instance 610 (Lcom/example/NavigationDrawer/MainActivity$PlanetFragment;) in Lcom/example/NavigationDrawer/MainActivity;
09-20 09:36:27.855: DEBUG/dalvikvm(687): VFY: replacing opcode 0x22 at 0x0000
09-20 09:36:27.855: DEBUG/dalvikvm(687): VFY: dead code 0x0002-0038 in Lcom/example/NavigationDrawer/MainActivity;.selectItem (I)V
09-20 09:36:27.865: INFO/dalvikvm(687): Could not find method com.example.NavigationDrawer.MainActivity.getActionBar, referenced from method com.example.NavigationDrawer.MainActivity.onCreate
09-20 09:36:27.865: WARN/dalvikvm(687): VFY: unable to resolve virtual method 4493: Lcom/example/NavigationDrawer/MainActivity;.getActionBar ()Landroid/app/ActionBar;
09-20 09:36:27.865: DEBUG/dalvikvm(687): VFY: replacing opcode 0x6e at 0x0057
09-20 09:36:27.865: DEBUG/dalvikvm(687): VFY: dead code 0x005a-0086 in Lcom/example/NavigationDrawer/MainActivity;.onCreate (Landroid/os/Bundle;)V
09-20 09:36:27.875: INFO/dalvikvm(687): Could not find method com.example.NavigationDrawer.MainActivity.getActionBar, referenced from method com.example.NavigationDrawer.MainActivity.onOptionsItemSelected
09-20 09:36:27.875: WARN/dalvikvm(687): VFY: unable to resolve virtual method 4493: Lcom/example/NavigationDrawer/MainActivity;.getActionBar ()Landroid/app/ActionBar;
09-20 09:36:27.875: DEBUG/dalvikvm(687): VFY: replacing opcode 0x6e at 0x001f
09-20 09:36:27.875: DEBUG/dalvikvm(687): VFY: dead code 0x0022-0042 in Lcom/example/NavigationDrawer/MainActivity;.onOptionsItemSelected (Landroid/view/MenuItem;)Z
09-20 09:36:27.875: INFO/dalvikvm(687): Could not find method com.example.NavigationDrawer.MainActivity.getActionBar, referenced from method com.example.NavigationDrawer.MainActivity.setTitle
09-20 09:36:27.875: WARN/dalvikvm(687): VFY: unable to resolve virtual method 4493: Lcom/example/NavigationDrawer/MainActivity;.getActionBar ()Landroid/app/ActionBar;
09-20 09:36:27.875: DEBUG/dalvikvm(687): VFY: replacing opcode 0x6e at 0x0002
09-20 09:36:27.875: DEBUG/dalvikvm(687): VFY: dead code 0x0005-000b in Lcom/example/NavigationDrawer/MainActivity;.setTitle (Ljava/lang/CharSequence;)V
09-20 09:36:27.885: WARN/ResourceType(687): Entry identifier 0x119 is larger than entry count 0xa2
09-20 09:36:27.945: DEBUG/AndroidRuntime(687): Shutting down VM
09-20 09:36:27.945: WARN/dalvikvm(687): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
09-20 09:36:27.945: ERROR/AndroidRuntime(687): FATAL EXCEPTION: main
        java.lang.NoSuchMethodError: com.example.NavigationDrawer.MainActivity.getActionBar
        at com.example.NavigationDrawer.MainActivity.onCreate(MainActivity.java:97)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
        at android.app.ActivityThread.access$2300(ActivityThread.java:125)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:123)
        at android.app.ActivityThread.main(ActivityThread.java:4627)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:521)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
        at dalvik.system.NativeStart.main(Native Method)
09-20 09:36:27.955: WARN/ActivityManager(59): Force finishing activity com.example.NavigationDrawer/.MainActivity
09-20 09:36:28.467: WARN/ActivityManager(59): Activity pause timeout for HistoryRecord{46022790 com.example.NavigationDrawer/.MainActivity}
09-20 09:36:33.695: DEBUG/dalvikvm(267): GC_EXPLICIT freed 24 objects / 1048 bytes in 123ms
09-20 09:36:38.548: WARN/ActivityManager(59): Activity destroy timeout for HistoryRecord{46022790 com.example.NavigationDrawer/.MainActivity}
09-20 09:36:38.745: DEBUG/dalvikvm(250): GC_EXPLICIT freed 115 objects / 9448 bytes in 125ms
09-20 09:36:41.665: WARN/InputManagerService(59): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@460aaae0
09-20 09:36:41.765: INFO/Process(687): Sending signal. PID: 687 SIG: 9
09-20 09:36:41.875: INFO/ActivityManager(59): Process com.example.NavigationDrawer (pid 687) has died.
09-20 09:39:40.071: DEBUG/SntpClient(59): request time failed: java.net.SocketException: Address family not supported by protocol
С чем это может быть связано?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Эффект листания

Сообщение klblk » 20 сен 2013, 18:34

На какой версии андроида запускается?

Запустил на 4.1.2 эмуляторе, все нормально.

Аватара пользователя
Isaev
Сообщения: 145
Зарегистрирован: 03 сен 2013, 09:39
Откуда: Германия
Контактная информация:

Re: Эффект листания

Сообщение Isaev » 23 сен 2013, 09:46

klblk, точно спс, на 2.2 пробовал)

Аватара пользователя
Isaev
Сообщения: 145
Зарегистрирован: 03 сен 2013, 09:39
Откуда: Германия
Контактная информация:

Re: Эффект листания

Сообщение Isaev » 24 сен 2013, 10:53

Тут же, как я понимаю, возможна сборка на версиях ниже 4.1, для того и либа в нагрузку в проекте android-support-v4
вот описание http://developer.android.com/training/i ... stral.html
но как-то не идёт на 2.3.3, или там тоже какое-то ограничение по API level?

Аватара пользователя
Isaev
Сообщения: 145
Зарегистрирован: 03 сен 2013, 09:39
Откуда: Германия
Контактная информация:

Re: Эффект листания

Сообщение Isaev » 24 сен 2013, 13:57

И ещё до кучи вопросик
всё вроде хорошо, но не понял как делать подменю, как тут на скрине
http://developer.android.com/design/pat ... html#Style
чтобы стрелкой вниз раскрывался
это нигде не описано или я пропустил что-то?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Эффект листания

Сообщение klblk » 27 сен 2013, 06:18

там ActionBar используется, потому помимо android-support-v4, необходима android-support-v7-appcompat. Сам не проверял, но должно заработать думаю.
С подменю помочь не могу.

Аватара пользователя
Isaev
Сообщения: 145
Зарегистрирован: 03 сен 2013, 09:39
Откуда: Германия
Контактная информация:

Re: Эффект листания

Сообщение Isaev » 27 сен 2013, 09:54

klblk писал(а):там ActionBar используется, потому помимо android-support-v4, необходима android-support-v7-appcompat. Сам не проверял, но должно заработать думаю.
добавил, не помогло... ошибки те же

Код: Выделить всё

Compilation completed with 5 errors and 0 warnings in 1 sec
5 errors
0 warnings
C:\Users\User_8\IdeaProjects\NavigationDrawer\res\layout\activity_main.xml
android-apt-compiler: [NavigationDrawer] C:\Users\User_8\IdeaProjects\NavigationDrawer\res\layout\activity_main.xml:38: error: Error: String types not allowed (at 'layout_gravity' with value 'start').
C:\Users\User_8\IdeaProjects\NavigationDrawer\res\layout\drawer_list_item.xml
android-apt-compiler: [NavigationDrawer] C:\Users\User_8\IdeaProjects\NavigationDrawer\res\layout\drawer_list_item.xml:17: error: Error: No resource found that matches the given name (at 'textAppearance' with value '?android:attr/textAppearanceListItemSmall').
android-apt-compiler: [NavigationDrawer] C:\Users\User_8\IdeaProjects\NavigationDrawer\res\layout\drawer_list_item.xml:17: error: Error: No resource found that matches the given name (at 'background' with value '?android:attr/activatedBackgroundIndicator').
android-apt-compiler: [NavigationDrawer] C:\Users\User_8\IdeaProjects\NavigationDrawer\res\layout\drawer_list_item.xml:17: error: Error: No resource found that matches the given name (at 'minHeight' with value '?android:attr/listPreferredItemHeightSmall').
C:\Users\User_8\IdeaProjects\NavigationDrawer\res\menu\main.xml
android-apt-compiler: [NavigationDrawer] C:\Users\User_8\IdeaProjects\NavigationDrawer\res\menu\main.xml:18: error: No resource identifier found for attribute 'showAsAction' in package 'android'
если версию API меняем, то все ошибки исчезают...
может там был другой формат немного в параметрах xml?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Эффект листания

Сообщение klblk » 28 сен 2013, 06:18

так запустил таки на эмуляторе 2.2 (http://gyazo.com/fa4e7bad94188fabdb3df6d71265f7e6):
Все не так просто, хотя подобных твоим ошибок у меня не возникало.
Что делал:
1) Добавил демо проект от гугла
2) Добавил проект библиотеки android-support-v7-appcompat и подключил его к демо проекту (тут конфликтовали android-support-v4, удалил в демо проекте ее и все норм стало)
3) В манифесте ставим тему приложения AppCompat: android:theme="@style/Theme.AppCompat"
5) Далее редактируем MainActivity:
- наследуем не от Activity, а от ActionBarActivity (из android-support-v7-appcompat)
- меняем импорты Fragment и FragmentManager на:
[syntax=java]import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;[/syntax]
- Меняем некоторые функции на саппорт-функции:
[syntax=java]getSupportActionBar(); //ранее getActionBar()
getSupportFragmentManager(); //ранее getFragmentManager()
supportInvalidateOptionsMenu(); //ранее invalidateOptionsMenu();[/syntax]
6) Ну и последняя деталь в res/layout/drawer_list_item.xml: пришлось удалить некоторые свойства TextView (те которые подчеркивались), вероятно эти свойства также можно взять из appcompat, но я не стал заморачиваться

вроде бы ничего не упустил.

Аватара пользователя
Isaev
Сообщения: 145
Зарегистрирован: 03 сен 2013, 09:39
Откуда: Германия
Контактная информация:

Re: Эффект листания

Сообщение Isaev » 07 окт 2013, 09:48

klblk писал(а):3) В манифесте ставим тему приложения AppCompat: android:theme="@style/Theme.AppCompat"
Вот этот пункт как-то не проходит... Всё остальное нормально
Не видит он темы никакие
и каким образом темы вообще добавляются к проекту, чтобы он их распознавал?
Последний раз редактировалось Isaev 07 окт 2013, 12:46, всего редактировалось 1 раз.

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: Эффект листания

Сообщение trew » 07 окт 2013, 10:14

Isaev писал(а):
klblk писал(а):3) В манифесте ставим тему приложения AppCompat: android:theme="@style/Theme.AppCompat"
Вот этот пункт как-то не проходит... Не видит он темы никакие
и каким образом темы вообще добавляются к проекту, чтобы он их распознавал?
Инструкция, импорт библиотеки:
http://habrahabr.ru/post/189680/
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

Аватара пользователя
Isaev
Сообщения: 145
Зарегистрирован: 03 сен 2013, 09:39
Откуда: Германия
Контактная информация:

Re: Эффект листания

Сообщение Isaev » 07 окт 2013, 12:14

trew писал(а): Инструкция, импорт библиотеки:
http://habrahabr.ru/post/189680/
та же проблемма
вот там пункт:
Прежде всего идём в res/values/styles.xml, res/values-v11/styles.xml, res/values-v14/styles.xml (спасибо DeusModus)и пишем
<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light" >

в моём случае res/values-v11 и res/values-v14 не нужно так?
в res/values/styles.xml у меня
[syntax=xml]<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="InterstitialDialogLayout" />
<style name="ButtonBar" parent="@android:style/ButtonBar" />
<style name="ButtonBarButton" parent="@android:style/Widget.Button" />
</resources>[/syntax]
и если я добавляю:
<?xml version="1.0" encoding="utf-8"?>
[syntax=xml]<resources>
<style name="InterstitialDialogLayout" />

<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light" />

<style name="ButtonBar" parent="@android:style/ButtonBar" />
<style name="ButtonBarButton" parent="@android:style/Widget.Button" />
</resources>[/syntax]
то получаю ошибку:
android-apt-compiler: [NavigationDrawer] C:\Users\User_8\IdeaProjects\NavigationDrawer\res\values\styles.xml:19: error: Error retrieving parent for item: No resource found that matches the given name '@style/Theme.AppCompat.Light'.

Это имя AppBaseTheme в дальнейшем где используется?
файл themes.xml отсутствует, может в него что-то необходимо вписать?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Эффект листания

Сообщение klblk » 08 окт 2013, 04:24

Isaev писал(а):
klblk писал(а):3) В манифесте ставим тему приложения AppCompat: android:theme="@style/Theme.AppCompat"
Вот этот пункт как-то не проходит... Всё остальное нормально
Не видит он темы никакие
и каким образом темы вообще добавляются к проекту, чтобы он их распознавал?

Добавляются не темы, а проекты-библиотеки, которые включают эти темы. Видимо импорт AppCompat библиотеки сделан не правильно, но как сделать правильно я не знаю т.к. работаю в Эклипсе,а не в Идее.
Может быть поможет ссылка: http://android-wtf.com/2012/09/how-to-c ... llij-idea/ (тут подключается Sherlock, но для других библиотек данная инструкция должна быть годной)

Аватара пользователя
Isaev
Сообщения: 145
Зарегистрирован: 03 сен 2013, 09:39
Откуда: Германия
Контактная информация:

Re: Эффект листания

Сообщение Isaev » 08 окт 2013, 09:40

klblk писал(а):Видимо импорт AppCompat библиотеки сделан не правильно, но как сделать правильно я не знаю т.к. работаю в Эклипсе,а не в Идее.
Может быть поможет ссылка: http://android-wtf.com/2012/09/how-to-c ... llij-idea/ (тут подключается Sherlock, но для других библиотек данная инструкция должна быть годной)
Да нет, правильно всё... тут по другому и не сделать, все так подключаю
просто где-то что-то надо дописать явно... что-то очевидное для вас и не заметное для меня )

а в этом моменте:
klblk писал(а): (тут конфликтовали android-support-v4, удалил в демо проекте ее и все норм стало)
у меня не конфликтуют они, да и есои удалить её, то половина кода вообще не распознаётся
каким образом? Вы же сами заменяете потом везде на v4 вызовы

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Эффект листания

Сообщение klblk » 11 окт 2013, 08:16

Isaev писал(а):а в этом моменте:
klblk писал(а): (тут конфликтовали android-support-v4, удалил в демо проекте ее и все норм стало)
у меня не конфликтуют они, да и есои удалить её, то половина кода вообще не распознаётся
каким образом? Вы же сами заменяете потом везде на v4 вызовы
В библиотеке AppCompat есть экземпляр v4 он и используется. Но можно и не удалять, просто в оба проекта должны содержать одинаковую версию v4 библиотеки.

Аватара пользователя
Isaev
Сообщения: 145
Зарегистрирован: 03 сен 2013, 09:39
Откуда: Германия
Контактная информация:

Re: Эффект листания

Сообщение Isaev » 14 ноя 2013, 11:39

to klblk

Всё таки да, не правильно импортировал, без ресурсов
инструкция для IDEA тут не плохая: http://stackoverflow.com/questions/1729 ... 8#18916738

на счёт свойств в res/layout/drawer_list_item.xml тоже разобрался по этой подсказке: http://stackoverflow.com/questions/1500 ... cator-work

не понял что делать с файлом Android_Design_Icons_20130926.zip
отсюда: http://developer.android.com/training/i ... rawer.html
Куда это всё должно вставляться?

На данном этапе все ошибки в коде пропали, но при компиляции получаю следующую ошибку:

Код: Выделить всё

Using javac 1.7.0_25 to compile java sources
java: Errors occurred while compiling module 'android-support-v7-appcompat'
Compilation completed with 2 errors and 0 warnings in 1 sec
2 errors
0 warnings
C:\Users\User_8\.IdeaIC12\system\compile-server\navigationdrawer_ef3a61ba\targets\java-production\android-support-v7-appcompat\android\generated_sources\build_config\android\support\v7\appcompat\BuildConfig.java
java: duplicate class: android.support.v7.appcompat.BuildConfig
C:\Program Files\Android SDK Windows\extras\android\support\v7\appcompat\gen\android\support\v7\appcompat\R.java
java: duplicate class: android.support.v7.appcompat.R
Как от них избавиться?

Ответить