Kotlin开发中如何为未选中的TextView设置gravity左对齐属性
问题原因
你写的item1.gravity = left不生效主要有两个常见错误:
- 没有引用Android官方的
Gravity常量,left属于未定义变量,编译期就不会生效 - 混淆了
gravity和layout_gravity的作用:gravity控制控件内部内容的对齐,layout_gravity控制控件本身在父布局中的对齐,需要按需选择
正确实现步骤
1. 先导入Gravity依赖
在文件头部添加导入语句:
import android.view.Gravity
2. 在各选中分支添加对齐逻辑
你需要的是未选中item内部文字左对齐,选中item保持原有对齐(例:居中),可以在你的onClick每个分支里添加对应逻辑,示例如下:
@SuppressLint("NewApi", "ResourceAsColor") override fun onClick(view: View) { if(view.id == R.id.item1) { // 原有逻辑不变 item1.setTextColor(R.color.maincolor_purple) item1.background = ContextCompat.getDrawable( requireContext(), R.drawable.tab_bg_selected ) item2.background = ContextCompat.getDrawable( requireContext(), R.drawable.tab_bg_unselected ) item3.background = ContextCompat.getDrawable( requireContext(), R.drawable.tab_bg_unselected ) item1.elevation = 3F item2.elevation = 2F item3.elevation = 1F item2.setTextColor(def); item3.setTextColor(def); viewPager2.setCurrentItem(0) // 新增对齐逻辑:选中的item1居中,未选中的item2、item3左对齐(同时保持垂直居中) item1.gravity = Gravity.CENTER item2.gravity = Gravity.LEFT or Gravity.CENTER_VERTICAL item3.gravity = Gravity.LEFT or Gravity.CENTER_VERTICAL } else if (view.id == R.id.item2) { // 原有逻辑不变 item1.setTextColor(def) item1.background = ContextCompat.getDrawable( requireContext(), R.drawable.tab_bg_unselected ) item2.background = ContextCompat.getDrawable( requireContext(), R.drawable.tab_bg_selected ) item3.background = ContextCompat.getDrawable( requireContext(), R.drawable.tab_bg_unselected ) item2.setTextColor(R.color.maincolor_purple) item1.elevation = 1F item2.elevation = 3F item3.elevation = 2F item3.setTextColor(def) val size = item2.width viewPager2.setCurrentItem(1) // 新增对齐逻辑 item2.gravity = Gravity.CENTER item1.gravity = Gravity.LEFT or Gravity.CENTER_VERTICAL item3.gravity = Gravity.LEFT or Gravity.CENTER_VERTICAL } else if (view.id == R.id.item3) { // 原有逻辑不变 item1.setTextColor(def) item1.background = ContextCompat.getDrawable( requireContext(), R.drawable.tab_bg_unselected ) item2.background = ContextCompat.getDrawable( requireContext(), R.drawable.tab_bg_unselected ) item3.background = ContextCompat.getDrawable( requireContext(), R.drawable.tab_bg_selected ) item3.setTextColor(R.color.maincolor_purple) item1.elevation = 1F item2.elevation = 2F item3.elevation = 3F item2.setTextColor(def) val size = item2.width * 2 viewPager2.setCurrentItem(2) // 新增对齐逻辑 item3.gravity = Gravity.CENTER item1.gravity = Gravity.LEFT or Gravity.CENTER_VERTICAL item2.gravity = Gravity.LEFT or Gravity.CENTER_VERTICAL } }
不生效排查方案
如果修改后还是没有效果,按以下步骤排查:
- 检查item的宽度设置:如果item宽度是
wrap_content,控件宽度和内部文字宽度一致,对齐效果会看不到,需要把item宽度改成match_parent或者固定宽度 - 如果你是要实现item本身在父布局里左对齐,需要修改
layout_gravity属性:
// 父布局如果是LinearLayout就强转成LinearLayout.LayoutParams,其他布局对应修改类型 val params = item1.layoutParams as LinearLayout.LayoutParams params.gravity = Gravity.LEFT item1.layoutParams = params
- 如果你用的是TabLayout的内置Tab,需要先获取Tab的根View再修改:
tab.view.gravity = Gravity.LEFT
内容的提问来源于stack exchange,提问作者Enigma
相关产品推荐
相关产品推荐

