工具栏上的Android后退箭头(AppCompatActivity)

我想在我的应用程序中显示后退箭头按钮,但是当我将其放入我的代码时应用程序崩溃:

getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); 

style.xml

   @color/PrimaryColor @color/PrimaryColorDark @color/PrimaryColor @color/ControlHighlight @android:color/transparent   #000000   #FFFFFF 3dp @style/MyCustomTabTextAppearance   #FFFFFF  

toolbar.xml

  

类(不是片段)

 public class WebViewCanale extends AppCompatActivity { Toolbar toolbar; TextView textView; WebView webView; ProgressBar progressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.webview_canali); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); //Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); //FindViewById webView = (WebView) findViewById(R.id.webview); textView = (TextView) findViewById(R.id.textView); progressBar = (ProgressBar) findViewById(R.id.progressBar); //Impostazioni WebView WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setLoadsImagesAutomatically(true); webView.loadUrl(this.getIntent().getDataString()); webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); webView.getSettings().setAppCacheEnabled(false); //Titolo Toolbar webView.setWebChromeClient(new WebChromeClient() { @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); if (!TextUtils.isEmpty(title)) { WebViewCanale.this.setTitle(title); } } }); } } 

我想知道为什么在SO上没有完整的答案,但最后我自己解决了这个问题:

使用以下代码段在AppCompatActivity工具栏上有后退按钮

  toolbar = (Toolbar) findViewById(R.id.hack_toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //do something you want } }); 

你也可以在Manifest声明一个ParentActivity

添加此主题:

  

在你的活动中:

  Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
  @BindView(R.id.toolbar) Toolbar toolbar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_user_events); ButterKnife.bind(this); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @Override public boolean onSupportNavigateUp() { onBackPressed(); return true; } 

onSupportNavigateUp()只要用户选择在操作栏中的应用程序活动层次结构中向上导航,就会调用此方法。

onBackPressed(); 注意popup碎片堆栈或适当地完成活动。

您需要先设置支持操作栏才能获得它。 所以放置以下代码

 toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); 

在此代码之前

 getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true);