gpt4 book ai didi

android - 动态创建时 ImageButton 显示不同

转载 作者:行者123 更新时间:2023-11-30 00:43:06 34 4
gpt4 key购买 nike

我有一个基于 GridLayout 的 View ,我正在向其中动态添加多个 ImageButton。我试图理解为什么当我从布局 xml 文件扩展它们时 ImageButton 的样式正确,但当我直接使用 ImageButton 构造函数创建它们时却没有。

GridLayout 和 ImageButtons 之前都在同一个布局 .xml 文件中定义(并按预期呈现):

<ScrollView 
style="@style/my_list_style"
android:layout_height="wrap_content">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="12dp">

<GridLayout
android:id="@+id/my_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center">

<!-- These ImageButtons are being converted to dynamic. -->
<ImageButton
style="@style/my_button_style"
android:src="@drawable/image1" />

<ImageButton
style="@style/my_button_style"
android:src="@drawable/image2" />

</GridLayout>
</LinearLayout>
</ScrollView>

为了将 ImageButton 转换为动态的,我首先将它们从布局文件中删除,并使用如下代码在运行时添加它们:

ImageButton imageButton = new ImageButton(context, null, R.style.my_button_style);
imageButton.setImageResource(R.drawable.image1);
parent.addView(imageButton);

但是按钮未能正确呈现;它们没有居中,并且它们的大小看起来不正确/不均匀。

然后我尝试创建一个新的布局文件,其中只包含 ImageButton 及其样式:

<ImageButton
style="@style/my_button_style"/>

当我在运行时将此布局扩展到 GridView 中时,一切看起来都符合预期:

LayoutInflater inflater = LayoutInflater.from(context);
ImageButton imageButton = (ImageButton) inflater.inflate(
R.layout.my_button_layout, parent, false);
imageButton.setImageResource(R.drawable.image1);
parent.addView(imageButton);

为什么使用 LayoutInflator 填充 View 会产生与直接从其构造函数创建按钮不同的结果?

最佳答案

因为当您手动创建 ImageButton 时,您没有指定其父级,因此它不知道其父级的布局参数,因此无法按照您的预期进行布局。

另一方面,当您通过 LayoutInflater 对其进行膨胀时,您指定的是 parent。然后将正确的布局参数传递给 child 。这就是您看到差异的原因。

看看detailed article戴夫·史密斯。

关于android - 动态创建时 ImageButton 显示不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42238278/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com