Android 如何以编程方式显示和隐藏一项活动的操作栏

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/22891440/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 06:31:46  来源:igfitidea点击:

how to programmatically show and hide action bar on one activity

android

提问by jovs

i got this one activity wherein i need to hide actionbar on the login interface then once login it will show the action bar.i got one activity only. if i put getActionBar on the main activity it gives me error.

我得到了一项活动,其中我需要在登录界面上隐藏操作栏,然后一旦登录,它将显示操作栏。我只有一项活动。如果我将 getActionBar 放在主要活动上,它会给我错误。

heres the code:

继承人的代码:

@SuppressLint("NewApi")
public class MainActivity extends Activity {


ViewPager viewPager;
PagerAdapter adapter;
ProgressDialog pDialog;
ImageView imgLogo;
Menu menu1;

ImageView header;
ImageView footer;


int[] bookCover = new int[] { 

                    R.drawable.image1, 
                    R.drawable.image2,
                    R.drawable.image3,

                    };


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

    imgLogo = (ImageView)findViewById(R.id.logo);
    share = (ImageView) findViewById(R.id.share);

    // Locate the ViewPager in viewpager_main.xml
    viewPager = (ViewPager) findViewById(R.id.pager);
    // Pass results to ViewPagerAdapter Class
    adapter = new ViewPagerAdapter(this, bookCover);
    // Binds the Adapter to the ViewPager
    viewPager.setAdapter(adapter);

    final OnPageChangeListener pageChangeListener = new ViewPager.SimpleOnPageChangeListener() {

        @SuppressLint("NewApi")
        @Override
        public void onPageSelected(int position) {

            final int pos = position;
            share.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                    switch(pos) {
                    case 0:

                        break;
                    case 1: 

                        break;
                    case 2:

                        break;                                              
                    case 3:

                        break;                                              

                    }

                }
            });
         // When changing pages, reset the action bar actions since they are dependent
         // on which page is currently active. An alternative approach is to have each
         // fragment expose actions itself (rather than the activity exposing actions),
         // but for simplicity, the activity provides the actions in this sample.           
        invalidateOptionsMenu();

        }

    };      
    viewPager.setOnPageChangeListener(pageChangeListener);
    pageChangeListener.onPageSelected(0);


    facebook_connect = (Button) findViewById(R.id.facebook_login);
    facebook_connect.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            if (isFacebookConnected()) {
                disConnectFacebook();
            } else {
                connectFacebook();
            }

        }
    });


    // Shared Preferences
    mSharedPreferences = getApplicationContext().getSharedPreferences("MyPref", 0);

}

 @SuppressLint({ "InlinedApi", "NewApi" })
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        this.menu1 = menu;

        super.onCreateOptionsMenu(menu);
        getMenuInflater().inflate(R.menu.main, menu);

        menu.findItem(R.id.action_previous).setEnabled(viewPager.getCurrentItem() > 0);

        // Add either a "next" or "finish" button to the action bar, depending on which page
        // is currently selected.
        MenuItem item = menu.add(Menu.NONE, R.id.action_next, Menu.NONE,(viewPager.getCurrentItem() == adapter.getCount() - 1)
                        ? R.string.action_finish
                        : R.string.action_next);

        item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

        return true;

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int itemId = item.getItemId();
        if (itemId == R.id.action_previous) {
            // Go to the previous step in the wizard. If there is no previous step,
            // setCurrentItem will do nothing.
            viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);
            return true;
        } else if (itemId == R.id.action_next) {
            // Advance to the next step0.0 in the wizard. If there is no next step, setCurrentItem
            // will do nothing.
            viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
            return true;
        }

        return super.onOptionsItemSelected(item);
    }


private Session.StatusCallback statusCallback = new FBSessionStatus();

public void setupFacebookConnect(Bundle savedInstanceState) {
    Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);

    Session session = Session.getActiveSession();
    if (session == null) {
        if (savedInstanceState != null) {
            session = Session.restoreSession(this, null, statusCallback,
                    savedInstanceState);
        }
        if (session == null) {
            session = new Session(this);
        }
        Session.setActiveSession(session);
        if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
            session.openForRead(new Session.OpenRequest(this)
                    .setCallback(statusCallback));
        }
    }
}

