机器人改变导航抽屉面板的宽度编程 [英] Android changing the width of the navigation drawer panel programmatically

查看:153
本文介绍了机器人改变导航抽屉面板的宽度编程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用的抽屉式导航模板presents在Android的工作室。 在我活动的布局我这下code:

 <片段机器人:ID =@ + ID / navigation_drawer
    机器人:layout_width =@扪/ navigation_drawer_width
    机器人:layout_height =match_parent
    机器人:layout_gravity =开始
    机器人:名称=com.smedilepaolo.newsfeed.NavigationDrawer.NavigationDrawerFragment
    工具:布局=@布局/ fragment_navigation_drawer/>
 

我需要的是改变编程面板的宽度。 我认为正确的区域,以改变它是这样的:

  @覆盖
    保护无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_news_feed);

        mNavigationDrawerFragment =(NavigationDrawerFragment)
                。getFragmentManager()findFragmentById(R.id.navigation_drawer);
        mTitle =的getTitle();

....
 

但我不明白怎么才能实现我的目标。

/ *更新* /

抽屉面板的图标不操作栏中显示

  mDrawerListView.setOnItemClickListener(新AdapterView.OnItemClickListener(){
        @覆盖
        公共无效onItemClick(适配器视图<>母公司视图中查看,INT位置,长的id){
            mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);

            mDrawerListView.post(新的Runnable(){
                @覆盖
                公共无效的run(){
                    资源资源= getResources();
                    浮宽度= TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,240,resources.getDisplayMetrics());
                    DrawerLayout.LayoutParams PARAMS =(DrawerLayout.LayoutParams)mDrawerListView.getLayoutParams();
                    params.width =(int)的(宽);
                    mDrawerListView.setLayoutParams(PARAMS);

                }
            });

            选择信息(位置);
        }
    });



    mDrawerListView.post(新的Runnable(){
        @覆盖
        公共无效的run(){
            资源资源= getResources();
            浮宽度= TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,resources.getDisplayMetrics()widthPixels-1,resources.getDisplayMetrics());
            DrawerLayout.LayoutParams PARAMS =(DrawerLayout.LayoutParams)mDrawerListView.getLayoutParams();
            params.width =(int)的(宽);
            mDrawerListView.setLayoutParams(PARAMS);
            mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
            mDrawerLayout.openDrawer(mFragmentContainerView);
        }
    });
 

这就是选择信息的方法

 私人无效选择信息(INT位置){
        mCurrentSelectedPosition =位置;
        如果(mDrawerListView!= NULL){
            mDrawerListView.setItemChecked(位置,真正的);
        }
        如果(mDrawerLayout!= NULL){
            mDrawerLayout.closeDrawer(mFragmentContainerView);
        }

....
 

解决方案

根据在code从导航抽屉模板生成,您可以通过添加这个code到onCreateView改变面板的宽度( )方法在NavigationDrawerFragment。

  mDrawerListView.post(新的Runnable(){
        @覆盖
        公共无效的run(){
            资源资源= getResources();
            浮宽度= TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,100,resources.getDisplayMetrics());
            DrawerLayout.LayoutParams PARAMS =(DrawerLayout.LayoutParams)mDrawerListView.getLayoutParams();
            params.width =(int)的(宽);
            mDrawerListView.setLayoutParams(PARAMS);
        }
    });
 

要在DrawerLayout禁用全景手势:

// NavigationDrawerFragment

 公共无效设置(INT fragmentId,DrawerLayout drawerLayout){
    mDrawerLayout = drawerLayout;
    mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
}
 

要打开/关闭DrawerLayout:

  mDrawerLayout.openDrawer(mDrawerListView);
mDrawerLayout.closeDrawer(mDrawerListView);
 

要prevent抽屉面板的图标消失,变化setOnItemClickListener方法如下:

  mDrawerListView.setOnItemClickListener(新AdapterView.OnItemClickListener(){
        @覆盖
        公共无效onItemClick(适配器视图<>母公司视图中查看,INT位置,长的id){
            选择信息(位置);
        }
});
 

和修改重写onDrawerClose方法如下:

  @覆盖
