android - Android:添加左可绘制对象时如何修复按钮的文本
问题描述
我创建了自定义视图。在我的课堂上,我创建了一个按钮:
button = new AppCompatButton(getContext());
LayoutParams button_params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
button_params.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
button.setLayoutParams(button_params);
button.setText(TextUtils.isEmpty(progressText) ? "Button" : progressText);
button.setGravity(Gravity.CENTER);
button.setOnClickListener(v -> {
progressBar.setVisibility(VISIBLE);
});
addView(button);
我向这个按钮添加了一个drawable,如下所示:
if (isDone) {
progressBar.setVisibility(GONE);
Drawable drawable = getResources().getDrawable(progressIconSuccess);
drawable.setBounds(0, 0, 100, 100);
button.setCompoundDrawables(drawable, null, null, null);
}
但是当drawable添加到按钮时,按钮文本向右移动:
在可绘制之前添加:
可绘制后添加:
我不想将按钮文本向右移动。我想保持固定而不改变它的位置。我该怎么做?
我以这种方式使用我的自定义视图:
<com.tazik.progressbutton.ProgressButton
android:id="@+id/pb_button"
android:layout_width="150dp"
android:layout_height="70dp"
app:progress_height="30"
app:progress_width="30"
app:progress_text = "Register"
app:progress_iconfail="@drawable/ic_fail"
app:progress_iconSuccess="@drawable/ic_done"/>
解决方案
使用新的
MaterialIconButton
:
按钮 XML 代码:
<com.google.android.material.button.MaterialButton
android:id="@+id/btn"
style="@style/Widget.MaterialComponents.Button.Icon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Icon Button"
/>
活动代码:
public class MainActivity extends AppCompatActivity {
MaterialButton iconButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.testing);
iconButton=findViewById(R.id.btn);
iconButton.setIcon(R.drawable.your_icon);
iconButton.setIconGravity(MaterialButton.ICON_GRAVITY_START);
}
}
推荐阅读
- c++ - GCC 和 Clang 之间的 lambda 与函数的完全相反的基准测试结果
- amazon-web-services - AWS SES - 我做得对吗?
- css - react material-ui 如何覆盖 muibox-root
- python - 不正确的整数值 mySQL
- javascript - 谷歌地图回调并不总是触发
- java - 子文件夹不显示文本文件 - JAVA
- lua - 使用 zerobrane 调试 openresty
- html - 将不在我计算机上的图像上传到 Cloudinary
- nginx - NGINX 代理通行证 - 来自同一服务器的多个入口页面
- node.js - 如何暂停正在语音频道 discordjs 中播放的 mp3 文件