public boolean isFacebookConnected() {
    Session session = Session.getActiveSession();
    return (session.isOpened()) ? true  : false;

}

public void connectFacebook() {
    Session session = Session.getActiveSession();
    if (!session.isOpened() && !session.isClosed()) {
        getActionBar().show();
        session.openForRead(new Session.OpenRequest(this)
                .setCallback(statusCallback));       
    } else {
    Session.openActiveSession(this, true, statusCallback);

    }
}

@Override
public void onStart() {
    super.onStart();
    Session.getActiveSession().addCallback(statusCallback);
}

@Override
public void onStop() {
    super.onStop();
    Session.getActiveSession().removeCallback(statusCallback);
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    Session session = Session.getActiveSession();
    Session.saveSession(session, outState);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(this, requestCode,
            resultCode, data);
}

public class FBSessionStatus implements Session.StatusCallback {
     @Override
        public void call(Session session, SessionState state, Exception exception) {
            onSessionStateChange(session, state, exception);
        }
}

public void disConnectFacebook() {
    Session session = Session.getActiveSession();
    if (!session.isClosed()) {
        session.closeAndClearTokenInformation();
        viewPager.setVisibility(View.INVISIBLE);
        MenuItem item1 = menu1.findItem(R.id.action_next);
        item1.setVisible(false);
        MenuItem item2 = menu1.findItem(R.id.action_previous);
        item2.setVisible(false);



        imgLogo.setVisibility(View.VISIBLE);
        //btnLoginTwitter.setVisibility(View.VISIBLE);

        share.setVisibility(View.INVISIBLE);

    }

}

private void onSessionStateChange(Session session, SessionState state, Exception exception) {
        // Check if the user is authenticated and
        // a deep link needs to be handled.
        if (state.isOpened()) {

            MenuItem item1 = menu1.findItem(R.id.action_next);
            item1.setVisible(true);
            MenuItem item2 = menu1.findItem(R.id.action_previous);
            item2.setVisible(true);
            //getActionBar().show();

            share.setVisibility(View.VISIBLE);

            //btnLoginTwitter.setVisibility(View.INVISIBLE);
            //btnShare.setVisibility(View.VISIBLE);     

            viewPager.setVisibility(View.VISIBLE);

            imgLogo.setVisibility(View.INVISIBLE);



        } 
    }

public void shareImage(String name, String caption, String desc, String link, String picture ) {

    Bundle params = new Bundle();
    params.putString("name", name);
    params.putString("caption", caption);
    params.putString("description", desc);
    params.putString("link", link);
    //params.putString("picture", "https://www.facebook.com/photo.php?fbid=10203610233686079&set=a.10203610230766006.1073741829.1523023247&type=1&theater");
    params.putString("picture", picture);

    WebDialog feedDialog = (
        new WebDialog.FeedDialogBuilder(MainActivity.this,
            Session.getActiveSession(),
            params))
        .setOnCompleteListener(new OnCompleteListener() {

            @Override
            public void onComplete(Bundle values,
                FacebookException error) {
                if (error == null) {
                    // When the story is posted, echo the success
                    // and the post Id.
                    final String postId = values.getString("post_id");
                    if (postId != null) {
                        Toast.makeText(MainActivity.this,
                            "Successfuly posted!",
                            Toast.LENGTH_SHORT).show();
                    } else {
                        // User clicked the Cancel button
                        Toast.makeText(MainActivity.this, 
                            "Publish cancelled", 
                            Toast.LENGTH_SHORT).show();
                    }
                } else if (error instanceof FacebookOperationCanceledException) {
                    // User clicked the "x" button
                    Toast.makeText(MainActivity.this, 
                        "Publish cancelled", 
                        Toast.LENGTH_SHORT).show();
                } else {
                    // Generic, ex: network error
                    Toast.makeText(MainActivity.this,
                        "Error posting story", 
                        Toast.LENGTH_SHORT).show();
                }
            }



        })
        .build();
        feedDialog.show();

    }

    @SuppressWarnings("unused")
    private boolean isSubsetOf(Collection<String> subset, Collection<String> superset) {
        for (String string : subset) {
            if (!superset.contains(string)) {
                return false;
            }
        }
        return true;
     }





}

