Android进度条在自定义视图中不显示

问题描述 投票:0回答:1

我试图创建一个包含一个按钮和一个进度条的自定义视图。这是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文件中,我确实看到了我所期望的进度条。但是在点击之后,它就一直不可见了。

为什么它在程序上保持隐藏?

android button view
1个回答
0
投票
  1. 你有两个clicklistener,并与你的逻辑。

bt_sign_in.setLoading(!bt_sign_in.isLoading)

你的进度条和文本的切换。

  1. VISIBLE和GONE是否正确导入?从视图包中导入?
© www.soinside.com 2019 - 2024. All rights reserved.