公共无效onDrawerClosed(查看drawerView){
    super.onDrawerClosed(drawerView);
    如果(!isAdded()){
        返回;
    }

    mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);

    资源资源= getResources();
    浮宽度= TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,240,resources.getDisplayMetrics());
    DrawerLayout.LayoutParams PARAMS =(DrawerLayout.LayoutParams)mDrawerListView.getLayoutParams();
    params.width =(int)的(宽);
    mDrawerListView.setLayoutParams(PARAMS);

    。getActivity()invalidateOptionsMenu();在prepareOptionsMenu //调用()
}
 

I've used the Navigation Drawer template presents in Android Studio. In the layout of my activity I have this following code:

<fragment android:id="@+id/navigation_drawer"
    android:layout_width="@dimen/navigation_drawer_width"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:name="com.smedilepaolo.newsfeed.NavigationDrawer.NavigationDrawerFragment"
    tools:layout="@layout/fragment_navigation_drawer" />

What I need is to change programmatically the width of the panel. I think that the right zone to change it is this:

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

        mNavigationDrawerFragment = (NavigationDrawerFragment)
                getFragmentManager().findFragmentById(R.id.navigation_drawer);
        mTitle = getTitle();

....

But I can't understand how can achieve my target.

/* UPDATE */

The icon of the drawer panel is not showed in the action bar

    mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);

            mDrawerListView.post(new Runnable() {
                @Override
                public void run() {
                    Resources resources = getResources();
                    float width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 240, resources.getDisplayMetrics());
                    DrawerLayout.LayoutParams params = (DrawerLayout.LayoutParams) mDrawerListView.getLayoutParams();
                    params.width = (int) (width);
                    mDrawerListView.setLayoutParams(params);

                }
            });

            selectItem(position);
        }
    });



    mDrawerListView.post(new Runnable() {
        @Override
        public void run() {
            Resources resources = getResources();
            float width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, resources.getDisplayMetrics().widthPixels-1, resources.getDisplayMetrics());
            DrawerLayout.LayoutParams params = (DrawerLayout.LayoutParams) mDrawerListView.getLayoutParams();
            params.width = (int) (width);
            mDrawerListView.setLayoutParams(params);
            mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
            mDrawerLayout.openDrawer(mFragmentContainerView);
        }
    });

That's the selectItem method

    private void selectItem(int position) {
        mCurrentSelectedPosition = position;
        if (mDrawerListView != null) {
            mDrawerListView.setItemChecked(position, true);
        }
        if (mDrawerLayout != null) {
            mDrawerLayout.closeDrawer(mFragmentContainerView);
        }

....

解决方案

Based on the code generated from the Navigation Drawer template, you can change the width of the panel by adding this code to the onCreateView() method in the NavigationDrawerFragment.

 mDrawerListView.post(new Runnable() {
        @Override
        public void run() {
            Resources resources = getResources();
            float width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, resources.getDisplayMetrics());
            DrawerLayout.LayoutParams params = (DrawerLayout.LayoutParams) mDrawerListView.getLayoutParams();
            params.width = (int) (width);
            mDrawerListView.setLayoutParams(params);
        }
    });

To disable pan gestures on DrawerLayout:

//NavigationDrawerFragment

public void setUp(int fragmentId, DrawerLayout drawerLayout) {
    mDrawerLayout = drawerLayout;
    mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
}

To open/close DrawerLayout:

mDrawerLayout.openDrawer(mDrawerListView);
mDrawerLayout.closeDrawer(mDrawerListView);

To prevent the icon of the drawer panel disappears, change setOnItemClickListener method as follow:

mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            selectItem(position);
        }
});

And modify the overridden onDrawerClose method as follow:

@Override
public void onDrawerClosed(View drawerView) {
    super.onDrawerClosed(drawerView);
    if (!isAdded()) {
        return;
    }

    mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);

    Resources resources = getResources();
    float width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 240, resources.getDisplayMetrics());
    DrawerLayout.LayoutParams params = (DrawerLayout.LayoutParams) mDrawerListView.getLayoutParams();
    params.width = (int) (width);
    mDrawerListView.setLayoutParams(params);

    getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
}

这篇关于机器人改变导航抽屉面板的宽度编程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