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

时间:2015-11-04 13:49:39

标签: java android view android-linearlayout layoutparams

如果我在视图上调用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()方法确实有效。

提前致谢。

1 个答案:

答案 0 :(得分:2)

我不相信代码存在任何问题,而只是不了解它所做的事情......如果你的myHeight值小于填充值,你就可以了。只是根本没有注意到效果。

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

在第二个屏幕截图中,我将textview设置为以下(height = 30,top padding = 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设置为以下(height = 150,top padding = 100:

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

瞧!由于我给了视图足够的高度,它可以完全显示文本和顶部填充(虽然我再次丢失了所有的xml参数)..如果你回到你的源代码,试试看:用myHeight替换一些固定值(尝试至少150),看看事情是否显示出来。

enter image description here