繁体   English   中英

android-使textView不可见

[英]android - make textView invisible

当我的应用启动时,用户需要先触摸屏幕,然后才能执行实际操作。 我有一个textView ,它给出了触摸屏幕的提示。

触摸屏幕后,我希望文本不可见 现在, textView永远不会消失,始终停留在最前面。

public class MainActivity extends Activity implements OnGestureListener
{       
    public boolean touched = false;
    TextView mMyView;

    public void onTouch() 
    {
        mMyView.setVisibility(View.GONE);  
        touched = true;                 
    }

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {   
        super.onCreate(savedInstanceState);                       
        setContentView(R.layout.activity_game);
        mMyView = (TextView)findViewById(R.id.textView6);

        if(touched == true) 
        {

        }

    }
}

1. if(something)要查看它是否为true/false则始终使用if(something)而不是编写if(something == true) [something是一个布尔值,赋值为true。]

2.如果您将xml指向使用android:onClick的方法,如下所示,

<Button android:id="@+id/mybutton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Click me!"
    android:onClick="onTouch" />

实现OnGestureListener的意义OnGestureListener

如果我在onCreate执行此操作, onCreate初始化我的视图

View myView = findViewById(R.id.my_view);

3.如果我真的想要触摸我会这样做

myView.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        // ... Respond to touch events --> tv.setVisibility(View.INVISIBLE);
        return true; // if you return false with this then the listener will not be called for the subsequent ACTION_MOVE and ACTION_UP string of events.
    }
});
  1. 现在,您可以在第3个参数中看到一个MotionEvent ,可以识别动作ACTION_DOWNACTION_MOVEACTION_UP

现在想想您是否曾经使用过它们。 您对触摸有个主意,因此尝试使用触摸事件..但是您不使用它们。 因此,它与您的案例中的onClickListner一样。 如果您想使用我给的第三个动作。

但是您可以简单地使用

 // view is the background layout
    myView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // Do something here --> Hide your text  tv.setVisibility(View.INVISIBLE);
        }
    });

这些浏览onClickListnersetOnTouchListener你可以直接使用它们里面onCreate或者让他们的方法里,你甚至可以从该方法onCreate 为什么要保留布尔值? 没什么大不了的

注意我认为myView是背景布局,而不是您的textView,background是您单击/触摸的背景

因此,现在您多次更改了问题代码,我希望这是最终的更改。 仅比我的答案有用。

您已经在onCreate()完成了此操作:

 if(touched == true) 
        {
           tv.setVisibility(View.INVISIBLE);           
        }

但这是直接执行的,与您的onTouch()方法无关。 假设您的onTouch()正常工作。 使TextView 全局

TextView mMyView;

onCreate()初始化它:

mMyView = (TextView)findViewById(R.id.textView6);

然后将其隐藏在onTouch()

onTouch(View view){

mMyView.setVisibility(View.GONE);
}

但是您必须确保您的方法onTouch()有效。 您可以制作Toast或日志进行检查。 您必须确保:

TextView位于您使用setContentView(R.layout.activity_game);设置的布局xml中setContentView(R.layout.activity_game);

-在您的TextView的xml属性中声明了onTouch()方法

android:onClick="onTouch"

并将TextView clickable设置为true:

android:clickable="true";

编辑

如果您实现onGestureListener()我认为触摸事件已由侦听器占用,并且您的TextView 无法识别onTouch() 如果您在活动中未进行任何手势检测,请删除此实现。

您正在检查是否在onCreate()触摸了屏幕,该onCreate()在活动开始时仅被调用一次。 全局初始化TextView并在onTouch(View v, MotionEvent event) onTouch() onTouch(View v, MotionEvent event)内设置其可见性另外,您的onTouch()是不正确的。 您应该重写public boolean onTouch(View v, MotionEvent event)

public class MainActivity extends Activity
{       
    public boolean touched = false;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {   
        super.onCreate(savedInstanceState);                       
        setContentView(R.layout.activity_game);
        TextView tv = (TextView) findViewById(R.id.textView6);
        tv.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                touched = true; 
                tv.setVisibility(View.INVISIBLE);  

                return true;
            }
        });
    }
}

除了实现OnGestureListener setOnTouchListener ,还可以在活动布局的根视图中添加setOnTouchListener

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rlTestView"/>

例如rlTestView是您活动的根布局ID,然后在oncreate方法中使用以下代码

((RelativeLayout)findViewById(R.id.rlTestView)).setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            tv.setVisibility(View.GONE); 

            return true;
        }
    });`

onCreate方法上使用以下代码,并且将visibility设置为GONE而不是不可见。 还规定了当前公开程度 TextViewonTouch然后将其设置为

  tv.setVisibility(View.GONE);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM