📌  相关文章
📜  Android中的ActionBar示例

📅  最后修改于: 2021-05-10 16:42:30             🧑  作者: Mango

在Android应用程序中, ActionBar是活动屏幕顶部的元素。这是移动应用程序的一项显着功能,在其所有活动中都具有一致的状态。它为应用程序提供了视觉结构,并包含一些用户常用的元素。 Google于2013年发布了Android 3.0(API 11) ,从而推出了Android ActionBar。在此之前,最重要的视觉元素的名称是AppBar 。 AppBar仅包含应用程序或当前活动的名称。它对用户不是很有用,开发人员也可以选择自定义它。

Google宣布了一个支持库以及ActionBar的引入。该库是AppCompat的一部分,其目的是为较旧版本的Android提供向后兼容性并支持选项卡式界面。所有使用Android(Theme.AppCompat.Light.DarkActionBar)提供的默认主题的应用程序默认都包含一个ActionBar。但是,开发人员可以根据需要以几种方式对其进行自定义。 ActionBar中包含的组件是:

  • 应用程序图标:显示应用程序的品牌徽标/图标。
  • 查看控件:显示应用程序或当前活动名称的部分。开发人员还可以包括微调器或选项卡式导航,以在视图之间进行切换。
  • 操作按钮:包含用户可能经常需要的一些重要的应用程序操作/元素。
  • 动作溢出:包括其他将作为菜单显示的动作。

设计自定义ActionBar

下面的示例演示为应用程序的MainActivity创建自定义ActionBar所涉及的步骤。涵盖了视觉元素的所有重要方面,例如图标,标题,字幕,操作按钮和溢出菜单。

步骤1:默认ActionBar

如前所述,每个Android应用默认都包含一个ActionBar。该预先包含的ActionBar显示标题,用于由AncdroidManifest.xml文件管理的当前活动。应用程序标题的字符串值由应用程序节点下的@ 字符串/ app_name资源提供。

输出:

步骤2:创建新目录和ActionBar的设计项

要对ActionBar的元素进行编码,请在应用程序项目文件的resource文件夹中创建一个新目录。右键单击res文件夹,然后选择New-> Directory 。将名称“ menu”命名为新目录。

此外,通过右键单击菜单目录来创建新的菜单资源文件。在为主活动创建ActionBar时,在菜单资源文件中键入名称“ main” 。这样,必须在菜单目录下创建一个名为“ main.xml”的新文件。在此文件中,可以声明将显示为ActionBar的操作按钮的项目。

对于每个菜单项,需要配置以下属性:

  • android:title:其值包含菜单项的标题,当用户单击该菜单项并将其保留在应用程序中时,该菜单项将显示。
  • android:id:菜单项的唯一ID,将用于在整个应用程序文件中的任何位置访问菜单项。
  • android:orderInCategory:此属性的值指定项目在ActionBar中的位置。有两种方法可以定义不同菜单项的位置。第一个是为所有项目提供相同的此属性值,并将按照代码中声明的相同顺序定义位置。第二种方法是为所有项目提供不同的数值,然后这些项目将根据此属性值的升序进行自身定位。
  • app:showAsAction:此属性定义项目在操作栏中的显示方式。有四种可能的标志可供选择:
    • 一种。始终:始终在ActionBar中显示该项目。
    • b。 ifRoom:如果有可用空间,则保留该项目。
    • C。从不:使用此标志,该项目将不会在ActionBar中显示为图标,而是会出现在溢出菜单中。
    • d。 withText:要将一个项目既表示为图标又表示标题,可以在此标志后附加always或ifRoom标志(always | withText或ifRoom | withText)。
  • android:icon:通过此属性在可绘制目录中引用了项目的图标。

ActionBar项的图标

