Android TableLayout中TextView文本不居中问题

在这里插入图片描述

概述

| 平台
    RK3288 + Android 8.1 + compileSdkVersion 26.

| 问题
    使用了TableLayout布局电话的拨号按键界面, 效果如下图 (正常):
在这里插入图片描述
在后续开发过程的某次修改后, 出现效果图(不正常):
在这里插入图片描述

合并两张效果图可看得更明显(红线参考位置):
在这里插入图片描述
在布局中 TextViewandroid:gravity=center 已经设置, 从图中可以看出在垂直方向的居中失效了

排查

themes.xml

<?xml version="1.0" encoding="utf-8"?>
<resources><item name="dw" type="dimen">60dp</item><item name="dh" type="dimen">42dp</item><style name="TV"><item name="android:textColor">#FF000000</item><item name="android:gravity">center</item><item name="android:textSize">22sp</item><item name="android:layout_width">@dimen/dw</item><item name="android:layout_height">@dimen/dh</item><item name="android:layout_marginLeft">6dp</item><item name="android:layout_marginTop">6dp</item><item name="android:background">@drawable/selector_tv_bg</item></style></resources>

table_layout_test.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#fff7f7f9"><ListView android:id="@+id/lv"android:layout_width="400dp"android:layout_height="400dp"/><RelativeLayout android:id="@+id/rlPhone"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_toRightOf="@id/lv"android:background="#220000FF"><TableLayout android:id="@+id/tl"android:layout_width="wrap_content"android:layout_height="wrap_content"><TableRow><TextView style="@style/TV"android:text="7"/><TextView style="@style/TV"android:text="8"/><TextView style="@style/TV"android:text="9"/></TableRow><TableRow><TextView style="@style/TV"android:text="4"/><TextView style="@style/TV"android:text="5"/><TextView style="@style/TV"android:text="6"/></TableRow><TableRow><TextView style="@style/TV"android:text="1"/><TextView style="@style/TV"android:text="2"/><TextView style="@style/TV"android:text="3"/></TableRow><TableRow><TextView style="@style/TV"android:text="*"/><TextView style="@style/TV"android:text="0"/><TextView style="@style/TV"android:text="#"/></TableRow></TableLayout></RelativeLayout>
</RelativeLayout>

TableLayoutTest.java


public class TableLayoutTest extends Activity implements View.OnClickListener {ListView lv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.table_layout_test);ViewGroup tl = (ViewGroup) findViewById(R.id.tl);for(int i = 0; i < tl.getChildCount(); i ++){ViewGroup row = (ViewGroup) tl.getChildAt(i);for(int j = 0; j < row.getChildCount(); j ++){row.getChildAt(j).setOnClickListener(this);}}lv = (ListView) findViewById(R.id.lv);lv.setAdapter(new ArrayAdapter<String>(TableLayoutTest.this,R.layout.lv_item,new String[]{"001", "002", "003", "004", "004"}));}@Overridepublic void onClick(View view) {Log.d("TableLayoutTest", "onClick " + ((TextView)view).getText().toString());}
}

布局并不复杂, 一个ListView 加上一个 RelativeLayout, 于是, 把ListView先去带掉, 果然好了, 这问题就很谜了.
这不合理, 于是, 布局不变, 去掉 lv.setAdapter, 结果也是好的…

判断会不会是时序的原因, 于是延迟 3秒 setAdapter:

lv.postDelayed(new Runnable() {@Overridepublic void run() {lv.setAdapter(new ArrayAdapter<String>(TableLayoutTest.this,R.layout.lv_item,new String[]{"001", "002", "003", "004", "004"}));}}, 3000);

好吧, 刚开始是好的, ListView有内容了后, 出现:
在这里插入图片描述


原因参考自ChatGpt

可能原因

  1. TableLayout 的宽度: 由于你使用的是 wrap_contentTableLayoutTableRow 的宽度可能根据子元素的内容大小进行调整。如果 TableLayoutTableRow 的宽度与 TextView 的内容宽度相近,gravity="center" 可能无法正常生效。

  2. TableRow 默认行为: TableRow 中的子元素默认是按内容宽度排列的,而不是平分整个行的宽度。这可能导致 TextView 的内容没有在整个单元格内居中。

解决方法

为了确保 TableLayout 中的 TextView 内容能够正确居中,可以考虑以下方法:

  1. TextView 设置 layout_width="0dp" 并加上 layout_weight="1": 这将使每个 TextView 在同一行内平分可用空间,从而使文本居中。
