【问题标题】:navigation drawer bottom right icon android导航抽屉右下角图标android
【发布时间】:2013-07-26 07:21:52
【问题描述】:

我已经在我的应用程序中调整了带有图标的导航抽屉,如图1所示,看起来还可以。 我想像谷歌地图一样在菜单右下角显示图标。

代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map);
    setupSlideMenu();
}

private void setupSlideMenu() {
    mPlanetTitles = getResources().getStringArray(R.array.planets_array);
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout1);
    addIcon();
    mDrawerList = (ListView) findViewById(R.id.left_drawer1);

    // Set the adapter for the list view
    mDrawerList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mPlanetTitles));
    // Set the list's click listener
    mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
    log("setupSlideMenu", false);
}

private void addIcon() {
    mDrawerToggle = new ActionBarDrawerToggle(
    this,                   /* host Activity */
    mDrawerLayout,          /* DrawerLayout object */
    R.drawable.ic_drawer,   /* nav drawer icon to replace 'Up' caret */
    R.string.drawer_open,   /* "open drawer" description */
    R.string.drawer_close   /* "close drawer" description */
    ) {
        /** Called when a drawer has settled in a completely closed state. */
        public void onDrawerClosed(View view) {
            getActionBar().setTitle(mTitle);
        }

        /** Called when a drawer has settled in a completely open state. */
        public void onDrawerOpened(View drawerView) {
            getActionBar().setTitle(mDrawerTitle);
        }
    };
    // Set the drawer toggle as the DrawerListener
    mDrawerLayout.setDrawerListener(mDrawerToggle);
    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setHomeButtonEnabled(true);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Pass the event to ActionBarDrawerToggle, if it returns true, then it has handled the app icon touch event
    if (mDrawerToggle.onOptionsItemSelected(item)) {
      return true;
    }
    // Handle your other action bar items...
    return super.onOptionsItemSelected(item);
}

有什么想法吗? 提前致谢!

【问题讨论】:

    标签: android navigation icons drawer


    【解决方案1】:

    使用BottomDrawerToggle。 解决方案很简单:

    1. ImageView 添加到带有重力BOTTOM 的android.R.id.content FrameLayout

    2. 通过将右侧/左侧边距设置为可绘制宽度的一半的负值,使 ImageView 一半可见。

    3. 已解决内部资源action_bar_icon_vertical_padding 并将其用作图像视图的底部填充

      int id = Resources.getSystem().getIdentifier("action_bar_icon_vertical_padding", "dimen", "android");
      float padding = mActivity.getResources().getDimension(id);
      
    4. 创建SlidingDrawable 并计算如何在draw(Canvas canvas) 方法中在抽屉滑入/滑出时动态隐藏drawable。通过使用抽屉的可见像素数量剪裁Rect 来隐藏可绘制对象。

      public void draw(Canvas canvas)
      {
        float pixelsVisible = mOffset * mMinusShadow;
        int target = (int) ((mWrapped.getIntrinsicWidth()/2)+pixelsVisible);
        if(mGravity == GravityCompat.START || mGravity == Gravity.LEFT)
            canvas.clipRect(target, 0, mWrapped.getIntrinsicWidth(), mWrapped.getIntrinsicHeight());
        else
            canvas.clipRect(0, 0, mWrapped.getIntrinsicWidth() - target,mWrapped.getIntrinsicHeight());       
        this.mWrapped.draw(canvas);
        canvas.restore();
      }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 2017-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      • 2016-11-01
      相关资源
      最近更新 更多