日常工作中,actionBar的title的默认显示位置基本上难以满足UI的要求,通常会要求居中显示,本文记录下actionBar居中显示的修改方法。
效果如图所示:
新建一个custom.xml
style
根据自己使用的主题来进行选择
Activity使用的布局文件main_activity
dice_image
和 roll_button
是用来显示的相关内容,可以不用关注。
MainActivity.kt
的代码如下:
package com.tom.actionbarcenterdemo
import android.annotation.SuppressLint
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Gravity
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
import androidx.appcompat.app.ActionBar
import androidx.appcompat.widget.AppCompatButton
import androidx.appcompat.widget.AppCompatImageView
import androidx.appcompat.widget.LinearLayoutCompat
class MainActivity : AppCompatActivity() {
private lateinit var mDiceImage: AppCompatImageView
private lateinit var mCenterBtn: AppCompatButton
private lateinit var mDefaultBtn: AppCompatButton
private lateinit var mCustomView: View
@SuppressLint("InflateParams")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setHomeButtonEnabled(true)
//获取要显示的title
mCustomView = LayoutInflater.from(this).inflate(R.layout.custom, null)
val actionBarLayout = LinearLayoutCompat(this)
supportActionBar?.setCustomView(
actionBarLayout,
ActionBar.LayoutParams(
ActionBar.LayoutParams.WRAP_CONTENT,
ActionBar.LayoutParams.WRAP_CONTENT
)
)
val params: ActionBar.LayoutParams = actionBarLayout.layoutParams as ActionBar.LayoutParams
params.gravity = params.gravity and Gravity.HORIZONTAL_GRAVITY_MASK.inv() or Gravity.CENTER_HORIZONTAL
actionBarLayout.addView(mCustomView)
supportActionBar?.setCustomView(actionBarLayout, params)
val rollButton = findViewById(R.id.roll_button)
mDiceImage = findViewById(R.id.dice_image)
mCenterBtn = findViewById(R.id.btn_show_center)
mDefaultBtn = findViewById(R.id.btn_show_default)
rollButton.setOnClickListener { rollDice() }
mCenterBtn.setOnClickListener { showCenter() }
mDefaultBtn.setOnClickListener { showDefault() }
}
private fun showDefault() {
supportActionBar?.setDisplayShowCustomEnabled(false)
supportActionBar?.setDisplayShowTitleEnabled(true)
}
private fun showCenter() {
supportActionBar?.setDisplayShowCustomEnabled(true)
supportActionBar?.setDisplayShowTitleEnabled(false)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
android.R.id.home -> {
finish()
true
}
else -> super.onOptionsItemSelected(item)
}
}
private fun rollDice() {
mDiceImage.setImageResource(getRandomDiceImage())
}
private fun getRandomDiceImage(): Int {
val randomInt = (1..6).random()
return when (randomInt) {
1 -> R.drawable.dice_1
2 -> R.drawable.dice_2
3 -> R.drawable.dice_3
4 -> R.drawable.dice_4
5 -> R.drawable.dice_5
else -> R.drawable.dice_6
}
}
}