Слайд у стилі Android на Facebook


283

Нова програма Facebook та її навігація настільки круті. Я просто намагався побачити, як це можна наслідувати в моїй програмі.

У когось є поняття, як цього можна досягти?

введіть тут опис зображення

При натисканні на верхню ліву кнопку відображається сторінка, і відображається наступний екран:

введіть тут опис зображення

YouTube Video


2
так, відео також буде корисним, щоб дізнатися точний ефект.
bool.dev

@ bool.dev ось це відео: youtube.com/watch?v=ANLMaL7zn20
Харша М. В.

@HarshaMV: - Спробуйте пошукати цю тему. Я думаю, це може вам дещо допомогти. stackoverflow.com/questions/8453320/…
Shashank_Itmaster

3
Дуже хороша стаття про висувається навігації в Android - androiduipatterns.com/2012/06 / ... . Обов’язково читати.
AlexKorovyansky

Я реалізував власне розсувне меню, дивіться тут stackoverflow.com/a/15880375/1939564
Мухаммед Бабар

Відповіді:


176

Я сам зіткнувся з цим, і найкращий спосіб, який я міг знайти, - це використовувати FrameLayout і закласти спеціальний HorizontalScrollView (HSV) у верхній частині меню. Всередині HSV переглядаються ваші програми, але є прозорий погляд як першої дитини. Це означає, що коли HSV має нульове зміщення прокрутки, меню відобразиться (і все-таки на диво можна натискати).

Коли програма запускається, ми прокручуємо HSV до зміщення першого видимого перегляду програми, і коли ми хочемо показати меню, ми прокручуємо назад, щоб відкрити меню через прозорий перегляд.

Код тут, а два нижніх кнопки (під назвою HorzScrollWithListMenu та HorzScrollWithImageMenu) у програмі Launch показують найкращі меню, які я міг придумати:

Демонстраційна демонстрація меню Android

Знімок екрана з емулятора (середина прокрутки):

Знімок екрана з емулятора (середина прокрутки)

Знімок екрана з пристрою (повний прокруток). Зауважте, що моя піктограма не така широка, як піктограма меню Facebook, тому перегляд меню та перегляд "програми" не вирівнюються.

Знімок екрана з пристрою (повний прокрутки)


1
@AmokraneChentir Ви можете використовувати різні види діяльності, зателефонувавши getDrawingCache()в не-меню та створивши ImageView з растрової карти. Потім зателефонуйте startActivity(intent)& overridePendingTransition(0, 0)у onClickметод ClickListenerForScrollingкласу, щоб негайно показати нову активність та отримати бажаний ефект.
Siklab.ph

1
Цікаво, чи може користувацький HorizontalScrollView використовувати ListView, оскільки офіційний документ HorizontalScrollView згадав, що він змусить ListView відображати всі його елементи.
шиїмі

1
ця вилка перемикає активність без використання фрагментів!
Ерік Б

1
Дякуємо за вашу допомогу, мені вдалося скористатися HorzScrollWithListMenu.java.
KarenAnne

2
Дуже дякую @PaulGrime ... це чудовий простий приклад, і найдивовижніше в цьому демонстраційному простоті легко зрозуміти і легко налаштувати, і немає бібліотечного проекту для використання.
Naveen Kumar

37

У цьому проекті бібліотеки я впровадив навігацію, що нагадує фейсбук .

Ви можете легко вбудувати його у свою програму, інтерфейс користувача та навігацію. Вам потрібно буде реалізувати лише одну діяльність та один фрагмент, повідомити про це бібліотеку - і бібліотека забезпечить усі потрібні анімації та навігацію.

Всередині репо можна знайти демо-проект, як використовувати lib для реалізації навігації у Facebook. Ось коротке відео із записом демонстраційного проекту .

Також ця вкладка повинна бути сумісною з цим шаблоном ActionBar, оскільки заснована на транзакціях з діяльністю та TranslateAnimations (не на транзакціях з фрагментами та на власних представленнях).

Зараз найбільш проблемою є те, щоб він працював добре для додатків, які підтримують як портретний, так і альбомний режим. Якщо у вас є відгуки, будь ласка, надайте їх через github.

Все найкраще,
Алекс


