【问题标题】: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 visible 和 getVisibility() 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
相关资源
最近更新 更多