<TableRow><TextViewstyle="@style/TV"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center"android:text="7"/><TextViewstyle="@style/TV"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center"android:text="8"/><TextViewstyle="@style/TV"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center"android:text="9"/>
</TableRow>
  1. TableLayoutstretchColumns 属性: 你可以使用 TableLayoutstretchColumns 属性,使特定列自动拉伸以填充空间,从而在特定情况下实现内容居中。
<TableLayoutandroid:id="@+id/tl"android:layout_width="wrap_content"android:layout_height="wrap_content"android:stretchColumns="*">

这里的 android:stretchColumns="*" 表示所有列都可以被拉伸以适应屏幕宽度。

总结

通过设置 layout_width="0dp" 并配合 layout_weight="1",可以确保 TextView 在其单元格中居中显示。stretchColumns 属性也可以> 用来调整列的宽度,确保内容的对齐方式更加合理。试试看是否能解决你的问题!

ChatGPT提供的几种方案并没有解决问题, 方案中提及的原因有待验证.

| 解决方案

  1. 根布局改为FrameLayout
  2. 修改TableLayout的layout_width属性配置, 指定 android:layout_width="match_parent"android:layout_width="300dp" 都可以
  3. TableLayout 用 LinearLayout或其他布局替换
  4. 指定父容器布局宽度, 并设置 TableRow的宽度
    RelativeLayout android:id=“@+id/rlPhone”
    TableLayout android:id=“@+id/tl”
    TableRow android:layout_width=“200dp”>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/406180.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SEO优化:如何优化自己的文章,解决搜索引擎不收录的问题

可以使用bing的URL检查&#xff0c;来检查自己的文章是不是负荷收录准测&#xff0c;如果页面有严重的错误&#xff0c;搜索引擎是不会进行收录的&#xff0c;而且还会判定文章为低质量文章&#xff01; 检查是否有问题。下面的页面就是有问题&#xff0c;当然如果是误报你也可…

Stage模型应用程序包结构

一、开发态包结构 在DevEco Studio上创建一个项目工程&#xff0c;并尝试创建多个不同类型的Module。根据实际工程中的目录对照本章节进行学习&#xff0c;可以有助于理解开发态的应用程序结构。 工程结构主要包含的文件类型及用途如下&#xff1a; 文件类型说明配置文件 包括…

ISO 26262中的失效率计算:IEC 61709-Clause 17_Switches and push-buttons

概要 IEC 61709是国际电工委员会&#xff08;IEC&#xff09;制定的一个标准&#xff0c;即“电子元器件 可靠性 失效率的基准条件和失效率转换的应力模型”。主要涉及电学元器件的可靠性&#xff0c;包括失效率的基准条件和失效率转换的应力模型。本文介绍IEC 61709第十七章&…

docker部署postgresSQL 并做持久化

先安装docker&#xff0c;安装docker 方法自行寻找方法 然后安装pgsql 拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/postgres:latest运行容器 docker run -it --name postgres --privileged --restart always -e POSTGRES_PASSWORDYo5WYypu0mCCh…

Ansys Rocky在电池制造行业应用

Ansys Rocky在电池制造行业应用 对于电池电极制造的理解 干湿混合应用 砑光应用 微尺度电极干燥应用 更多应用 材料生产 电极和电池生产

2024前端面试题-css篇

1.p和div区别 p自带有一定margin-top和margin-bottom属性值&#xff0c;而div两个属性值为0&#xff0c;也便是两个p之间有不一定间距&#xff0c;而div没有。 2.对css盒模型的理解 标准盒模型&#xff1a;content不包括padding、border、margin ie盒模型&#xff1a;conten…

2024最新Python+PyCharm保姆级安装教程【附激活码】

PyCharm 是由捷克的 JetBrains 公司开发的一款强大的 Python 集成开发环境&#xff08;IDE&#xff09;&#xff0c;它为 Python 开发者提供了一个全面的编程工具集&#xff0c;支持从代码编写到代码测试、调试和优化等各个环节 &#xff0c;它支持代码自动完成、代码检查、实时…

OpenDDS的Rtps_Udp传输协议可靠性QoS收发基本流程

OpenDDS中,实现了Rtps_Udp传输协议(非纯udp)的可靠性传输。传输的线程包括: 1)发送方线程主要线程和定时器 《1》应用线程 《2》网络异步发送线程 《3》Heartbeat定时器 《4》Nak_response定时器 2)接收方主要线程和定时器 《1》网络异步接收线程 《2》heartbeat_respons…

下载官方llama