为了向项目提供图标,请右键单击res文件夹,选择new,然后选择Image Asset 。将出现一个对话框,选择“图标类型”作为“操作栏”和“选项卡图标” 。选择资产类型为“剪贴画”,然后从剪贴画集合中选择图像。为图标提供所需的名称。单击下一步,然后单击完成。现在,此图标将被加载到res文件夹的drawable目录中。开发人员为这些图标提供的名称现在将用于引用该项目的图标资源。

以下是在ActionBar中放置搜索图标,刷新图标和溢出菜单的代码。

XML


  
    
    
  
    
    
  
    
    


Java
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
  
public class MainActivity extends AppCompatActivity {
  
    @Override
    protected void onCreate( Bundle savedInstanceState ) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // calling this activity's function to
        // use ActionBar utility methods
        ActionBar actionBar = getSupportActionBar();
  
        // providing title for the ActionBar
        actionBar.setTitle("  GfG | Action Bar");
  
        // providing subtitle for the ActionBar
        actionBar.setSubtitle("   Design a custom Action Bar");
  
        // adding icon in the ActionBar
        actionBar.setIcon(R.drawable.app_logo);
  
        // methods to display the icon in the ActionBar
        actionBar.setDisplayUseLogoEnabled(true);
        actionBar.setDisplayShowHomeEnabled(true);
  
    }
  
    // method to inflate the options menu when
    // the user opens the menu for the first time
    @Override
    public boolean onCreateOptionsMenu( Menu menu ) {
  
        getMenuInflater().inflate(R.menu.main, menu);
        return super.onCreateOptionsMenu(menu);
    }
  
    // methods to control the operations that will
    // happen when user clicks on the action buttons
    @Override
    public boolean onOptionsItemSelected( @NonNull MenuItem item ) {
  
        switch (item.getItemId()){
            case R.id.search:
                Toast.makeText(this, "Search Clicked", Toast.LENGTH_SHORT).show();
                break;
            case R.id.refresh:
                Toast.makeText(this, "Refresh Clicked", Toast.LENGTH_SHORT).show();
                break;
            case R.id.copy:
                Toast.makeText(this, "Copy Clicked", Toast.LENGTH_SHORT).show();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}


Kotlin
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        // calling this activity's function to
        // use ActionBar utility methods
        val actionBar = supportActionBar
  
        // providing title for the ActionBar
        actionBar!!.title = "  GfG | Action Bar"
  
        // providing subtitle for the ActionBar
        actionBar.subtitle = "   Design a custom Action Bar"
  
        // adding icon in the ActionBar
        actionBar.setIcon(R.drawable.app_logo)
  
        // methods to display the icon in the ActionBar
        actionBar.setDisplayUseLogoEnabled(true)
        actionBar.setDisplayShowHomeEnabled(true)
    }
  
    // method to inflate the options menu when
    // the user opens the menu for the first time
    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        menuInflater.inflate(R.menu.main, menu)
        return super.onCreateOptionsMenu(menu)
    }
  
    // methods to control the operations that will
    // happen when user clicks on the action buttons
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when (item.itemId) {
            R.id.search -> Toast.makeText(this, "Search Clicked", Toast.LENGTH_SHORT).show()
            R.id.refresh -> Toast.makeText(this, "Refresh Clicked", Toast.LENGTH_SHORT).show()
            R.id.copy -> Toast.makeText(this, "Copy Clicked", Toast.LENGTH_SHORT).show()
        }
        return super.onOptionsItemSelected(item)
    }
}


XML



  


XML


  
    
    
    
  


输出:

步骤3:使用活动文件

ActionBar的项目旨在执行一些操作。项目的那些操作/动作在为其设计了ActionBar的那个Activity文件中声明。在此示例中,目标活动是MainActivity文件。此外,该文件中还定义了自定义标题,副标题和应用程序徽标。下面是设计所有提到的项目并在用户单击ActionBar的项目时显示敬酒消息的正确代码。

Java

import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
  
public class MainActivity extends AppCompatActivity {
  
