Странное поведение смещения в скользящем меню

Я пытаюсь включить SlidingMenu в свое приложение. Он объединяет 3 библиотеки ActionBarSherlock/ViewPagerIndicator/SlidingMenu. Ну, проблема в том, что если я двигаюсь вправо, чтобы развернуть SlidingMenu, у него нет смещения. Это означает, что дыра экрана будет заполнена меню. Если я нажимаю кнопку переключения, это выглядит очень странно. Кажется, он получил смещение, но посмотрите на картинку... Если я дважды нажму кнопку-переключатель, это выглядит так, как должно -.-'

Любая идея, что я сделал неправильно?

Это мой layout.xml

<LinearLayout 
android:id="@+id/id_Main_output"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="1.0"
android:orientation="vertical" >

<com.viewpagerindicator.TitlePageIndicator
    android:id="@+id/id_Main_titlepageindicator"
    android:textColor="#FF808080"
    app:selectedColor="#FF33B5E5"
    app:selectedBold="true"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    />
<android.support.v4.view.ViewPager
    android:id="@+id/id_Main_pager"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    />

</LinearLayout>

А это мой onCreate

super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_mensaplanhsulm);
    setBehindContentView(R.layout.layout_settings);

    mPager              = (ViewPager)findViewById(R.id.id_Main_pager);
    mIndicator          = (TitlePageIndicator)findViewById(R.id.id_Main_titlepageindicator);
    mAdapter = new DayTitleFragmentAdapter(getSupportFragmentManager());
    mPager.setAdapter(mAdapter);
    mPager.setCurrentItem(0);
    mIndicator.setViewPager(mPager);

    SlidingMenu menu = new SlidingMenu(this);
    menu.setMode(SlidingMenu.LEFT);
    menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
    menu.setShadowWidthRes(R.dimen.shadow_width);
    menu.setShadowDrawable(R.drawable.shadow);
    menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
    menu.setAboveOffset(R.dimen.slidingmenu_offset);
    menu.setFadeDegree(0.35f);
    menu.attachToActivity(this, SlidingMenu.SLIDING_WINDOW);
    menu.setMenu(R.layout.layout_settings);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    setSlidingActionBarEnabled(true);

person mkl    schedule 05.02.2013    source источник


Ответы (2)


Вот что я использую:

// customize the SlidingMenu
        setBehindContentView(R.layout.menu_frame);
        FragmentTransaction t = this.getSupportFragmentManager().beginTransaction();
        mFrag = new SlidingFragment();
        t.replace(R.id.menu_frame, mFrag);
        t.commit();

                SlidingMenu sm = getSlidingMenu();
                sm.setShadowWidthRes(R.dimen.shadow_width);
                sm.setShadowDrawable(R.drawable.shadow);
                sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
                sm.setFadeDegree(0.35f);
                setSlidingActionBarEnabled(true);

                getSupportActionBar().setDisplayHomeAsUpEnabled(true);

dimen.xml

<resources>

    <dimen name="slidingmenu_offset">60dp</dimen>
    <dimen name="list_padding">10dp</dimen>
    <dimen name="shadow_width">15dp</dimen>

    <integer name="num_cols">1</integer>

</resources>

Образец:

https://www.4shared.com/rar/zOWrvmyu/ViewpagerandSherlock.html

В этом образце отлично работают вьюпейджер и шерлок.

Просто реализуйте этот код в BaseSampleActivity, расширяющем SlidingFragmentActivity, создайте простой SlidingFragment, и он заработает.

Вам нужно расширить класс SlidingMenu. Чтобы также использовать библиотеку ActionBar Sherlock, вы должны выполнить шаги, перечисленные в файле Readme, в частности этот:

Перейдите к SlidingActivities, которые вы планируете использовать, чтобы они расширяли Sherlock__Activity вместо __Activity.

Итак, ваш проект должен расширять SlidingActivity:

public class Waiter extends SlidingActivity {

И вам нужно изменить свою копию библиотеки SlidingMenu, чтобы использовать ABS. Откройте com/slidingmenu/lib/app/SlidingActivity.java и измените:

public class SlidingActivity extends Activity implements SlidingActivityBase {

to:

public class SlidingActivity extends SherlockActivity implements SlidingActivityBase {
//             Add "Sherlock" here:  ^^^^^^^^

(Повторите этот шаг для любых других действий SlidingMenu, которые вы хотите использовать.)

person Marckaraujo    schedule 05.02.2013
comment
У меня нет SlidingFragment? Просто SlidingFragmentActivity, но это не подходит для метода замены... - person mkl; 05.02.2013
comment
SlindingFragment — это пользовательский фрагмент, это содержимое SlidingMenu, просто создайте список массивов и посмотрите, работает ли он для вас. - person Marckaraujo; 05.02.2013
comment
Только что сделал примерный список, но если я попытаюсь вызвать getSlidingMenu(), я получу StackOverflowError?! Есть идеи? - person mkl; 05.02.2013
comment
Где вы используете getSlidingMenu()? - person Marckaraujo; 05.02.2013
comment
Меню SlidingMenu = getSlidingMenu(); вместо нового SlidingMenu(это); - person mkl; 05.02.2013
comment
ваш основной класс должен расширять SlidingFragmentActivity. - person Marckaraujo; 05.02.2013
comment
Человек, которого ты должен понять сейчас. - person Marckaraujo; 06.02.2013
comment
Спасибо, я исправил это с помощью вашего источника ... Но я понятия не имею, почему это не сработало в моем проекте ... странное дерьмо :/ - person mkl; 20.02.2013

Этот ответ не нужен, поэтому я отредактировал, чтобы сосредоточиться на другом!

person mkl    schedule 06.02.2013