如果我在视图上调用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()方法确实有效。
提前致谢。
答案 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),看看事情是否显示出来。