Android Sidebar wie Facebook oder Firefox

Mit der neuen Facebook-App kommt es mit einer versteckten Seitenleiste, die ich gerne so etwas in meinen Anwendungen verwenden würde. Es sieht irgendwie aus wie die Seitenleisten, die Firefox mobile …

Haben Sie eine Ahnung, wie Sie es implementieren, außer bei der Implementierung des ViewPagers? Ich habe mit einem HorizontalScrollView versucht, aber das würde auch zur Re-Implementierung davon führen …

  • Ist es wirklich unmöglich, Android Apps aus Reverse Engineering zu schützen?
  • Java-Abhängigkeits-Injektion: Dagger 1 vs Dolch 2, was besser ist?
  • Verwenden von shadow-dom (Polymer) in Android 4.4 Webview
  • Ändern der Position des Dialogs auf Bildschirm Android
  • Gradle - Wie bekomme ich Werte von AndroidManifest?
  • Google MapFragment ist leer (weiß) mit Konnte die Klasse 'maps.jk' nicht finden.
  • Ich sehe keinen anderen Weg neben diesen beiden … irgendwelche Vorschläge?

    Danke im Voraus

  • Konvertieren von Zeichenfolge zu Zeichnungsbar
  • Überprüfen Sie, ob App während eines GCM onMessage-Ereignisses geöffnet ist?
  • Android - Hindi Conjuncts Unterstützung?
  • Unterschied zwischen Dagger und ButterKnife Android
  • Kann dieses Video nicht abspielen. Android VideoView mp4 aufgenommen von Android-Gerät
  • Intent.putExtra Liste
  • 4 Solutions collect form web for “Android Sidebar wie Facebook oder Firefox”

    Ich kam mit einer Lösung … Ich weiß nicht, ob es perfekt ist, aber es funktioniert gut.

    Also, was ich tat, war ein einzelnes FrameLayout mit beiden Layouts gestapelt zusammen und dann nur animieren das Top-Layout, um auf der rechten Seite des Bildschirms zu schieben (müssen nur die SlideTo oder scrollBy anrufen und im Grunde ist es das! Ganz einfach und effektiv (Der Code ist aber nicht sehr hübsch: P)

    BEARBEITEN:

    Einige Code-Beispiele.

    <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFF" > <include android:id="@+id/menu_layout" layout="@layout/menu_list" android:visibility="invisible"/> <include android:id="@+id/news_list_parent" layout="@layout/main_news_list" /> </FrameLayout> 

    Dies ist das Layout xml, ganz simpe. Die mitgelieferten .xml sind einfache LinearLayouts mit einer Überschrift und einer Listenansicht.

    Die "Magie" geschieht in der Animation:

     protected void applyTransformation(float interpolatedTime, Transformation t) { int newOffset; if(expanded) { newOffset = 0; newOffset = (int)(endOffset*(1-interpolatedTime)); } else { newOffset = (int)(endOffset*(interpolatedTime)); } view.scrollTo(-newOffset, 0); } 

    Der EndOffset ist die Zielbewegung. Ich stelle es ein, bevor ich die Animation anfange und die Ansicht, die ich animieren möchte (in diesem Fall ist die Ansicht mit der id = news_list_parent), wird sie auf den Konstruktor gesetzt.

    Aber nur um zu verstehen, wie das funktioniert, macht einen Knopf und sein Zuhörer würde so etwas machen:

     if(viewBeneath.getVisibility() == View.INVISIBLE) { viewBeneath.setVisibility(View.Visible); viewToSlide.slideTo(-(width-50), 0); } 

    Und endlich über die rückseitige Taste, um das Gegenteil von der Taste zu machen

     if(viewBeneath.getVisibility() == View.VISIBLE) { viewToSlide.slideTo(0, 0); viewBeneath.setVisibility(View.Visible); } 

    Lesen Sie dies als Pseudo-Code =) Dies ist, was ich am Anfang habe, ist dieser Code verloren: P

    Sie können das ausprobieren. Gutes Beispiel. Check für Schieberegler Klasse ..

    https://github.com/gitgrimbo/android-sliding-menu-demo

    Ich habe etwas wie unten gemacht: Bildbeschreibung hier eingeben

    Bildbeschreibung hier eingeben

    Unten ist mein Code für so etwas wie Facebook-Menüleiste

    1. Ich habe 2 Ansichten überlappen in einem Rahmen-Layout. Die untere Ansicht ist das Menü, die Draufsicht ist der Inhalt Körper.
    2. Und ich stelle den Inhalt Körper in eine Horizleal Scroll-Ansicht. Ich stelle auch einen Blick auf die linke Seite des Inhaltskörpers in der Horizleal Scroll View. Und stellen Sie den Blick der Hintergrund als transparent.
    3. Dann blättern Sie zu Inhalt Körper beim Anfang. So wird die Seitenmenüleiste durch den Inhaltskörper blockiert.
    4. Wenn Sie auf eine Schaltfläche klicken, um das Menü anzuzeigen, scrollen Sie die horizontale Bildlaufansicht, um den transparenten Platzhalter anzuzeigen. Dann wird das Menü angezeigt, da es unter dem transparenten Platzhalter jetzt ist.

    Ich habe kein XML für die Schnittstelle verwendet. Ich schaffe alles im folgenden Code. Ich denke, es sollte leicht zu lesen und in deine Eklipse zu legen.

     package com.chaoshen.androidstudy.facebooklikesidemenubar; import android.os.Bundle; import android.app.Activity; import android.graphics.Color; import android.view.Display; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.FrameLayout; import android.widget.HorizontalScrollView; import android.widget.LinearLayout; import android.widget.TextView; public class MainActivity extends Activity{ private boolean Menu_Displayed=false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Display display = getWindowManager().getDefaultDisplay(); final int width = display.getWidth(); // menu: LinearLayout li_menu = new LinearLayout(this); li_menu.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); li_menu.setOrientation(1);//1 is vertical li_menu.setBackgroundColor(Color.GREEN); Button btn1 = new Button(this); btn1.setText("button 1"); btn1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); li_menu.addView(btn1); //body: final HorizontalScrollView hsv = new HorizontalScrollView(this){ @Override // do not let hsv consume the click itself. Then the view under the hsv will also consume the click //so that the menu will be clicked //when menu is not showed up, let hsv be the only view to consume the click. //so that the menu will not be clicked public boolean onTouchEvent(MotionEvent ev) { if(Menu_Displayed){ return false; } else{ return true; } } }; hsv.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); hsv.setBackgroundColor(Color.TRANSPARENT); hsv.setHorizontalFadingEdgeEnabled(false); hsv.setVerticalFadingEdgeEnabled(false); final LinearLayout li_body = new LinearLayout(this); li_body.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT)); li_body.setOrientation(0);//0 is horizantal li_body.setBackgroundColor(Color.TRANSPARENT); hsv.addView(li_body); //body: place holder transparent TextView placeholder = new TextView(this); placeholder.setTextColor(Color.TRANSPARENT); placeholder.setLayoutParams(new LayoutParams(width-100, LayoutParams.FILL_PARENT)); placeholder.setVisibility(View.INVISIBLE); li_body.addView(placeholder); //body: real content LinearLayout li_content = new LinearLayout(this); li_content.setLayoutParams(new LayoutParams(width, LayoutParams.FILL_PARENT)); li_content.setOrientation(1);//1 is vertical li_content.setBackgroundColor(Color.CYAN); TextView tv1 = new TextView(this); tv1.setText("txt 1"); tv1.setTextSize(40); tv1.setTextColor(Color.BLACK); TextView tv2 = new TextView(this); tv2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); tv2.setTextSize(50); tv2.setText("txt 2"); tv2.setTextColor(Color.WHITE); //use this button to scroll Button btn_showMenu = new Button(this); btn_showMenu.setText("Menu"); btn_showMenu.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); btn_showMenu.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { hsv.post(new Runnable() { @Override public void run() { if(Menu_Displayed){ hsv.smoothScrollTo(width-100, 0); } else{ hsv.smoothScrollTo(0, 0); } Menu_Displayed = !Menu_Displayed; } }); } }); li_content.addView(tv1); li_content.addView(tv2); li_content.addView(btn_showMenu); li_body.addView(li_content); //add menu and body in to frame FrameLayout mainFrame = new FrameLayout(this); mainFrame.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); mainFrame.addView(li_menu); mainFrame.addView(hsv); //scroll to the body real content to block the menu hsv.post(new Runnable() { @Override public void run() { hsv.scrollBy(width-100, 0); } }); setContentView(mainFrame); } } 

    Ich habe auch meine eigene Lösung für diese als auch, wie viele Lagerlösungen schien nicht auf ältere Android-Version zu arbeiten oder fehlte ordnungsgemäße Anweisungen, wie man es zu arbeiten.

    Meine Lösung hat folgende Eigenschaften:

    • Bietet Unterstützung für das Verschieben einer Ansicht, um ein Menü zu zeigen, das darunter liegt
    • Das Menü kann jede benutzerdefinierte Ansicht sein
    • Die Ansicht oben kann jede benutzerdefinierte Ansicht auch sein
    • Unterstützt auf alten Android-Versionen (getestet, um mindestens auf Android 2.2 arbeiten)

    Die Lösung verwendet ein benutzerdefiniertes Layout, genannt SlidingMenuLayout , dass Sie erwartet werden, um 2 Ansichten zu hinzufügen. Die erste Ansicht, die Sie hinzufügen, ist das Menü, das zweite ist die Hauptansicht.

    Die einfachste Möglichkeit, das Layout zu Ihrem vorhandenen Projekt hinzuzufügen, besteht darin, die Methode setContentView() Aktivität zu setContentView() :

     @Override public void setContentView(View view) { SlidingMenuLayout layout = new SlidingMenuLayout(this); layout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, 0.0F)); layout.addView(new MenuView(this)); layout.addView(view); super.setContentView(layout); } 

    In diesem Beispiel ist MenuView die Ansicht, die das Menü tatsächlich anzeigen wird. Es liegt an Ihnen, diese Ansicht zu implementieren.

    Schließlich können Sie eine Schaltfläche hinzufügen (in der Regel in der oberen linken Ecke Ihrer Hauptansicht), die openMenu() oder closeMenu() auf dem Layout entsprechend closeMenu() .

    Der Code für SlidingMenuLayout befindet sich auf der GitHub Projektseite:

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.