2015-06-02 13 views
6

Chcę zwiększyć klikalny obszar przycisku.Ale obrazek w przycisku powinien pozostać tego samego rozmiaru.Również ustawiłem obraz jako tło, a nie jako źródło .Jak mogę to zrobić? ?Zwiększenie powierzchni kliknięcia przycisku

<Button 
     android:id="@+id/backbutton" 
     android:layout_width="25dp" 
     android:layout_height="25dp" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="15dp" 
     android:layout_marginTop="5dp" 
     android:background="@drawable/arrow" 
     android:paddingLeft="10dp" 
     android:paddingRight="10dp" 

     android:textColor="@color/title_gray" 
     android:textSize="14sp" 


     android:visibility="visible" /> 
+1

użycie 'android: wyściółka = "20dp"' lub więcej zamiast wyściółka lewo i prawo – Pankaj

+0

@Clairvoyant ale W jaki sposób zwiększy się obszar klikalności? Również szerokość_przycisku i wysokość_pozycji to 25pb –

+0

@ Rozwiązanie firmy Clairvoyant zwiększy ogólny rozmiar twojego przycisku. Jeśli chcesz, aby przycisk był taki sam, ale aby móc go klikać, możesz zrobić przezroczysty przycisk i umieścić układ z zawartością wewnątrz. –

Odpowiedz

4

Tylko układ nadrzędny przycisku (o większym rozmiarze lub klikalne rozmiarze) i wykonać zdarzenie click tego jak -

<LinearLayout 
android:id="@+id/backbuttonlayout" 
     android:layout_width="50dp" 
     android:layout_height="50dp"> 
<Button 
     android:id="@+id/backbutton" 
     android:layout_width="25dp" 
     android:layout_height="25dp" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="15dp" 
     android:layout_marginTop="5dp" 
     android:background="@drawable/arrow" 
     android:paddingLeft="10dp" 
     android:paddingRight="10dp" 

     android:textColor="@color/title_gray" 
     android:textSize="14sp" 


     android:visibility="visible" /> 
</LinearLayout> 

Teraz wewnątrz swojej działalności, nie podoba -

LinearLayout backbuttonlayout = (LinearLayout)findViewById(R.id.backbuttonlayout); 

i wykonać setOnClickListener() na backbuttonlayout

+0

Już mi odpowiedział – Pankaj

+0

Tak, właśnie widziałem. – NarendraJi

+1

to jest złe dla dostępności – EdgarMarcoPolo

0
  1. Usuń margines, użyj wypełnienia wokół przycisku.
  2. Otaczanie przycisku za pomocą wypowiedzenia LinearLayout z dopełnieniem przycisku.
  3. Dodaj ten sam adres do LinearLayout jako przycisku.
1

Możesz użyć wypełnienia. Umieści przestrzeń wewnątrz widoku (margines wystawi ją na zewnątrz).

Na przykład poniższy kod zapewni klikalny obszar 20dp, ale tło będzie miało 10dp.

<Button 
android:layout_width="20dp" 
android:layout_height="20dp" 
android:background="@drawable/your_background" 
android:padding="10dp" /> 
4

Zastosowanie klasa TouchDelegate

pomocniczy do obsługi sytuacji, w których chcesz mieć widok, aby mieć większy obszar dotykowy niż jego rzeczywisty widok granicami. Widok, którego obszar dotykowy jest zmieniony, nazywany jest widokiem delegatów. Klasa ta powinna być używana przez przodka delegata. Aby użyć TouchDelegate, najpierw utwórz instancję, która określa granice, które powinny być odwzorowane na delegata i widok delegatów.

Przykład

public class LaunchActivity extends Activity { 

    private Button MyButton; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_launch); 

     MyButton = (Button)findViewById(R.id.Button1); //Your button ID 
     View parent = findViewById(R.id.layout);  //Your Layout ID 
     parent.post(new Runnable() { 
      @Override 
      public void run() { 
       Rect delegateArea = new Rect(); 
       Button delegate = MyButton; 
       delegate.getHitRect(delegateArea); 
       delegateArea.top -= 600;   //Choose yourself 
       delegateArea.bottom += 600; 
       delegateArea.left -= 600; 
       delegateArea.right += 600; 

       TouchDelegate expandedArea = new TouchDelegate(delegateArea, delegate); 
       // give the delegate to an ancestor of the view we're 
       // delegating the 
       // area to 
       if (View.class.isInstance(delegate.getParent())) { 
        ((View) delegate.getParent()) 
          .setTouchDelegate(expandedArea); 
       } 
      } 
     }); 
    } 
} 

myślę, że to będzie pomóc

+0

Działa jak urok, dziękuję! – stefan222

+0

A oto [link do powiązanej dokumentacji] (https://developer.android.com/training/gestures/viewgroup.html#delegate). –

Powiązane problemy