setPadding()在Button上以编程方式不起作用

时间:2018-06-20 22:54:29

标签: android android-layout button

当我使用XML在按钮上设置填充时,它可以正常工作。

按钮的XML:

<Button
    android:id="@+id/comment_video"
    android:layout_below="@+id/input_layout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/comment_video"
    android:textColor="@android:color/white"
    android:backgroundTint="@color/colorAccent"
    android:layout_alignParentEnd="true"
    android:textSize="14sp"
    android:padding="10dp"
    android:layout_marginTop="0dp"
    android:layout_marginEnd="10dp"
    android:visibility="gone"/>

按钮的屏幕截图:

enter image description here

然后,当我以编程方式进行操作时,它将无法正常工作。

按钮代码:

// Add reply button
final Button replyButton = new Button(mContext);
replyButton.setId(170000 + i2);
replyButton.setText("REPLY");
replyButton.setTextColor(Color.parseColor("#FFFFFF"));
replyButton.setBackgroundColor(Color.parseColor("#C70000"));
replyButton.setPadding(dp10_in_px, dp10_in_px, dp10_in_px, dp10_in_px);
replyButton.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
replyButton.setVisibility(View.GONE);

RelativeLayout.LayoutParams lp8 = new RelativeLayout.LayoutParams(
        ViewGroup.LayoutParams.WRAP_CONTENT,
        ViewGroup.LayoutParams.WRAP_CONTENT);
lp8.addRule(RelativeLayout.BELOW, textInputLayout.getId());
lp8.addRule(RelativeLayout.ALIGN_PARENT_END, relativeLayout3.getId());
lp8.setMargins(0, dp4_in_px, dp10_in_px, dp10_in_px);
replyButton.setLayoutParams(lp8);

按钮的屏幕截图:

enter image description here

我根据YouTube数据动态设置了数千个观看次数,并且必须以编程方式进行,至少据我所知。

setPadding和setMargin中用于变量的公式如下:

int dp4 = 4;  // 4 dps
final float scale = getResources().getDisplayMetrics().density;
int dp4_in_px = (int) (dp4 * scale + 0.5f);
int dp10 = 10;  // 10 dps
int dp10_in_px = (int) (dp10 * scale + 0.5f);

感谢您的帮助。

更新1-布局范围的屏幕截图

enter image description here

更新2-尖角

可能是一个线索的另一个小细节。以编程方式制作的按钮上的角很尖。通常,它们有些舍入。

2 个答案:

答案 0 :(得分:1)

好的,在war_Hero的帮助下,我找到了解决方法。

setBackgroundColor()不起作用。它将包括填充在内的整个背景设置为相同的颜色。

此:

replyButton.setBackgroundColor(Color.parseColor("#C70000"));

应替换为以下内容:

replyButton.getBackground().setColorFilter(ContextCompat.getColor(mContext, R.color.colorAccent), PorterDuff.Mode.MULTIPLY);

答案 1 :(得分:0)

尝试一下:

new_string = " ".join(string.split("_")[:-1])

您应该替换这样的行

replyButton.setPadding(dp10_in_px, dp10_in_px, dp10_in_px, dp10_in_px);