【Android开发-28】Android中主题Theme和Toolbar的用法介绍

2023-12-13 04:58:03

1,主题Theme
在Android中,主题(Theme)是一种用于定义应用程序用户界面外观的样式。主题可以包括颜色、字体、布局、控件样式等属性。通过使用主题,开发者可以轻松地为应用程序创建一致且具有吸引力的用户界面。

要使用主题,首先需要在AndroidManifest.xml文件中为应用程序指定一个主题:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    ...
</application>

在上面的示例中,我们将应用程序的主题设置为AppTheme。接下来,我们需要在项目的res/values/styles.xml文件中定义这个主题:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
</resources>

在上面的代码中,我们定义了一个名为AppTheme的主题,它继承自Theme.AppCompat.Light.DarkActionBar。这意味着我们的应用程序将使用浅色背景和深色操作栏。我们还可以通过添加自定义属性来进一步自定义主题,例如:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:textColor">@color/textColor</item>
    </style>
</resources>

在上面的代码中,我们添加了一个名为android:textColor的属性,它将应用于应用程序中的所有文本控件。要在布局文件中使用这个属性,只需将其作为控件的样式引用即可:

<TextView
    style="@style/TextAppearance.AppCompat.Body1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!" />

在上面的代码中,我们将TextAppearance.AppCompat.Body1样式应用于TextView控件,这将应用我们在主题中定义的android:textColor属性。

2,ToolBar使用说明

在Android中,Toolbar是一个应用程序界面的导航控件,它提供了一种显示标题和操作按钮的方式,并且可以在不同的屏幕方向上自适应。Toolbar可以放置在布局的顶部或底部,并可以包含菜单项、子标题和搜索框等元素。

以下是如何在布局文件中添加Toolbar的示例:

<androidx.appcompat.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    app:popupTheme="@style/AppTheme.PopupOverlay" />

然后,你可以通过以下方式在Activity中使用Toolbar:

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

你还可以设置Toolbar的背景颜色、标题和子标题以及它们的颜色:

toolbar.setBackgroundColor(Color.parseColor("#5C6BC0"));
getSupportActionBar().setTitle("标题"); // 设置标题
getSupportActionBar().setSubtitle("子标题"); // 设置子标题
getSupportActionBar().setTitleTextColor(Color.parseColor("#EC407A")); // 设置标题颜色
getSupportActionBar().setSubtitleTextColor(Color.parseColor("#FFFFFF")); // 设置子标题颜色

3,toolbar里带图标的menu参考
在Android中,要在Toolbar里添加带图标的Menu,可以参考以下代码:

首先,在布局文件(如activity_main.xml)中添加一个Toolbar和一个Menu:

<androidx.appcompat.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    app:popupTheme="@style/AppTheme.PopupOverlay">

    <MenuView
        android:id="@+id/menu_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</androidx.appcompat.widget.Toolbar>

然后,在Activity(如MainActivity.java)中找到这两个组件,并为Menu设置菜单项:

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private Toolbar toolbar;
    private Menu menu;

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

        // 获取Toolbar和Menu组件
        toolbar = findViewById(R.id.toolbar);
        menu = toolbar.getMenu();

        // 为Menu设置菜单项
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_main, menu);
    }

    // 重写onOptionsItemSelected方法,处理菜单项点击事件
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_item1:
                Toast.makeText(this, "菜单项1被点击", Toast.LENGTH_SHORT).show();
                break;
            case R.id.menu_item2:
                Toast.makeText(this, "菜单项2被点击", Toast.LENGTH_SHORT).show();
                break;
            default:
                return super.onOptionsItemSelected(item);
        }
        return true;
    }
}

最后,在资源文件夹(如res/menu)下创建一个名为menu_main.xml的文件,定义带图标的菜单项:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/menu_item1"
        android:icon="@drawable/ic_menu_item1"
        android:title="菜单项1" />
    <item
        android:id="@+id/menu_item2"
        android:icon="@drawable/ic_menu_item2"
        android:title="菜单项2" />
</menu>

注意:请将@drawable/ic_menu_item1和@drawable/ic_menu_item2替换为实际的图标资源ID。

在Android中,showAsAction属性用于指定菜单项(MenuItem)在Toolbar中的显示方式。它有两个可选值:

never(默认值):菜单项不会显示在Toolbar上,而是显示在下拉菜单中。
ifRoom:如果Toolbar有足够的空间,菜单项会显示在Toolbar上;否则,它会显示在下拉菜单中。
例如,在menu资源文件中为一个菜单项设置showAsAction属性:

<item
    android:id="@+id/action_search"
    android:icon="@drawable/ic_search"
    android:title="搜索"
    app:showAsAction="ifRoom" />

在这个例子中,当Toolbar有足够的空间时,搜索图标会显示在Toolbar上;否则,它会显示在下拉菜单中。

文章来源:https://blog.csdn.net/jiangchaobing_2017/article/details/134952437
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。