4
Привіт, я щойно зрозумів, що ваш підхід створить великий растровий знімок екрана щоразу, коли ви відкриваєте бічну панель. Це збільшить розмір купи і може призвести до помилок пам'яті.
шиямі

3
Дякую дорогий коров’янськ, це дуже приємно. але абсолютна компоновка застаріла в нових ОС. Чи можете ви його знову кодувати?
Гесам

Дякуємо всім, хто відгукується у Github чи тут. Я знаю про деякі помилки і маю ідеї, як зробити додаток кращим. Я встигаю, коли матиму вільний час.
АлексКоровянський

Привіт короянськ. Я використовую вашу бібліотеку, вона працює добре. Але у мене є невелика проблема. Коли список слайдів слайдів відкриється, я запускаю активність на панелі перегляду списку. Активність запуску правильна, але анімація слайдів не працює. Код((MenuActivity) getActivity()).getSlideoutHelper().close(); startActivity(new Intent(getActivity(), MyActivity.class) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP).putExtra("category", position));
Сонячний

у вашому випадку нова активність відкриється негайно, не чекаючи закінчення анімації, ви можете спробувати розширити бібліотеку та додати зворотний виклик для завершення анімації. я можу додати цю функцію до наступної версії бібліотеки.
AlexKorovyansky

24

Ось ще одна лайка і, здається, найкраща на мою думку. Я цього не писав ..

ОНОВЛЕННЯ:

Цей код, здається, працює найкраще для мене, і він переміщує всю панель дій, аналогічну додатку G +.

Як Google встиг це зробити? Слайд ActionBar в додатку Android


7
Я написав цю бібліотеку, радий, що вам це подобається. На сьогодні це дійсно базово, але я вдосконалюю це протягом найближчих тижнів. Більше ніж ласкаво просимо і для інших людей внести зміни.
Девід Скотт

Ця бібліотека абсолютно чудова. Це так просто у використанні та працює чудово. Дякую. Я просто хотів би додати, що зразок працює тільки з ICS (і стільником я думаю) .. але бібліотека працює аж до 2.1, я використовую її без проблем.
Стівен Елліотт

Непогано, це досить просто, але працює добре і налаштування дійсно швидке. Однак це не дуже зручно налаштувати за межами бібліотеки: всі елементи мають однаковий простий макет, і в дорозі немає можливості динамічного переліку; обидві речі легко адаптуватися, але мені дуже потрібна групування всередині списку, і це буде не так просто.
htafoya

22

Я думаю, що додаток facebook не написано в кодовому коді (я маю на увазі, за допомогою кодового коду я маю на увазі, використовуючи макети в Android), але вони використовували для нього веб-перегляд і використовували деякі бібліотеки javascript ui, як sencha . Це легко досягти, використовуючи сенчу.

введіть тут опис зображення


16
+1 Користувацький інтерфейс можна змінити без оновлення додатків, тому, безумовно, це веб-додаток, а додаток для Android - це веб-браузер.
Руді

7
Я не впевнений, що це обов'язково так. Скелет інтерфейсу користувача може бути власним (наприклад, власне перегляд меню та інші перегляди), а вміст цих переглядів завантажується динамічно. Якщо скелет програми зміниться, ймовірно, буде потрібно оновлення.
Пол Гриме

2
Я не думаю, що додаток у Facebook - це веб-версія. Надто вільно, швидко. Я знаю веб / гібридні програми, які добре виглядають "як рідні", але все ж є дещо відставання порівняно з рідним. Не тільки скелет - списки, карта тощо виглядає і відчуває себе рідним. Принаймні з сучасним станом технології.
Ixx

Добре, хтось сказав мені, що ця програма не була такою приблизно 2 місяці - тож ви переглядаєте стару версію, яку я не знаю. У будь-якому разі, можливо, буде корисно коментувати, що поточний додаток, безумовно, є рідним.
Ixx

20

Ось ще одна (дуже приємна) бібліотека з відкритим кодом!

Хорошою особливістю цього є те, що він легко інтегрується з ActionBarSherlock.

Ось посилання на проект github

Ось посилання на завантаження Google Play


2
я думаю, що це найкраще
Харша М. В.

17

Я щойно реалізував подібний погляд на власний проект. Ви можете перевірити це тут

Ось екран прикладної програми на основі бібліотеки, яку я написав: ExampleContentView Приклад

