2012-10-17 4 views
6

Ich habe eine ToggleButton. Ich möchte mehr Platz haben, um auf diesen Knopf zu klicken. Wenn ich layout_width, layout_height usw. hinzufüge, sieht das Bild schlecht aus. Ich habe auch versucht, android:padding zu verwenden, aber es hat mir nicht geholfen.Wie kann ich den Touch-Bereich für Steuerelemente (ToggleButton) erhöhen?

Es wird für den Komfort der Benutzer benötigt.

enter image description here

+1

, was ist das Problem, wenn du benutzt Polsterung? – Syn3sthete

+0

Versuchen Sie TouchDelegate, hier ist ein Beispiel, wie man es benutzt http://stackoverflow.com/questions/1343222/is-there-an-example-of-how-to-use-a-touchdelegate-in-android-to- erhöhen-die-siz/1343796 # 1343796 – ammar26

Antwort

3

Einfache Lösung: Wenn Sie ein Bild für die Schaltfläche haben, erstellen Sie einen transparenten Bereich um sie herum (d. H. Für den Berührungsbereich).

Der graue Bereich kann transparent sein, um den Berührungsbereich zu vergrößern.

enter image description here

Oder verwenden TouchDelegate

0

Nehmen Sie den margin (Ort des padding) Ihre Button von seinem parent layout und dann opration ausführen auf Ihrem Layout

mLayout.setonTouchListener(View.onTouchListener{ 
    // here your working code 
}); 
2

Statt um das Berührungsereignis des Setzens steckte es in dem Layout enthält nur die Schaltfläche .. und fixieren Sie die Größe des Layouts als Ihren Wunsch

3

Verwenden Sie TouchDelegate für Ihre ToggleButton als ammar26 haben Sie kommentiert.

Oder

Try this:

Machen Sie ein Elternteil Layout wie LinearLayout oder RelativeLayout, die die ToggleButton decken. Und jetzt legen Sie Marge zu diesem übergeordneten Layout.

Nun klicken Sie auf das übergeordnete Layout und führen Sie die Aktion für die Schaltfläche aus.

Ich hoffe, es wird Ihnen helfen, Touch-Bereich für Ihre Ansicht zu erhöhen.

Glückliche Kodierung.

+0

Ihr zweiter Ansatz ist mehr oder weniger wie TouchDelegate funktioniert. Das übergeordnete Element des ToggleButton wird auf Berührungsereignisse warten: Wenn sich eines innerhalb der angegebenen Grenzen befindet, wird der Klick von TouchDelegate an den ToggleButton weitergeleitet –

2

steigen die Werte von android:padding:

<SeekBar android:id="@+id/seek" android:layout_width="0dip" 
android:layout_height="wrap_content" android:layout_weight="1" 
android:paddingTop="5dp" android:paddingBottom="5dp" 
android:progressDrawable="@drawable/green_scrubber_progress_horizontal_holo_ligh‌​t" 
android:thumb="@drawable/thumb" /> 
3

Sie können auch Touch-Bereich erhöhen, indem touch delegates Einstellung Android Developer Training Blog Post

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     // Get the parent view 
     View parentView = findViewById(R.id.parent_layout); 

     parentView.post(new Runnable() { 
      // Post in the parent's message queue to make sure the parent 
      // lays out its children before you call getHitRect() 
      @Override 
      public void run() { 
       // The bounds for the delegate view (an ImageButton 
       // in this example) 
       Rect delegateArea = new Rect(); 
       ImageButton myButton = (ImageButton) findViewById(R.id.button); 
       myButton.setEnabled(true); 
       myButton.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         Toast.makeText(MainActivity.this, 
           "Touch occurred within ImageButton touch region.", 
           Toast.LENGTH_SHORT).show(); 
        } 
       }); 

       // The hit rectangle for the ImageButton 
       myButton.getHitRect(delegateArea); 

       // Extend the touch area of the ImageButton beyond its bounds 
       // on the right and bottom. 
       delegateArea.right += 100; 
       delegateArea.bottom += 100; 

       // Instantiate a TouchDelegate. 
       // "delegateArea" is the bounds in local coordinates of 
       // the containing view to be mapped to the delegate view. 
       // "myButton" is the child view that should receive motion 
       // events. 
       TouchDelegate touchDelegate = new TouchDelegate(delegateArea, 
         myButton); 

       // Sets the TouchDelegate on the parent view, such that touches 
       // within the touch delegate bounds are routed to the child. 
       if (View.class.isInstance(myButton.getParent())) { 
        ((View) myButton.getParent()).setTouchDelegate(touchDelegate); 
       } 
      } 
     }); 
    } 
}