动态添加子视图时,TableLayout(TableRow?)未按预期调整子视图的大小

2024-01-09

Context:我有一个 TableLayout(使用 XML 创建),其中有一个 TableRow,其中有一个 TextView。代码:

 <ScrollView 
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:fillViewport="true"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
  <TableLayout
     android:id="@+id/mytable"
     android:orientation="vertical"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:stretchColumns="1"
     >
    <TableRow>
      <TextView
     android:id="@+id/add_alarm"
     android:layout_weight="1"
     android:layout_width="0dp"
     android:layout_height="fill_parent"
     android:gravity="center"
     android:text="New\nItem"
     android:textSize="30sp"
     />
    </TableRow>
  </TableLayout>
</ScrollView>

在我的 Activity 的 onCreate() 方法中,我尝试动态地将另一个视图添加到 TableRow 中。这是代码:

    public void onCreate(Bundle savedInstanceState)    {
        super.onCreate(savedInstanceState);
        LayoutInflater inflater = LayoutInflater.from(this);
        View mainLayout = inflater.inflate(R.layout.main, null);
        TableLayout tl = (TableLayout) mainLayout.findViewById(R.id.mytable);

        TableRow tr = (TableRow) tl.getChildAt(0);
        Log.d(TAG, "tr class = " + tr.getClass().getName() + " | width = " + tr.getWidth() + "\n");
        final RelativeLayout rl = (RelativeLayout) inflater.inflate(R.layout.alarm_widget, null);
        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1);
        tr.addView(rl, lp); 
        tl.invalidate();
        setContentView(mainLayout);
}

问题:此代码没有达到在等宽的列中显示两个视图(一个已在 XML 布局中,另一个是动态添加的)的预期效果。

  1. 通过上面给出的代码,动态添加的 View 的宽度为“0”,因此是不可见的。
  2. 如果我将代码更改为tr.addView(rl)(即不引用LayoutParams),动态添加的视图是可见的,但列的宽度不相等。

我怎样才能实现这个目标?

Edit:我根据评论将代码更改为以下内容。它仍然没有按预期工作:

TableLayout.LayoutParams lp = new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT,
                               TableLayout.LayoutParams.WRAP_CONTENT, 1f);
tr.addView(rl, lp); 

问题是这个行为定义为TableRow http://developer.android.com/reference/android/widget/TableRow.html:

TableRow 的子级不需要在 XML 文件中指定layout_width 和layout_height 属性。 TableRow 始终强制这些值分别为 MATCH_PARENT 和 WRAP_CONTENT。

不要将文本视图直接添加到 TableRow,而是让 TableRow 持有水平 LinearLayout 并将第二个视图添加到该持有者。

