Android:在视图上调用setPadding()不起作用,但我同时在视图上设置了layoutParams

k4ymrczo  于 2022-12-09  发布在  Android
关注(0)|答案(2)|浏览(298)

如果我在视图上调用setPadding(),我可以成功地设置填充,但是,如果我先设置layoutParams,然后设置填充,或者先设置填充,然后设置layoutParams,则不会应用填充。
演示:

//This doesn't work
    textView.setLayoutParams(linearLayoutParams);
    textView.setPadding(0, 100, 0 , 0);

    //This doesn't work either
    testView.setPadding(0, 100, 0 , 0);
    textView.setLayoutParams(linearLayoutParams);

    //This does work
    textView.setPadding(0, 100, 0 , 0);

有没有人知道如何同时使用setLayoutParams()和setPadding(),或者为什么setLayoutParams()会阻止setPadding()工作?

编辑:更多详细信息:

我在onCreate()中调用此方法

public void initTextView(){

Textview textView = (TextView) findViewById(R.id.textView); 

LinearLayout.LayoutParams  linearLayoutParams = new LinearLayout.LayoutParams(myWidth, myHeight);

textView.setLayoutParams(linearLayoutParams);

//This doesn't work
textView.setPadding(0, 100 ,0 , 0);

}

但是如果我从上面注解掉这一行:

// textView.setLayoutParams(linearLayoutParams);

这样setPadding()方法就可以正常工作了。
先谢谢你。

5jvtdoz2

5jvtdoz21#

我不相信代码有什么问题,而只是不理解它在做什么....如果你的myHeight值小于填充,你只是不会注意到效果。
在所附的一系列屏幕截图中,第一个屏幕截图是包含价格的默认TextView(除了xml中设置的布局参数外,它没有布局参数)。
在第二个屏幕截图中,我将textview设置为以下值(高度=30,顶部填充= 100:

LinearLayout.LayoutParams  linearLayoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 30);
textview.setLayoutParams(linearLayoutParams);
textview.setPadding(0, 100, 0, 0);

文本在那里,顶部填充在那里,但它都被强制“裁剪”到设置的高度30(注意,我还丢失了所有原始的xml参数(重力、边距等),因为设置LayoutParams取消了所有这些参数,只应用我在这些LayoutParams中设置的任何内容)。
在第三个屏幕截图中,我将textview设置为以下值(高度=150,顶部填充= 100:

LinearLayout.LayoutParams  linearLayoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 150);
textview.setLayoutParams(linearLayoutParams);
textview.setPadding(0, 100, 0, 0);

瞧!因为我给了视图足够的高度,它可以完全显示文本和顶部填充(尽管我再次丢失了所有的xml参数)。如果您返回到源代码,请尝试一下:将myHeight替换为某个固定值(尝试至少为150),然后查看是否显示了应有的内容。

7rfyedvj

7rfyedvj2#

object ScreenUtils {fun dpToPixel(dp: Int): Int {
  return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp.toFloat(), Resources.getSystem().displayMetrics).toInt()}}

在Kotlin

setPadding(ScreenUtils.dpToPixel(8), 0, ScreenUtils.dpToPixel(8), 0)

相关问题