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

Android: calling setPadding() on a view doesn't work when I also set the layoutParams on the view

如果我在视图上调用setPadding(),我可以成功设置padding,但是,如果我先设置layoutParams然后设置padding,或者设置padding然后设置layoutParams,则不会应用padding .

示范:

    //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() 方法就起作用了。

提前致谢。

我不认为代码有任何问题,只是不理解它在做什么....如果您的 myHeight 值小于填充,您根本不会注意到效果。

在随附的一系列屏幕截图中,第一个屏幕截图是包含价格的默认 TextView(除了 xml 中设置的内容外,它没有布局参数)。

在第二张截图中,我将文本视图设置为以下内容(高度=30,顶部填充=100:

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

文本在那里,顶部填充在那里,但是它全部被强制"crop"设置为30的高度(注意我也丢失了所有原始xml参数(重力,边距等)因为设置 LayoutParams 取消了所有这些并且只应用我在那些 LayoutParams 中设置的任何内容)。

在第 3 个屏幕截图中,我将 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)并查看是否按应有的方式显示。