Використовувати цей спеціальний вид легко як елемент макета XML. Ось приклад:

    <shared.ui.actionscontentview.ActionsContentView
      android:id="@+id/content"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      app:actions_layout="@layout/actions"
      app:content_layout="@layout/content" />

У мене виникнуть запитання щодо використання бібліотеки ActionsContentView. Я можу написати невелику статтю в проектах Wiki.

Деякі переваги цієї бібліотеки:

  • можливість ковзання перегляду на дотик
  • легко регулювати розмір панелі дій у XML
  • підтримка всіх версій Android SDK, починаючи з 2.0 і вище

Є одне обмеження:

  • усі горизонтальні види прокрутки не будуть працювати в межах цього подання

З найкращими побажаннями, Стівен


як встановити інтерфейс frist як ваш знімок для завантаження? Я перевіряю, що його перший інтерфейс є веб-переглядом на екрані. Я сподіваюсь, що перегляд списку показується при запуску програми. через вашу лібу 2,0, але ваша демо - 4,0, сподіваюся, ви також можете використовувати 2.0. Це круто
pengwang

@pengwang: Я просто натиснув якийсь код, щоб підтримати цю функцію. Це можна зробити, поки Activity.onResume (), зателефонувавши viewActionsContentView.showActions ();
грубий

Чи можна відключити події дотику на прихованій частині? Наприклад, коли права частина активна, то всі види праворуч відключені.
Валерій

Існує можливість блокувати макет вмісту під час показу першої дії. Я надіслав вам електронний зразок проекту.
грубі

16

З версією пакета підтримки Android, версія 13 (травень 2013 р.), Існує DrawerLayout для створення навігаційного ящика, який можна витягнути з краю вікна. І навігаційний ящик - це модель дизайну зараз.

v4 бібліотека підтримки

шаблон дизайну навігаційного ящика


2
Так, мінімальний рівень API підтримується дорівнює 4.
Wubao Li

1
А бібліотека сумісності дозволяє використовувати його на старих пристроях. Я щойно розробив один для пряників і пізніше.
Тоні Маро

2
Це потрібно далі вгорі. Занадто багато сторонніх бібліотек в інших відповідях.
Джейсон Аксельсон

15

Зробив перелік існуючої реалізації та перетворив її на проект бібліотеки плюс приклад програми. Також додано XML-синтаксичний розбір, а також автоматичне виявлення можливої ​​наявної панелі дій, тому вона працює як з рідною, так і з панеллю підтримки підтримки, наприклад ActionBarSherlock.

Цей також відсуває панель дій геть!

Вся справа в бібліотечному проекті разом із прикладом програми та описана в розсувному меню для Android, як додатки google та facebook . Дякуємо scirocco за початкову ідею та код!

SlideMenu на пряники SlideMenu на ICS з ActionBar


10

Це просто і елегантно: https://github.com/akotoe/android-slide-out-menu.git

Знімок:

введіть тут опис зображення


можеш допомогти мені?? Питання пов'язаний з повзунком .. Ось посилання stackoverflow.com/questions/14500927 / ...
moDev

чи дозволяє вам ковзати, торкаючись? (середній
помах

@Edward Я працював з вашим зразком, я думаю, що це чудово і просто у використанні, але виникло проблема при обертанні екрана (я використовую android: configChanges = "орієнтація" в маніфесті з android 3.1, тому що я не хочете відновити активність) екран обертається добре, але рамка зберігає свій розмір, і він не виглядає добре, чи є у вас спосіб обійти це? Я спробував все, але не можу це виправити спасибі
zvzej

@Edward ось моє запитання з використанням вашого зразка, будь ласка, допоможіть мені або дайте поради, дякую. stackoverflow.com/questions/16778911 / ...
zvzej


8

Я не можу коментувати відповідь, яку дав @Paul Grime, все одно я подав на його проект github виправлення проблеми з мерехтінням ....

Я викладу виправлення тут, можливо, комусь це потрібно. Вам просто потрібно додати два рядки коду. Перший під викликом anim.setAnimationListener:

anim.setFillAfter(true);

А другий після виклику app.layout ():

app.clearAnimation();

Сподіваюся, це допомагає :)


6

