【问题标题】:Button wont turn visible when clicking单击时按钮不会变为可见
【发布时间】:2016-12-08 08:16:41
【问题描述】:

我有一个按钮,我想在每次单击图像视图时使其可见和不可见。 我试过设置不可见/可见,但它不起作用。

这是我的代码:

public class FullScreenImageAdapter extends PagerAdapter {

    Button btnClose;
    private Activity _activity;
    private ArrayList<String> _imagePaths;
    private LayoutInflater inflater;

    // constructor
    public FullScreenImageAdapter(Activity activity,
                                  ArrayList<String> imagePaths) {
        this._activity = activity;
        this._imagePaths = imagePaths;
    }

    @Override
    public int getCount() {
        return this._imagePaths.size();
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == ((RelativeLayout) object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        TouchImageView imgDisplay;

        inflater = (LayoutInflater) _activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View viewLayout = inflater.inflate(R.layout.layout_fullscreen_image, container,
                false);
        hideBar();
        imgDisplay = (TouchImageView) viewLayout.findViewById(R.id.imgDisplay);
        btnClose = (Button) viewLayout.findViewById(R.id.btnClose);
        Picasso.with(_activity)
                .load(_imagePaths.get(position))
                .placeholder(R.drawable.loader)
                .fit()
                .centerCrop().into(imgDisplay);

        // close button click event
        btnClose.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                _activity.finish();
            }
        });

        imgDisplay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                hideBar();
                hideButton();
            }
        });

        ((ViewPager) container).addView(viewLayout);

        return viewLayout;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        ((ViewPager) container).removeView((RelativeLayout) object);
    }

    public void hideBar() {
        View decorView = _activity.getWindow().getDecorView();
        int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN;
        decorView.setSystemUiVisibility(uiOptions);
    }

    public void hideButton() {
        if (btnClose.isShown()){
            btnClose.setVisibility(View.INVISIBLE);
        }else{
            btnClose.setVisibility(View.VISIBLE);
        }
    }
    }

这是我的 xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.example.shaka.we.ImageHelper.helper.TouchImageView
    android:id="@+id/imgDisplay"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
    android:scaleType="fitCenter" />

<Button
    android:id="@+id/btnClose"
    android:layout_width="40dp"
    android:layout_height="40dp"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_marginRight="15dp"
    android:layout_marginTop="15dp"
    android:background="@drawable/redx"
    android:paddingBottom="2dp"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:paddingTop="2dp"
    android:visibility="invisible"/>

</RelativeLayout>

有人可以帮我吗?

【问题讨论】:

  • 代码的哪一部分负责使其可见?
  • 您是否尝试过放入日志或断点以查看是否到达了您期望的代码块?
  • 你可以查看这个问题寻求帮助:stackoverflow.com/questions/6796299/…
  • 我查过了。它对我不起作用。我会继续寻找。谢谢。

标签: android xml visibility


【解决方案1】:
public void hideButton() {
    if (btnClose.isShown()){
        btnClose.setVisibility(View.INVISIBLE);
    }else{
        btnClose.setVisibility(View.VISIBLE);
    }
}

调用isShown 不是检查视图是否显示或可见的好方法。检查其实际可见性,如下所示

public void hideButton() {
    if (btnClose.getVisibility() != View.VISIBLE){
        btnClose.setVisibility(View.VISIBLE);
    }else{
        btnClose.setVisibility(View.INVISIBLE);
    }
}

【讨论】:

  • 它在做什么?
  • 我添加了以下代码:'public void hideButton() { if (btnClose.getVisibility() == View.VISIBLE){ Toast.makeText(_activity, "Turn invisible", Toast.LENGTH_SHORT)。显示(); btnClose.setVisibility(View.INVISIBLE); }else{ btnClose.setVisibility(View.VISIBLE); Toast.makeText(_activity, "变得可见", Toast.LENGTH_SHORT).show(); } }' 它总是显示 Turn Invisible 但不会关闭可见性
  • TouchImageView这个类有什么特别之处
  • 只是一个简单的适配器
【解决方案2】:

您可以使用view.getVisibility()view.isShow() 检查视图是否可见。但请记住:isShow() returns the visibility of this view and all of its ancestors. True if this view and all of its ancestors are visiblegetVisibility() returns the visibility status for this view, which are VISIBLE, INVISIBLE, GONE. True if this view is visible。在您的情况下,该按钮具有始终可见的父级,因此 btnClose.isShown 为真,因此您在单击图像视图时始终执行 btnClose.setVisibility(View.INVISIBLE);

【讨论】:

  • 我试过了,它现在显示按钮的正确状态,但它不会隐藏它。
猜你喜欢
  • 2016-03-17
  • 2020-08-10
  • 2020-08-21
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
  • 2019-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多