更改 Java Android Widget 中 ImageView 的 xml 值 android:layout_marginStart

Posted

技术标签:

【中文标题】更改 Java Android Widget 中 ImageView 的 xml 值 android:layout_marginStart【英文标题】:change xml value android:layout_marginStart of ImageView in Java Android Widget 【发布时间】:2021-10-03 10:39:41 【问题描述】:

我创建了一个带有 ImageView 小部件的 xml 文件,我想使用 Java 以编程方式使用 xml 值 android:layout_marginStart 更改此 ImageView 的位置。我想在 Java 中设置值并更新小部件。我怎样才能改变价值? findVIewById 不能用于小部件...

<ImageView
            android:id="@+id/plane"
            android:layout_
            android:layout_
            android:layout_marginStart="100dp" <-- i want to change this value with java code
            android:contentDescription="@string/plane"
            android:src="@drawable/plane"/>

【问题讨论】:

我没有在主应用程序上工作。我创建了一个应用程序小部件(如天气小部件),我想在那里更改 xml 值。 试试这个***.com/questions/15636401/… 你真的不可能在外部层次结构中访问LayoutParams,所以这是不可能的。如果您将只有几个可能的位置,您可以在布局中放置多个&lt;ImageView&gt;s,每个都位于不同的边距,并根据需要设置它们的可见性。否则,atm 唯一想到的其他事情就是使用RemoteViews#setFloat() 调用ImageViewsetX()setTranslationX() 等方法,但这可能不会像预期的那样运行。 我可以在 Java 中创建一个 ImageView 并将其放入小部件布局中吗?这样就会生成xml代码? 不。您对 View 创建的唯一控制是通过布局 XML,并且仍然只能在编译时生成。 【参考方案1】:

有方法remoteView.setViewPadding(left,right,top,bottom)。确保您的 Widget 到处都有 match_parent 和 wrap_content,然后您可以轻松地使用 Padding 以编程方式更改 Image 的位置。可能您还必须添加android:cropToPadding="true"

【讨论】:

不错的发现。我想我从来不知道那个。此外,看起来他们已经添加了专门用于修改 LayoutParams 的方法,但它们直到 API 级别 31 才可用;例如,setViewLayoutMargin(),这正是您在这里所要求的。

以上是关于更改 Java Android Widget 中 ImageView 的 xml 值 android:layout_marginStart的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式更改Chip Widget样式不起作用 - Android

渲染问题:Android Studio 1.1.0 中 android.support.v7.widget.RecyclerView 的 java.lang.NullPointerException

获取 java.lang.ClassCastException:无法强制转换 android.widget.SimpleAdapter

java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget

java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to android.widget.TextVie

安卓出现错误: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.EditT