当我使用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"/>
按钮的屏幕截图:
然后,当我以编程方式进行操作时,它将无法正常工作。
按钮代码:
// 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);
按钮的屏幕截图:
我根据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-布局范围的屏幕截图
更新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);