设置TextView的填充无效。

7

我正在尝试通过TextView实现标签。我在EditText中输入内容,然后按下按钮添加标签。 我通过程序为TextView添加填充和矩形背景,但是填充设置没有任何效果。如何添加填充使其有效?

public void tag_it_callback (View view) {
    Log.v("actv", "tag it callback");
    LinearLayout main_layout = (LinearLayout) findViewById(R.id.main_layout);

    TextView tv = new TextView(this);

    tv.setText( ((EditText) findViewById(R.id.textfield)).getText() );
    main_layout.addView(tv);

    transform_tag(tv);
}

public void transform_tag(TextView tv) {

    // set padding and background
    int padding = 10;
    tv.setPaddingRelative(20, 20, 20, 20);
    tv.setPadding(20, 20, 20, 20);
    tv.setBackgroundResource(R.drawable.border);

    // set layout width and height
    LayoutParams params= (LayoutParams) tv.getLayoutParams();
    Log.v("actv", "params "+params);
    if ( params != null ) {
        params.width=LayoutParams.WRAP_CONTENT;
        params.height=LayoutParams.WRAP_CONTENT;
    } else {
        params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    }
    tv.setLayoutParams(params)
}

border.xml的内容如下

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
      <item> 
         <shape android:shape="rectangle">
      <solid android:color="#FF0000" /> 
      <corners
        android:bottomLeftRadius="8dp"
        android:bottomRightRadius="8dp"
        android:topLeftRadius="8dp"
        android:topRightRadius="8dp" />
    </shape>
  </item>   
  <item android:left="5dp" android:right="5dp" android:top="5dp" android:bottom="5dp">  
    <shape android:shape="rectangle"> 
      <solid android:color="#000000" />
    </shape>
   </item>    
     </layer-list>"`<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
      <item> 
    <shape android:shape="rectangle">
      <solid android:color="#FF0000" /> 
      <corners
        android:bottomLeftRadius="8dp"
        android:bottomRightRadius="8dp"
        android:topLeftRadius="8dp"
        android:topRightRadius="8dp" />
    </shape>
  </item>   
  <item android:left="5dp" android:right="5dp" android:top="5dp" android:bottom="5dp">  
    <shape android:shape="rectangle"> 
      <solid android:color="#000000" />
    </shape>
   </item>    
     </layer-list>`
2个回答

69

我终于找到了问题所在,我必须先设置背景,再设置填充。先设置填充再设置背景是不起作用的。

// does not work
tv.setPadding(20, 20, 20, 20);
tv.setBackgroundResource(R.drawable.border);


// works
tv.setBackgroundResource(R.drawable.border);
tv.setPadding(20, 20, 20, 20);

4
已在安卓4.4 KitKat版修复(可能在早期版本中)。 - Guilherme Torres Castro
谢谢!这让我困惑了一段时间,因为我的填充在Android 4.3上没有被应用。结果发现是因为我在设置填充后设置了视图的颜色。 - NSouth
1
我在Nougat模拟器中遇到了这个bug。非常奇怪。 - Konstantin Berkov
1
我在测试 Android 4.2.2 上的三星 Galaxy S3 时遇到了类似的问题。即使 XML 布局中已经设置了填充,但后来以编程方式设置背景时,填充也被忽略了。最终我按照这个答案建议的方法,仅以编程方式按正确顺序设置背景和填充,解决了这个问题。 - Marilia

0
tv.setPadding(20, 20, 20, 20);
tv.setBackgroundResource(R.drawable.border);

1
那不起作用。我看不到填充。背景边框仍然非常靠近文本。 - Teong Leong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接