我试图创建一个包含一个按钮和一个进度条的自定义视图。这是XML
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="@drawable/selector_button_primary"
android:padding="@dimen/size_s"
android:text=""
android:textColor="@android:color/white"
android:textSize="@dimen/size_m" />
<ProgressBar
android:id="@+id/progressbar"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layout_gravity="center"
android:indeterminate="true"
android:indeterminateTint="@android:color/white"
android:indeterminateTintMode="src_atop"
android:padding="@dimen/size_xxs"
android:elevation="2dp"
android:visibility="gone"/>
</FrameLayout>
我创建了一个自定义视图,其中包含
public class ProgressButton extends FrameLayout {
private boolean isLoading = false;
ProgressBar progressBar;
Button button;
String text;
@Override
public void setOnClickListener(@Nullable OnClickListener l) {
super.setOnClickListener(l);
button.setOnClickListener(l);
}
public void setText(String text){
this.text = text;
button.setText(text);
}
public boolean isLoading() {
return isLoading;
}
public void setLoading(boolean loading) {
isLoading = loading;
if (isLoading) {
button.setText("");
button.setClickable(false);
progressBar.setVisibility(VISIBLE);
} else {
progressBar.setVisibility(GONE);
button.setText(text);
button.setClickable(true);
}
System.out.println("Progressbutton: IsLoading "+isLoading);
}
public ProgressButton(Context context) {
super(context);
initView();
}
public ProgressButton(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
public ProgressButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
private void initView() {
System.out.println("initview");
View inflated = inflate(getContext(), R.layout.loader_button_primary, this);
progressBar = inflated.findViewById(R.id.progressbar);
button = inflated.findViewById(R.id.button);
}
}
并这样使用
val bt_sign_in = findViewById(R.id.bt_startup_sign_in) as ProgressButton
bt_sign_in.setText("Log in")
bt_sign_in.setOnClickListener{
bt_sign_in.setLoading(!bt_sign_in.isLoading)
}
现在发生了一些非常奇怪的事情:-文本的出现和消失是我所期望的。android:visibility="visible"
在XML文件中,我确实看到了我所期望的进度条。但是在点击之后,它就一直不可见了。
为什么它在程序上保持隐藏?
bt_sign_in.setLoading(!bt_sign_in.isLoading)
你的进度条和文本的切换。