Я реалізував це за допомогою AbsoluteLayout та простого контролера слайдів, який переміщує погляд у негативне зміщення, щоб приховати.

Якщо хтось зацікавлений, я можу прибрати код / ​​макет і дописувати. Я знаю, що AbsoluteLayout застаріла, але це було дуже прямою реалізацією. Вид вліво / вправо, а коли "ковзання відкрито", просто перемістіть подання ліворуч від зміщення -X до ширини пристрою - все, що ви хочете показати у правій подачі


Я буду вдячний, якщо ви можете це зробити без AbsoluteLayout! Дякую!
Ігор

4

Привіт, це найкращий зразковий демонстраційний додаток, який забезпечує фейсбук, як слайд-меню. Перевірте код тут

введіть тут опис зображення

введіть тут опис зображення


3

Як частина моєї спільної бібліотеки Android (ACL) я реалізував власний SideBar. Основні переваги:

  1. Бічну смужку можна встановити в будь-якому положенні: зліва, вгорі, внизу, вправо
  2. Як основний, так і розсувний вигляд можна натискати
  3. Бічна смужка може бути частково показана
  4. Стильні атрибути SideBar полегшують зміну стилю
  5. Артефакт у maven repo
  6. Частина великої бібліотеки

Вихідний код: https://github.com/serso/android-common/tree/master/views/src/main/java/org/solovyev/android/view/sidebar

Використання: https://github.com/serso/android-common/blob/master/samples/res/layout/acl_view_layout.xml


3

Нещодавно я працював над моєю версією реалізації розсувного меню. Він використовує популярну бібліотеку Android FlidinsMenu J.Feinstein.

Перевірте вихідний код на GitHub:

https://github.com/baruckis/Android-SlidingMenuImplementation

Завантажте додаток безпосередньо на пристрій, щоб спробувати:

https://play.google.com/store/apps/details?id=com.baruckis.SlidingMenuImplementation

Кодекс повинен бути пояснювальним через коментарі. Я сподіваюся, що це буде корисно! ;)


3

Я знайшов найпростіший спосіб для нього та його роботи. Використовуйте простий ящик навігації та виклик drawer.setdrawerListner () та використовуйте метод mainView.setX () для методу drawerSlide нижче або скопіюйте мій код.

XML-файл

 <android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000" >

<RelativeLayout
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff">

  <ImageView
      android:layout_width="40dp"
      android:layout_height="40dp"
      android:id="@+id/menu"
      android:layout_alignParentTop="true"
      android:layout_alignParentLeft="true"
      android:layout_marginTop="10dp"
      android:layout_marginLeft="10dp"
      android:src="@drawable/black_line"
      />
</RelativeLayout>


<RelativeLayout
    android:id="@+id/left_drawer"
    android:layout_width="200dp"
    android:background="#181D21"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    >
    </RelativeLayout>
 </android.support.v4.widget.DrawerLayout>

файл java

   public class MainActivity extends AppCompatActivity {
DrawerLayout drawerLayout;
RelativeLayout mainView;
ImageView menu;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    menu=(ImageView)findViewById(R.id.menu);
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mainView=(RelativeLayout)findViewById(R.id.content_frame);

    menu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            drawerLayout.openDrawer(Gravity.LEFT);
        }
    });

    drawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
            mainView.setX(slideOffset * 300);
        }

        @Override
        public void onDrawerOpened(View drawerView) {

        }

        @Override
        public void onDrawerClosed(View drawerView) {

        }

        @Override
        public void onDrawerStateChanged(int newState) {

        }
    });
 }
}

введіть тут опис зображення

Спасибі


2

Я збираюся тут зробити кілька сміливих здогадок ...

Я припускаю, що у них є макет, який відображає меню, яке не видно. Якщо натиснути кнопку меню, вони анімують макет / вигляд зверху, щоб вийти з шляху, і просто ввімкнуть видимість макета меню. Я не замислювався над тим, щоб викликати якісь проблеми з z-індексами у представленнях або як вони це контролюють.


якщо ви використовували додаток .. u може насправді бачити, що макет ковзає вправо, поступаючись місцем розділу меню. я спробую зробити відео та завантажити його.
Харша М. В.