回答by prat3ik-patel

For class extending Activity:

对于类扩展Activity

getActionBar().hide();
getActionBar().show();

For class extending AppCompatActivity:

对于扩展AppCompatActivity 的类:

getSupportActionBar().hide();
getSupportActionBar().show();

回答by agamov

Very simple.

很简单。

getActionbar().hide();
getActionbar().show();

回答by IntelliJ Amiya

You can hide/Showthe status bar on Android 4.1 (API level 16) and higher by using hide()/show()functionality

您可以hide/Show使用hide()/show()功能在 Android 4.1(API 级别 16)及更高版本上显示状态栏

     // Hide the status bar.
    ActionBar actionBar = getActionBar();
    actionBar.hide();

   // Show the status bar.
    actionBar.show();

For more details you can visit here https://developer.android.com/training/system-ui/status.html

有关更多详细信息,您可以访问这里https://developer.android.com/training/system-ui/status.html

http://developer.android.com/guide/topics/ui/actionbar.html

http://developer.android.com/guide/topics/ui/actionbar.html

回答by Null Pointer Exception

Change your Theme from the manifest file for the desire Activity...

从清单文件中更改您的主题,以获得所需的活动...

 Theme.AppCompat.NoActionBar 
    or 
 Theme.AppCompat.Light.NoActionBar

Programmatically you can Invisible your Toolbar by this line of codes

以编程方式,您可以通过这行代码隐藏您的工具栏

if you extend your activity by Activity class then use below line of code to show or hide the Toolbar

如果您通过 Activity 类扩展您的活动,则使用下面的代码行来显示或隐藏工具栏

getActionBar().hide();
getActionBar().show();

and if you extend your activty from AppCompact Activity then use

如果您从 AppCompact Activity 扩展您的活动,则使用

For class extending Activity :

对于类扩展 Activity :

getActionBar().hide(); getActionBar().show(); For class extending AppCompatActivity :

getActionBar().hide(); getActionBar().show(); 对于扩展 AppCompatActivity 的类:

getSupportActionBar().hide();
getSupportActionBar().show();

回答by sandalone

The ActionBarusually exists along Fragmentsso from the Activityyou can hide it

ActionBar通常沿着存在Fragments所以从Activity您可以将其隐藏

getActionbar().hide();
getActionbar().show();

and from the Fragmentyou can do it

Fragment你可以做到

getActivity().getActionbar().hide();
getActivity().getActionbar().show();

回答by AnAIDE

you can save it use sharedpreference like below

您可以使用如下所示的共享首选项保存它

public class MainActivity extends Activity 
{
Button btn;

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

    loadActionbar();
    btn=(Button)findViewById(R.id.mainButton1);    
 btn.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View p1)
            {
                if(getActionBar().isShowing()==true){
                    getActionBar().hide();
                    saveActionBar();       
                }
                else{
                    getActionBar().show();
                    saveActionBar();
                }
            }
        })


 public void saveActionBar(){
    SharedPreferences pref=PreferenceManager.getDefaultSharedPreferences(getApplicationContext());     
    SharedPreferences.Editor editor=pref.edit();     
    editor.putBoolean("save",getActionBar().isShowing());   
    editor.apply();
}

public void loadActionbar(){
    SharedPreferences pref=PreferenceManager.getDefaultSharedPreferences(getApplicationContext());     
    boolean i=pref.getBoolean("save",getActionBar().isShowing());
    if(i!=true){
        getActionBar().hide();
    }
    else
        getActionBar().show();

}

回答by scottish.samba

This just worked for me:

这对我有用:

supportActionBar?.hide()