1.官网.pth格式 去官网&#xff08;Download Llama (meta.com)&#xff09;申请 具体可以看这个B站视频 Llama2模型申请与本地部署详细教程_哔哩哔哩_bilibili&#xff08;视频是llama2&#xff0c;下载llama3是另外一个git&#xff09; 相关代码如下 git clone https://g…

【C++例题 / 训练】二分算法(模板 例题)

引言 二分也就是二分查找&#xff0c;又叫折半查找。这种算法正如其名&#xff0c;每一次都要分一半。 二分算法可以分为二分查找和二分答案。 以在一个升序数组中查找一个数为例&#xff0c;每次考察数组当前部分的中间元素&#xff0c;如果中间元素刚好是要找的&#xff0…

Java MessagePack序列化工具(适配Unity)

Java MessagePack序列化工具&#xff08;适配Unity&#xff09; 前言项目代码编写 结 前言 前后端统一用MessagePack&#xff0c;结果序列化的结果不一样&#xff0c;发现C#侧需要给每个类增加描述字段数量的Head&#xff0c;而Java却不用&#xff0c;所以在Java侧封装一下序列…

运行微信小程序报错:Bad attr data-event-opts with message

问题 使用uniapp 编译&#xff0c;运行微信小程序环境时&#xff0c;报错 Bad attr data-event-opts with message。&#xff08;这个错误报错原因很多&#xff0c;这里只解决一个&#xff09; 原因 原因是&#xff1a;代码中有&#xff1a; :key"swiperList i"…

近年国际重大网络安全事件深度剖析:安全之路任重道远

引言 在当今数字化时代&#xff0c;网络安全已成为全球关注的焦点。随着信息技术的飞速发展&#xff0c;网络攻击的手段和规模也在不断升级&#xff0c;给个人、企业和国家带来了巨大的威胁。本文将盘点近年来国际上发生的重大网络安全事件&#xff0c;分析其影响和教训&#…

虚幻引擎游戏开发 | 程序化生成道具位置 Randomize Height

当地图上有无数个收集物【如水晶】&#xff0c;一键随机化高度 应用前 应用后 这时候水晶的高度是离散型地在0和110两个数中平均概率地选择。 如果要有权重地分布高度&#xff0c;减少高位水晶的比例&#xff08;由于过多连续跳跃会让玩家无聊和难以持续专注&#xff09;可以加…

什么是制造业项目管理软件?适合制造企业的项目管理软件具备哪些特征

当前&#xff0c;我国的制造业呈现出稳步增长与风险并存的现象。经济构建以国内大循环为主体&#xff0c;国产替代的浪潮正在席卷国内制造业&#xff0c;越来越多的制造领域企业开始启动数字化变革来支撑企业的迅猛发展&#xff0c;进一步优化项目管理流程&#xff0c;促进研发…

深入理解HTTP的基础知识:请求-响应过程解析

首先&#xff0c;我们从网络协议的最顶层开始讲解&#xff0c;即应用层。在网络通信中&#xff0c;应用层是最接近用户的一层&#xff0c;它负责为特定的网络应用提供服务和功能。应用层协议定义了数据交换的规则和格式&#xff0c;以便不同的应用程序能够相互通信和交换信息。…

[数据集][目标检测]航拍屋顶检测数据集VOC+YOLO格式458张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;458 标注数量(xml文件个数)&#xff1a;458 标注数量(txt文件个数)&#xff1a;458 标注类别…

03 C语言实现单向循环链表

#include "stdio.h" #include "stdlib.h"typedef int datatype_t;typedef struct node {datatype_t data;struct node *next; } looplist_t;// 单向循环链表创建 looplist_t *looplist_create() {looplist_t *head (looplist_t *) malloc(sizeof(looplist…

【Orb-Slam3学习】 ORBextractor类主要成员函数调用关系

简介 主要是介绍一下ORBextractor类的函数简要流程以及调用关系。 构造函数 ORBextractor::ORBextractor 主要作用是初始化一下ORBextractor类的成员函数 列表初始化部分&#xff1a; nfeatures(_nfeatures), scaleFactor(_scaleFactor), nlevels(_nlevels), iniThFAST(_in…

Ansys Zemax|如何自定义优化操作数

虽然Zemax OpticStudio有300多个内建优化操作数&#xff0c;但是还是会有一些特殊情况是这300多个操作数无法涵盖的。这就要求使用者根据要求计算出某些特定的数值&#xff0c;将这些数值返回到某个操作数&#xff0c;再对此操作数进行优化。 Zemax OpticStudio支持用户编程&a…