【问题标题】:Height and margin not working with inflated and addview?高度和边距不适用于充气和添加视图?
【发布时间】:2019-08-12 11:12:05
【问题描述】:

这是我的EditText

<?xml version="1.0" encoding="utf-8"?>
<EditText
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="49dp"
    android:layout_marginTop="3dp"
    android:text=""
    android:ems="10"
    android:gravity="center_vertical"
    android:imeOptions="actionNext"
    android:maxLines="1"
    android:background="@drawable/profile_edt_round_corners"
    android:drawablePadding="5dp"
    android:textSize="14sp"
    android:hint=""
    tools:ignore="RtlSymmetry"
    android:textColor="#4a4a4a"/>

膨胀视图

private fun getRoundedEditText() =
    layoutInflater.inflate(R.layout.v_rounded_corners, null) as EditText

设置值

private fun addDataToParents() {
    val editTextView = getRoundedEditText()
    editTextView.setText("Parent 1")
    ll_parents_guardian_container.addView(editTextView)
    val editTextView2 = getRoundedEditText()
    editTextView2.setText("Parent 2")
    ll_parents_guardian_container.addView(editTextView2)
}

ll_parents_guardian_container 在哪里

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/ll_parents_guardian_container"
            android:orientation="vertical">
    </LinearLayout>

但是我已经在 XML 中定义的 layout_marginToplayout_height 并没有反映在那里。

【问题讨论】:

  • 什么是容器根布局?
  • 尝试以编程方式设置布局参数并查看

标签: android kotlin android-inflate


【解决方案1】:

我发现了问题。

layoutInflater.inflate(R.layout.v_rounded_corners, null) as EditText

在对具有边距/高度属性的视图进行膨胀时,您不应将根作为 null 传递。这就是问题的原因。因为膨胀的视图需要根来绘制布局参数。

所以用你要添加的视图来改变它。

layoutInflater.inflate(R.layout.v_rounded_corners, ll_parents_guardian_container ) as EditText

【讨论】:

  • 我遇到了同样的问题,边距为 0,但使用视图绑定来膨胀视图:ActivityMyExampleBinding.inflate(layoutInflater)。有必要使用不同的重载,ActivityMyExampleBinding.inflate(layoutInflater, container, true)(最后一个参数会自动为你调用addView(),如果false 你必须自己做)。当您使用第一个重载时,生成的绑定 .java 类似乎隐式地将 null 作为父 ViewGroup 传递。
  • @WillWestrop 你可以通过添加断点来进行调试,这样可以很容易地找到根本原因。如果您仍然觉得困难,请添加问题并提及我。
  • 我已经成功了,谢谢。只是为了防止人们将来偶然发现这一点,使用视图绑定可能会遇到同样的问题,但是在那里,容器的 null 的传递隐藏在编译器生成的绑定类后面(除非你知道使用正确的方法重载)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
  • 1970-01-01
  • 2021-09-23
  • 2014-02-05
  • 2017-12-11
  • 2023-03-11
  • 1970-01-01
相关资源
最近更新 更多