    @Override
    protected void onCreate( Bundle savedInstanceState ) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // calling this activity's function to
        // use ActionBar utility methods
        ActionBar actionBar = getSupportActionBar();
  
        // providing title for the ActionBar
        actionBar.setTitle("  GfG | Action Bar");
  
        // providing subtitle for the ActionBar
        actionBar.setSubtitle("   Design a custom Action Bar");
  
        // adding icon in the ActionBar
        actionBar.setIcon(R.drawable.app_logo);
  
        // methods to display the icon in the ActionBar
        actionBar.setDisplayUseLogoEnabled(true);
        actionBar.setDisplayShowHomeEnabled(true);
  
    }
  
    // method to inflate the options menu when
    // the user opens the menu for the first time
    @Override
    public boolean onCreateOptionsMenu( Menu menu ) {
  
        getMenuInflater().inflate(R.menu.main, menu);
        return super.onCreateOptionsMenu(menu);
    }
  
    // methods to control the operations that will
    // happen when user clicks on the action buttons
    @Override
    public boolean onOptionsItemSelected( @NonNull MenuItem item ) {
  
        switch (item.getItemId()){
            case R.id.search:
                Toast.makeText(this, "Search Clicked", Toast.LENGTH_SHORT).show();
                break;
            case R.id.refresh:
                Toast.makeText(this, "Refresh Clicked", Toast.LENGTH_SHORT).show();
                break;
            case R.id.copy:
                Toast.makeText(this, "Copy Clicked", Toast.LENGTH_SHORT).show();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}

科特林

import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        // calling this activity's function to
        // use ActionBar utility methods
        val actionBar = supportActionBar
  
        // providing title for the ActionBar
        actionBar!!.title = "  GfG | Action Bar"
  
        // providing subtitle for the ActionBar
        actionBar.subtitle = "   Design a custom Action Bar"
  
        // adding icon in the ActionBar
        actionBar.setIcon(R.drawable.app_logo)
  
        // methods to display the icon in the ActionBar
        actionBar.setDisplayUseLogoEnabled(true)
        actionBar.setDisplayShowHomeEnabled(true)
    }
  
    // method to inflate the options menu when
    // the user opens the menu for the first time
    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        menuInflater.inflate(R.menu.main, menu)
        return super.onCreateOptionsMenu(menu)
    }
  
    // methods to control the operations that will
    // happen when user clicks on the action buttons
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when (item.itemId) {
            R.id.search -> Toast.makeText(this, "Search Clicked", Toast.LENGTH_SHORT).show()
            R.id.refresh -> Toast.makeText(this, "Refresh Clicked", Toast.LENGTH_SHORT).show()
            R.id.copy -> Toast.makeText(this, "Copy Clicked", Toast.LENGTH_SHORT).show()
        }
        return super.onOptionsItemSelected(item)
    }
}

输出:

步骤4:ActionBar的颜色

转至位于res文件夹values目录中的style.xml文件。要更改ActionBar的默认颜色,必须更改colorPrimary资源。以下是使ActionBar颜色为“绿色”的代码。

XML格式




  

输出:

步骤5:使用activity_main.xml文件

该文件定义活动的布局。在此示例中,主要重点是ActionBar,因此该活动将仅包含一个简单的TextView。下面是代码。

XML格式



  
    
    
    
  

输出:

ActionBar的优点

  • 提供自定义区域以设计应用程序的身份
  • 通过显示当前活动的标题来指定用户在应用中的位置。
  • 提供对重要且经常使用的操作的访问
  • 支持选项卡和一个用于视图切换和导航的下拉列表。

ActionBar的缺点

  • ActionaBar的所有功能不是一次引入,而是随着不同的API级别(例如API 15、17和19)的发布而引入。
  • 当ActionBar在不同的API级别上运行时,其行为会有所不同。
  • 特定API引入的功能不提供向后兼容性。