1
Я використовую версію iPhone, якщо версія Android однакова, то я сумніваюся, що це набагато інакше, ніж те, що я описав. Я не написав багато анімацій на Android, тому не зміг сказати вам, як виглядає код анімації, але грубо кажучи, я припускаю, що це я описав.
jlindenbaum

дякую, youtube.com/watch?v=ANLMaL7zn20 - це такий же ефект на iPhone.
Харша М. В.


2

Ось керівництво по розробці та розробці, знайдене в офіційній документації на Android, не потрібно додавати неофіційну зовнішню бібліотеку. Тільки бібліотека підтримки для Android буде робити. Знайдіть посилання тут.

проектувати та розробляти .


1

Додаток Facebook для Android, можливо, створюється за допомогою фрагментів . Меню - один фрагмент, поглиблена діяльність (Newsfeed / події / друзі тощо) - інший. В основному планшет "головний і детальний" макет на телефоні.


У цьому випадку нам потрібно зробити фрагмент дії всередині фрагмента, тому ми не можемо використовувати будь-які функції системи Android для її побудови, правда? Насправді я не можу бути впевнений у фейсбуці, але для багатьох розробників це надто важкий спосіб зробити панель дій без допомоги фреймворку, сподіваюся, цей час уже закінчився.
AlexKorovyansky

1

Для інформації, оскільки бібліотека сумісності починається з 1.6, а цей додаток facebook також працює на пристроях з Android 1.5, це не вдалося зробити за допомогою фрагментів.

Так, як ви могли це зробити: Створіть "базову" діяльність BaseMenuActivity, де ви вкладете всю логіку для onItemClickListener для свого списку меню та визначите 2 анімації ("відкрити" та "закрити"). В кінці / на початку анімації ви показуєте / приховуєте макет BaseMenuActivity (дозволяє називати це menu_layout). Макет для цієї діяльності простий, її єдиний список з елементами + прозора частина праворуч від списку. Цю деталь можна натискати, і її ширина буде такою ж шириною, що і ваша "кнопка переміщення". З цим ви зможете натиснути на цей макет, щоб запустити анімацію, щоб дозволити зміст_клауса ковзати вліво і знімати весь екран. Для кожного параметра (тобто пункту списку меню) ви створюєте "ContentActivity", який розширює BaseMenuActivity. Потім, натискаючи на елемент списку, ви запускаєте ItemSelectedContentActivity з видимим меню (яке ви закриєте, як тільки розпочнеться ваша діяльність). Макети для кожного ContentActivity є FrameLayout і включає в себе і. Вам просто потрібно перемістити content_layout і зробити меню_layout видимим, коли вам потрібно.

Це спосіб це зробити, і я сподіваюся, що я був досить зрозумілий.


1

Я грав з цим останні кілька днів, і придумав рішення, яке в кінцевому підсумку є досить простим, і яке працює попередньо сотовим. Моє рішення полягало в анімації Перегляду, який я хочу просунути ( FrameLayoutдля мене) і прослуховування кінця анімації (в який момент змістити положення Вліво / Вправо Погляду). Тут я вставив своє рішення: Як оживити переклад перегляду


1

Після кількох годин пошуку, я знайшов рішення Пола Грима, мабуть, найкраще. Але в ньому занадто багато функціональних можливостей. Тож початківцям може бути важко вчитися. Тож я хотів би надати свою реалізацію, що випливає з ідеї Павла, але вона простіша і її легко читати.

реалізація бічної панелі меню з використанням коду Java без XML


1

Я не бачив дивовижного SimonVT / android-menudrawer, згаданого ніде у вищезазначених відповідях. Тож ось посилання

https://github.com/SimonVT/android-menudrawer

Його супер простий у використанні, і ви можете розмістити його зліва, справа, вгорі або внизу. Дуже добре документований зразок коду та ліцензія Apache 2.0.


0

У червні 2012 року Google додав "шаблони" в плагін Eclipse ADT , і є шаблон під назвою "master / деталь потоку", який робить саме це (на основі fragmets)


1
Потік основного / детального опису не є бічним меню. Це лише два фрагменти, що відображаються разом (планшет) або окремо (телефон).
tomash

Що ж, у червні 2013 року було додано макет ящика навігації, який є більш схожим на потрібне тут, але ActionBar не буде ковзати за допомогою висувного ящика, як тут потрібен повзунок стилю Facebook.
Хуля Сім Сім
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.