Android中导航抽屉底部右侧图标

3
我已经在我的应用中使用图标调整了导航抽屉,如图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);
}

任何想法吗? 提前感谢!
1个回答

2

使用BottomDrawerToggle。 解决方案非常简单:

  1. Added ImageView to the android.R.id.content FrameLayout with gravity BOTTOM

  2. Made ImageView half visible by setting right/left margin to negative value of the half of it's drawable width.

  3. Resolved internal resource action_bar_icon_vertical_padding and used it as bottom padding of the image view

    int id = Resources.getSystem().getIdentifier("action_bar_icon_vertical_padding", "dimen", "android");
    float padding = mActivity.getResources().getDimension(id);
    
  4. Created SlidingDrawable and calculated how to dynamically hide the the drawable as the drawer slides in/out in draw(Canvas canvas) method. Drawable is hid by clipping the Rect with drawer's amount of visible pixels.

    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();
    }
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接