【问题标题】:Strange offset behavior on slidingmenu滑动菜单上的奇怪偏移行为
【发布时间】:2013-02-05 16:13:25
【问题描述】:

我正在尝试将 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);

【问题讨论】:

    标签: android actionbarsherlock offset viewpagerindicator slidingmenu


    【解决方案1】:

    我就是这么用的:

    // 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

    这个示例是完美的 viewpager 和 sherlock。

    只需在 BaseSampleActivity 扩展 SlidingFragmentActivity 中实现此代码,创建一个简单的 SlidingFragment 即可。

    您需要扩展一个 SlidingMenu 类。要同时使用 ActionBar Sherlock 库,您必须按照自述文件中列出的步骤进行操作,尤其是以下步骤:

    进入您计划使用的 SlidingActivity,使它们扩展 Sherlock__Activity 而不是 __Activity。

    所以你的项目应该扩展 SlidingActivity:

    public class Waiter extends SlidingActivity {
    

    您需要更改您的 SlidingMenu 库副本以使用 ABS。打开 com/slidingmenu/lib/app/SlidingActivity.java 并更改:

    public class SlidingActivity extends Activity implements SlidingActivityBase {
    

    到:

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

    (对您希望使用的任何其他 SlidingMenu 活动重复此步骤。)

    【讨论】:

    • 我没有SlidingFragment?只是一个 SlidingFragmentActivity 但这不适合替换方法......
    • SlindingFragment 是自定义Fragment,是SlidingMenu 内容,创建一个arraylist 看看是否适合你。
    • 刚刚制作了一个示例列表,但如果我尝试调用 getSlidingMenu() 我得到一个 StackOverflowError?!有什么想法吗?
    • 你在哪里使用 getSlidingMenu()?
    • SlidingMenu 菜单 = getSlidingMenu();而不是 new SlidingMenu(this);
    【解决方案2】:

    这个答案不是必需的,所以我编辑以关注其他答案!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 2012-02-14
      相关资源
      最近更新 更多