簡體   English   中英

ActionBar在Android中未顯示標題

[英]ActionBar is not showing Title in Android

我想實現“左側和右側滑塊”菜單,因此我已在NavigationDrawerSlider設置了右側滑塊,默認情況下已具有“左側滑塊”。

我為此使用ActionBarSherLock來支持來自Api 8的應用程序。滑塊工作正常,但問題是ActionBar沒有顯示標題。

請幫我解決這個問題。 還有一件事,當我單擊ImageView時,它還會觸發ActionBarDrawerToggle 那么,如何防止這種情況呢?

我的代碼:

public class MainActivity extends SherlockFragmentActivity {

    private DrawerLayout mDrawerLayout;

    private ListView mDrawerList_Left;
    private ListView mDrawerList_Right;

    private ActionBarDrawerToggle mDrawerToggle;
    private ActionBar actionBar_Right;

    private ArrayList<NavDrawerItem> navDrawerItems_Left;
    private ArrayList<NavDrawerItem> navDrawerItems_Right;

    private CharSequence mDrawerTitle_Left;
    private CharSequence mTitle_Left;
    private CharSequence mDrawerTitle_Right;
    private CharSequence mTitle_Right;

    private String[] mFragmentTitles_Left;
    private String[] mFragmentTitles_Right;

    private TypedArray navMenuIcons_Left;
    private TypedArray navMenuIcons_Right;

    private NavDrawerListAdapter adapter_Left;
    private NavDrawerListAdapter adapter_Right;

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

        mTitle_Left = mDrawerTitle_Left = getTitle();

        mFragmentTitles_Left = getResources().getStringArray(
                R.array.nav_drawer_items);
        mFragmentTitles_Right = getResources().getStringArray(
                R.array.nav_drawer_items_right);

        navMenuIcons_Left = getResources().obtainTypedArray(
                R.array.nav_drawer_icons);
        navMenuIcons_Right = getResources().obtainTypedArray(
                R.array.nav_drawer_icons_right);

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList_Left = (ListView) findViewById(R.id.list_left_slidermenu);
        mDrawerList_Right = (ListView) findViewById(R.id.list_right_slidermenu);

        actionBar_Right = getSupportActionBar();
        actionBar_Right.setCustomView(R.layout.right_menu);
        actionBar_Right.setDisplayShowTitleEnabled(true);
        actionBar_Right.setDisplayShowCustomEnabled(true);

        navDrawerItems_Left = new ArrayList<NavDrawerItem>();
        navDrawerItems_Right = new ArrayList<NavDrawerItem>();

        // Left Side Menus...
        // Home...
        navDrawerItems_Left.add(new NavDrawerItem(mFragmentTitles_Left[0],
                navMenuIcons_Left.getResourceId(0, -1)));

        navMenuIcons_Left.recycle();

        // Right Side Menus...
        // Edit Profile...
        navDrawerItems_Right.add(new NavDrawerItem(mFragmentTitles_Right[0],
                navMenuIcons_Right.getResourceId(0, -1)));

        // Change Password...
        navDrawerItems_Right.add(new NavDrawerItem(mFragmentTitles_Right[1],
                navMenuIcons_Right.getResourceId(1, -1)));

        navMenuIcons_Right.recycle();

        mDrawerList_Left
                .setOnItemClickListener(new DrawerItemClickListener_Left());
        mDrawerList_Right
                .setOnItemClickListener(new DrawerItemClickListener_Right());

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);

        adapter_Left = new NavDrawerListAdapter(getApplicationContext(),
                navDrawerItems_Left);
        mDrawerList_Left.setAdapter(adapter_Left);

        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                R.drawable.ic_drawer, R.string.app_name, R.string.app_name);

        adapter_Right = new NavDrawerListAdapter(getApplicationContext(),
                navDrawerItems_Right);
        mDrawerList_Right.setAdapter(adapter_Right);

        ImageView imgRight = (ImageView) findViewById(R.id.imgRightMenu);
        imgRight.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub

                if (mDrawerLayout.isDrawerOpen(mDrawerList_Right)) {
                    mDrawerLayout.closeDrawer(mDrawerList_Right);

                    setTitle(mTitle_Right);
                } else {
                    mDrawerLayout.openDrawer(mDrawerList_Right);
                    mDrawerLayout.closeDrawer(mDrawerList_Left);

                    setTitle(mDrawerTitle_Right);
                }
            }
        });

        mDrawerLayout.setDrawerListener(mDrawerToggle);
        if (savedInstanceState == null) {
            selectItem_Left(0);
        }
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        // boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
        return super.onPrepareOptionsMenu(menu);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        // getSupportMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            if (mDrawerLayout.isDrawerOpen(mDrawerList_Left)) {
                mDrawerLayout.closeDrawer(mDrawerList_Left);

                setTitle(mTitle_Left);
            } else {
                mDrawerLayout.openDrawer(mDrawerList_Left);
                mDrawerLayout.closeDrawer(mDrawerList_Right);

                setTitle(mDrawerTitle_Left);
            }

            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

    private class DrawerItemClickListener_Left implements
            ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position,
                long id) {
            selectItem_Left(position);
        }
    }

    private void selectItem_Left(int position) {
        Fragment newFragment = new Home();
        FragmentManager fm = getSupportFragmentManager();
        switch (position) {
        case 0:
            newFragment = new Home();
            break;
        }

        fm.beginTransaction().replace(R.id.frame_container, newFragment)
                .commit();

        mDrawerList_Left.setItemChecked(position, true);
        setTitle(mFragmentTitles_Left[position]);
        mDrawerLayout.closeDrawer(mDrawerList_Left);
    }

    private class DrawerItemClickListener_Right implements
            ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position,
                long id) {
            selectItem_Right(position);
        }
    }

    private void selectItem_Right(int position) {
        Fragment newFragment = new EditProfile();
        FragmentManager fm = getSupportFragmentManager();
        switch (position) {
        case 0:
            newFragment = new EditProfile();
            break;
        case 1:
            newFragment = new ChangePassword();
            break;
        }

        fm.beginTransaction().replace(R.id.frame_container, newFragment)
                .commit();

        mDrawerList_Right.setItemChecked(position, true);
        setTitle(mFragmentTitles_Right[position]);
        mDrawerLayout.closeDrawer(mDrawerList_Right);
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        mDrawerToggle.syncState();
    }

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

我發現它沒有顯示標題是因為

actionBar_Right = getSupportActionBar();
actionBar_Right.setCustomView(R.layout.right_menu);
actionBar_Right.setDisplayShowTitleEnabled(true);
actionBar_Right.setDisplayShowCustomEnabled(true);



為此該怎么做?

為了在ActionBar中顯示標題,必須重寫setTitle:

@Override
public void setTitle(CharSequence title)
{
    this.title = title;
    getSupportActionBar().setTitle(title);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM