📜  如何在Android中添加和自定义操作栏的后退按钮?

📅  最后修改于: 2021-05-10 17:04:24             🧑  作者: Mango

如果某个活动存在操作栏(有时称为应用程序栏),它将位于活动内容区域的顶部,通常直接在状态栏的下方。它是一个菜单栏,贯穿于Android活动屏幕的顶部。 Android ActionBar可以包含菜单项,这些菜单项在用户单击“菜单”按钮时变为可见。通常,ActionBar由以下四个组件组成:

  • 应用程序图标:应用程序品牌徽标或图标将显示在此处
  • 视图控件:一个专用的空间,用于显示应用程序标题。还提供了通过添加微调器或选项卡式导航在视图之间切换的选项
  • 动作按钮:可以在此处添加应用的主要动作
  • 动作溢出:所有不重要的动作都将显示为菜单

下面是一个示例图像,用于显示操作栏/工具栏/应用栏在android设备上的位置。

动作栏/工具栏/应用栏

操作栏是活动内部的主要工具栏,可用于显示活动标题和其他交互式项目。最常用的项目之一是“后退导航”按钮。后退按钮用于从用户先前访问的屏幕向后移动。大多数Android设备都有专用的后退按钮,操作栏上的后退按钮仍然可以增强用户体验。

在操作栏中添加“后退”按钮

要在Android Studio中创建新项目,请参阅如何在Android Studio中创建/启动新项目。无需更改activity_main.xml文件中的任何内容。我们唯一需要处理的文件是使用MainActivity文件。

  • 在Java / kotlin文件中创建操作栏变量并调用函数getSupportActionBar()
  • 使用actionBar.setDisplayHomeAsUpEnabled(true)显示后退按钮,这将启用后退按钮。
  • onOptionsItemSelected处定制back事件。这将使按下按钮的后退函数生效。请参阅以下代码以供参考。我们已经为MainActivity提供了Java和kotlin代码
Java
import android.os.Bundle;
import android.view.MenuItem;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
  
public class MainActivity extends AppCompatActivity {
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // calling the action bar
        ActionBar actionBar = getSupportActionBar();
  
        // showing the back button in action bar
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
  
    // this event will enable the back
    // function to the button on press
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                this.finish();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
}


Kotlin
import android.os.Bundle
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
          
          // calling the action bar
        var actionBar = getSupportActionBar()
          
          // showing the back button in action bar
        if (actionBar != null) {
            actionBar.setDisplayHomeAsUpEnabled(true)
        }
    }
      
    // this event will enable the back 
      // function to the button on press
    override fun onContextItemSelected(item: MenuItem): Boolean {
        when (item.itemId) {
            android.R.id.home -> {
                finish()
                return true
            }
        }
        return super.onContextItemSelected(item)
    }
}


Java
import android.os.Bundle;
import android.view.MenuItem;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
  
public class MainActivity extends AppCompatActivity {
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // calling the action bar
        ActionBar actionBar = getSupportActionBar();
  
        // Customize the back button
        actionBar.setHomeAsUpIndicator(R.drawable.mybutton);
  
        // showing the back button in action bar
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
  
    // this event will enable the back
    // function to the button on press
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                this.finish();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
}


Kotlin
import android.os.Bundle
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
          
        // calling the action bar
        var actionBar = getSupportActionBar()
          
        if (actionBar != null) {
            
              // Customize the back button
            actionBar.setHomeAsUpIndicator(R.drawable.mybutton);
            
              // showing the back button in action bar
            actionBar.setDisplayHomeAsUpEnabled(true);
        }
    }
      
    // this event will enable the back 
      // function to the button on press
    override fun onContextItemSelected(item: MenuItem): Boolean {
        when (item.itemId) {
            android.R.id.home -> {
                finish()
                return true
            }
        }
        return super.onContextItemSelected(item)
    }
}


输出:

自定义操作栏中的后退按钮

通过使用getSupportActionBar()库并使用Java/ kotlin文件中的setHomeAsUpIndicator设置可绘制文件,我们可以轻松地自定义“后退按钮”。

完整的代码如下。

Java

import android.os.Bundle;
import android.view.MenuItem;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
  
public class MainActivity extends AppCompatActivity {
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // calling the action bar
        ActionBar actionBar = getSupportActionBar();
  
        // Customize the back button
        actionBar.setHomeAsUpIndicator(R.drawable.mybutton);
  
        // showing the back button in action bar
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
  
    // this event will enable the back
    // function to the button on press
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                this.finish();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

科特林

import android.os.Bundle
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
          
        // calling the action bar
        var actionBar = getSupportActionBar()
          
        if (actionBar != null) {
            
              // Customize the back button
            actionBar.setHomeAsUpIndicator(R.drawable.mybutton);
            
              // showing the back button in action bar
            actionBar.setDisplayHomeAsUpEnabled(true);
        }
    }
      
    // this event will enable the back 
      // function to the button on press
    override fun onContextItemSelected(item: MenuItem): Boolean {
        when (item.itemId) {
            android.R.id.home -> {
                finish()
                return true
            }
        }
        return super.onContextItemSelected(item)
    }
}

输出: