一.改变顶部状态栏颜色
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@android:color/holo_blue_bright</item>
<item name="colorPrimaryDark">@android:color/holo_blue_bright</item>
</style>
二、顶部导航栏ToolBar
前提条件需要更改为Theme.AppCompat.Light.NoActionBar
- 在布局中添加一个ToolBar控件。由于要用到Toolbar,所以外层布局要用线性布局,并设置为垂直方向,代码如下
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="fill_parent"
android:layout_height="53.299988dip"
android:background="@color/theme_color">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:id="@+id/toolbar_title"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:textColor="@android:color/white"
android:textSize="18.0sp"
android:textStyle="bold" />
</LinearLayout>
</androidx.appcompat.widget.Toolbar>
- 然后新建xml布局和相应的 Activity,Activity继承自AppCompatActivity,新建项目一般默认继承自AppCompatActivity,对toolbar进行属性设置。
xml属性 | 类中的设置方法 | 说明 |
Logo | setLogo | 设置工具栏图标 |
Title | setTitle | 设置标题文字 |
title | TextColor | setTiitleTextColor 设置标题的文字颜色 |
titleTextAppearance | setTitleTextAppearance | 设置标题的文字风格。风格定义在styles.xml中 |
subtitle | setSubtitle | 设置副标题文字。副标题在标题下方。 |
subtitleTextColor | setSubtitleTextColor | 设置副标题的文字颜色 |
subtitleTextAppearance | setSubtitleTextAppearance | 设置副标题的文字风格 |
navigationIcon | setNavigationIcon | 设置左侧导航图标 |
无 | setNavigationOnClickListener | 设置导航图标的点击监听器 |
protected void initToolbar(String title) {
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// 设置title
// getSupportActionBar().setTitle(title);
TextView textView = findViewById(R.id.toolbar_title);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);// 添加默认的返回图标
getSupportActionBar().setHomeButtonEnabled(true); // 设置返回键可用
textView.setText(title);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
- 如果想要在标题右侧添加图标,则需要借助menu
(1)在res目录下新建文件夹menu,在menu文件夹下添加savemenu.xml
menu属性:
①menu是菜单项的容器。
②menu元素必须是该文件的根节点,并且能够包含一个或多个item和group元素。
③item是菜单项,用于定义MenuItem,可以嵌套menu元素,以便创建子菜单。
④group是item元素的不可见容器(可选)。可以使用它对菜单项进行分组,使一组菜单项共享可用性和可见性等属性。item属性:
①android:id:菜单项(MenuItem)的唯一标识
②android:icon:菜单项的图标(可选)
③android:title:菜单项的标题(必选)
④android:showAsAction:指定菜单项的显示方式。
- ifRoom 表示在屏幕空间足够的情况下显示在Toolbar中,不够的话就显示在菜单中,如果设置该属性,长按时弹出对应的文字
- never 表示永远不显示在Toolbar中,而是一直显示在菜单中 (默认)
- always 表示永远显示在Toolbar中,如果屏幕空间不够则不显示
<?xml version="1.0" encoding="utf-8"?>
<!--
因为我只需要一个菜单,想让其显示在标题右侧,所以我只需要一个item,showAsAction设置为always
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<item
android:id="@+id/btn_save_course"
android:title="保存"
app:showAsAction="always" />
</menu>
(2)在activity中添加添加两个方法,使其配合Toolbar使用
//添加布局文件
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.savemenu, menu);
return true;
}
//menu,点击事件监听:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.btn_save_course) {
ContentValues cValue = new ContentValues();
if (minute < 10) {
cValue.put("time", hour + ":0" + minute);
} else {
cValue.put("time", hour + ":" + minute);
}
cValue.put("create_time", System.currentTimeMillis() + "");
cValue.put("repeat", repeatType.getText().toString());
cValue.put("isSwitchOn", 1);
cValue.put("ifVibrate", ifvibrat.getText().toString());
db.insert("clocks", null, cValue);
Toast.makeText(getApplicationContext(), "保存成功", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(AddclockActivity.this, ClockActivity.class);
intent.putExtra("addType", "yes");
startActivity(intent);
finish();
}
return super.onOptionsItemSelected(item);
}
三、更改字体样式
①在app目录下创建一个assets文件夹,在assets文件夹下创建fonts文件夹,将相应的字体.ttf文件放在fonts目录下
②在activity中修改字体样式
text1.setTypeface(Typeface.createFromAsset(getAssets(),"fonts/STXINGKA.TTF"));