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)并查看是否按应有的方式显示。
如果我在视图上调用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)并查看是否按应有的方式显示。