2016-07-20 22 views
0

ユーザーがアプリを初めて起動したときに簡単なメッセージを表示するために、画面全体をカバーするオーバーレイがあります。このオーバーレイには、オーバーレイを解除するボタンが1つあります(その表示を消すように設定します)。私は解決する方法がわからないキャッチ22を持っています。Android - ボタンでオーバーレイが正しく応答しない

まず、XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main_rootview" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="Activity.MainActivity" 
    android:orientation="vertical"> 

    <include 
     android:id="@+id/activity_main_content" 
     layout="@layout/main_content"/> 

    <RelativeLayout 
     android:id="@+id/activity_main_overlay" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:visibility="gone" 
     android:background="#B3000000"> 

     <Button 
      android:id="@+id/button dismiss" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="15dp" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentRight="true" 
      android:layout_marginBottom="10dp" 
      android:layout_marginRight="10dp" 
      android:text="@string/ok"/> 

    </RelativeLayout> 

</RelativeLayout> 

彼らはアプリを起動非常に最初の時間は、私が見えるように、このオーバーレイを設定します。ボタンをクリックすると、オーバーレイの表示がView.GONEに設定されます。このコードが立っているので、ボタンをクリックするとすべてがうまくいきます。ただし、オーバーレイの他の場所をクリックすると、クリックはオーバーレイを通過し、オーバーレイの背後にあるコンテンツはオーバーレイが存在しないかのように応答します。このオーバーレイでクリックを吸収し、ボタンにのみ反応します。

したがって、明白な応答はclickable="true"をオーバーレイに追加することです。しかし、ボタン自体はクリックに反応せず、ユーザーはオーバーレイにぶら下がり、オーバーレイの目的をすべて破ります。時には、私が十分に長く待っていると、ボタンのクリックが発生しますが、これが起こったとしても、ボタンが応答するまでには受け入れられないほど長い時間がかかります。

ボタンをクリックに反応させると同時に、他のすべてのタップイベントをオーバーレイで使用する方法を教えてください。助けてくれてありがとう。

+1

書き込みのonClickまたはonTouchイベント。 – Drv

答えて

0

恐らく最もクリーンな解決策ではないかもしれませんが、オーバーレイでonclickListenerイベントを設定することができます。あなたのオーバーレイのあなたの親relativelayoutため 例えば

RelativeLayout overlay = (RelativeLayout)findViewById(R.id.activity_main_overlay); 
overlay.setOnClickListener(new OnClickListener(){ 

}); 
//button click 
Button btn = findViewById(R.id.button_dismiss); 
btn.setOnClickListener(new OnClickListener(){ 
    @Override 
    public void onClick(View v) { 
     //button action 
    } 

); 
+0

私はこれを試しましたが、私はまだ無反応で同じ問題があります。私はそれが私の問題を解決すると思うので、これを答えにするつもりです。私の推測では、クリック応答を遅らせるアプリで何か他のことが起こっているということです。ありがとう! – Alex

関連する問題