(另外,将 LinearLayout.LayoutParams 用于进入 TableRow 的内容是错误的。您应该一直使用TableRow.LayoutParams http://developer.android.com/reference/android/widget/TableRow.LayoutParams.html。但这不是获得等宽 TextView 的方法。使用 LinearLayout 支架。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态添加子视图时,TableLayout(TableRow?)未按预期调整子视图的大小 的相关文章

  • admob 获取广告响应。错误代码:0 无法加载广告:0

    我在这里遵循了有关该错误的许多答案 但我的问题尚未解决 每次运行应用程序时 都不会出现广告 并且我在 Logcat 中收到以下错误消息 获取广告响应时出现问题 错误代码 0 无法加载广告 0 这是我的java代码 我错过了什么 privat
  • 如何在 Android 中编辑 asset 文件夹中的文本文件?

    我正在使用 Android 中资产文件夹中的文本文件 我想动态更改该文本文件内的数据 我试图按如下方式打开该文件 FileOutputStream fos this getAssets openNonAssetFd data txt cre
  • 使用 noHistory="true" 和/或 showOnLockScreen="true" 向 Activity 请求 Android M 权限

    我正在开发一个视频通话应用程序 并且有一个 来电 屏幕 当有人打电话给用户时 它会提醒用户 此屏幕是由传入 GCM 触发的活动 并且在清单中设置了 noHistory true 和 showOnLockScreen true 以便用户无需解
  • 如何使用baseadapter自定义listview

    我想创建一个定制的ListView像这样 我想我必须使用BaseAdapter但我对此一无所知 主要 xml
  • 如何从 AccountManager.getAccounts() 获取与特定帐户关联的图标

    每个帐户的帐户设置中都会显示一个图标 对于 Google 帐户有一个图标 对于 Facebook 帐户有另一个图标 有没有办法从应用程序的代码中获取该图标 最后我解决了 private Drawable getIconForAccount
  • 具有待处理意图的警报管理器

    下面的代码片段 public void onCreate Bundle savedInstanceState super onCreate savedInstanceState setContentView R layout main Do
  • android-透明RelativeLayout

    我想要制作一个具有可绘制渐变作为背景的活动 并将在其背景顶部显示 4 个面板 相对布局 现在我想让 4 个面板透明 例如 50 以便也可以看到渐变背景 我搜索了谷歌 但我发现只能通过活动而不是布局来做到这一点 如何做我想做的事 您可以创建一
  • 在 Android 媒体播放器上播放 MediaStore 中的音频

    有没有办法通过使用 MediaPLayer 播放从 MediaStore 获得的音频 或者我走的方向完全错误 到目前为止 我已经查看了 MediaStore Audio 但没有什么能真正帮助我 我只需要知道我是否走在正确的轨道上 首先 我假
  • 如何使用抽屉布局左侧移动主要内容

    刚刚检查了如何使用 DrawerLayout 制作菜单here http www androidhive info 2013 11 android sliding menu using navigation drawer 但左侧菜单正在移动
  • RecyclerView 未按预期滚动

    我有一个项目 我使用水平回收器视图 并且我想将一个元素居中 我的实现有效 但并非在所有情况下都可以检查此 GIF 正如您可能注意到的 如果我从左边来 它会正确滚动 如果我从右边来 它会过度滚动很多 我不知道如何停止也不知道如何解决这个问题
  • 如何检测屏幕何时关闭?

    是否可以检测屏幕何时关闭并捕获它 我想在 Android 的全局设置中将计时器设置为 15 秒 我正在尝试查找一些如何捕获唤醒锁定模式的信息 只需注册您的应用程序即可执行操作Intent ACTION SCREEN OFF https de
  • SeekBar 未设置实际进度。 SetProgress() 不适用于早期的 Android 版本 [重复]

    这个问题在这里已经有答案了 我有一个应用程序 我想根据从 Web 服务检索到的值设置特定 SeekBar 的进度 但是 当我使用 SetProgress int 时 只有 SeekBar 的 搜索者 被设置 该栏未按预期 填充 它看起来是这
  • 使用 viewModel 从 ChildFragment 访问 ParentFragment 中的 ViewModel

    我正在尝试访问ParentViewModel for ParentFragment from ChildFragment using viewModels 这是我的代码 In ParentFragment class ParentFragm
  • 用dagger 2查看依赖注入

    我有一个自定义视图扩展TextView 我应该在哪里调用我的组件来注入视图 component inject customTextView 因此 我发现我需要在自定义视图的构造函数中添加注入 在所有视图中 或者使一个调用另一个 Exampl
  • 如何在Android Studio中关联.mp3文件

    我想根据列表视图项单击播放 mp3 文件 但是根据我的代码 我运行我的应用程序 出现此窗口 因此由于缺少音频选项 我真的不知道需要选择其中哪一个为了关联我的 mp3 文件 mainList setOnItemClickListener ne
  • android listactivity onCheckedChangeListener

    我正在开发一款应用程序 并且我有一个ListActivity 其选择模式设置为choice mode multiple 现在我想重写方法 当一项被调用时调用该方法选中 未选中 我发现onCheckChanged 方法仅针对RadioGrou
  • NestedScrollView 中带有 RecyclerView 的 ItemTouchHelper:拖动滚动不起作用

    我已经实现了 ItemTouchHelper 如本文所述 https medium com ipaulpro drag and swipe with recyclerview b9456d2b1aaf k7xm7amxi https med
  • 横向模式下视频视图不是全屏

    我正在使用用 xml 设计的视频视图 该视频在纵向模式下为全屏 但当切换到横向模式时 它会左对齐 并且宽度和高度都会换行 而不是全屏 我参考了这些 但仍然没有解决这个问题 全屏视频视图未居中 https stackoverflow com
  • 电子邮件发不出去,短信中的链接为 404

    我们刚刚完成将 Google AppInvites 集成到我们的应用程序中 我们注意到以下问题 电子邮件不会被发送 而发送的短信会带有一个链接 显示会出现 404 页面 仅当我设置 设置其他平台目标应用程序 对于 Android 和 iOS
  • Android Nougat 无法显示某些矢量文件 (Resources$NotFoundException)

    我一直在开发一个包含许多矢量图形的应用程序 最近我开始在 Nougat 上测试它 发现它立即崩溃了 logcat 在加载矢量时显示 Resources NotFoundException 这让人想起带有矢量图形的 Android 早期版本中

随机推荐