खोज…


वाक्य - विन्यास

  • <बटन ... />
  • एंड्रॉयड: onClick = "methodName"
  • button.setOnClickListener (नया OnClickListener () {...});
  • सार्वजनिक वर्ग का वर्गनाम लागू होता है View.OnLongClickListener

इनलाइन onClickListener

मान लें कि हमारे पास एक बटन है (हम इसे प्रोग्रामेटिक रूप से बना सकते हैं, या इसे viewViewbyId (), आदि) का उपयोग करके एक दृश्य से बांध सकते हैं

Button btnOK = (...) 

अब, एक अनाम वर्ग बनाएं और इसे इनलाइन सेट करें।

btnOk.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // Do stuff here...
    }
});

क्लिक एक्शन को परिभाषित करने के लिए लेआउट का उपयोग करना

जब हम लेआउट में एक बटन बनाते हैं, तो हम क्लिक का संचालन करने के लिए कोड में एक विधि को संदर्भित करने के लिए android:onClick विशेषता का उपयोग कर सकते हैं।

बटन

<Button
    android:width="120dp"
    android:height="wrap_content"
    android:text="Click me"
    android:onClick="handleClick" />

फिर अपनी गतिविधि में, handleClick विधि बनाएँ।

public void handleClick(View v) {
    // Do whatever.
}

XML में एक या अधिक दृश्य के लिए एक ही क्लिक इवेंट का उपयोग करना

जब हम किसी भी दृश्य को लेआउट में बनाते हैं, तो हम एंड्रॉइड का उपयोग कर सकते हैं: संबंधित गतिविधियों में एक विधि को संदर्भित करने के लिए onClick विशेषता पर क्लिक करें घटनाओं को संभालने के लिए टुकड़ा।

XML लेआउट

<Button android:id="@+id/button"
    ...
    // onClick should reference the method in your activity or fragment
    android:onClick="doSomething" />

// Note that this works with any class which is a subclass of View, not just Button
<ImageView android:id="@+id/image"
    ...
    android:onClick="doSomething" />

गतिविधि / टुकड़ा कोड

अपने कोड में , आपके द्वारा नामित विधि बनाएं, जहां v वह दृश्य होगा जिसे स्पर्श किया गया था, और इस पद्धति को कॉल करने वाले प्रत्येक दृश्य के लिए कुछ करें।

public void doSomething(View v) {
    switch(v.getId()) {
        case R.id.button:
            // Button was clicked, do something.
            break;
        case R.id.image:
            // Image was clicked, do something else.
            break;
    }
}

यदि आप चाहें, तो आप प्रत्येक दृश्य के लिए अलग-अलग विधि का उपयोग भी कर सकते हैं (इस मामले में, निश्चित रूप से, आपको आईडी की जांच करने की आवश्यकता नहीं है)।

लंबी क्लिक की घटनाओं को सुनकर

एक लंबा क्लिक पकड़ने और इसका उपयोग करने के लिए आपको उपयुक्त श्रोता को बटन प्रदान करना होगा:

View.OnLongClickListener listener = new View.OnLongClickListener() {
    public boolean onLongClick(View v) {
        Button clickedButton = (Button) v;
        String buttonText = clickedButton.getText().toString();
        Log.v(TAG, "button long pressed --> " + buttonText);
        return true;
    }
};

button.setOnLongClickListener(listener);

बाहरी श्रोता को परिभाषित करना

मुझे इसका उपयोग कब करना चाहिए

  • जब एक इनलाइन श्रोता के अंदर का कोड बहुत बड़ा होता है और आपका तरीका / वर्ग बदसूरत और पढ़ने में कठिन हो जाता है
  • आप अपने ऐप के विभिन्न तत्वों (दृश्य) में एक ही क्रिया करना चाहते हैं

इसे प्राप्त करने के लिए आपको व्यू एपीआई में श्रोताओं में से एक को लागू करने वाला एक वर्ग बनाना होगा।

उदाहरण के लिए, किसी भी तत्व पर लंबे समय तक क्लिक करने पर सहायता दें:

public class HelpLongClickListener implements View.OnLongClickListener 
{
    public HelpLongClickListener() {
    }

    @Override 
    public void onLongClick(View v) {
        // show help toast or popup
    }
}

तब आपको इसका उपयोग करने के लिए बस अपनी Activity में एक विशेषता या परिवर्तनशील होना चाहिए:

HelpLongClickListener helpListener = new HelpLongClickListener(...);

button1.setOnClickListener(helpListener);
button2.setOnClickListener(helpListener);
label.setOnClickListener(helpListener);
button1.setOnClickListener(helpListener);

नोट: अलग वर्ग में श्रोताओं को परिभाषित करने का एक नुकसान है, यह सीधे वर्ग के क्षेत्रों तक नहीं पहुंच सकता है, इसलिए आपको कंस्ट्रक्टर के माध्यम से डेटा (संदर्भ, दृश्य) पास करने की आवश्यकता है जब तक कि आप विशेषताओं को सार्वजनिक नहीं करते हैं या गेटर्स को परिभाषित नहीं करते हैं।

कई तेज क्लिकों को रोकने के लिए कस्टम क्लिक श्रोता

एक बटन को समय की एक छोटी अवधि के भीतर कई बार फायरिंग से बचाने के लिए (आइए 1 सेकंड के भीतर 2 क्लिक कहते हैं, जो गंभीर समस्याओं का कारण हो सकता है यदि प्रवाह नियंत्रित नहीं होता है), एक कस्टम सिंगलक्लेस्टिस्टनर को लागू कर सकता है।

यह ClickListener थ्रेशोल्ड (उदाहरण के लिए, 1000ms) के रूप में एक विशिष्ट समय अंतराल सेट करता है।
जब बटन पर क्लिक किया जाता है, तो यह देखने के लिए एक जांच चलाई जाएगी कि क्या आपके द्वारा परिभाषित की गई पिछली राशि में ट्रिगर निष्पादित किया गया था, और यदि यह ट्रिगर नहीं होगा।

public class SingleClickListener implements View.OnClickListener {

    protected int defaultInterval;
    private long lastTimeClicked = 0;

    public SingleClickListener() {
        this(1000);
    }

    public SingleClickListener(int minInterval) {
        this.defaultInterval = minInterval;
    }

    @Override
    public void onClick(View v) {
        if (SystemClock.elapsedRealtime() - lastTimeClicked < defaultInterval) {
            return;
        }
        lastTimeClicked = SystemClock.elapsedRealtime();
        performClick(v);
    }

    public abstract void performClick(View v);

}

और कक्षा में, SingleClickListener बटन को दांव पर जुड़ा हुआ है

myButton = (Button) findViewById(R.id.my_button);
myButton.setOnClickListener(new SingleClickListener() {
    @Override
    public void performClick(View view) {
        // do stuff
    }
});

अनुरूपण बटन शैली

एक बटन के रूप को अनुकूलित करने के कई संभावित तरीके हैं। यह उदाहरण कई विकल्प प्रस्तुत करता है:


विकल्प 0: थीमऑवरले का उपयोग करें (वर्तमान में सबसे आसान / तेज तरीका)

अपनी शैली फ़ाइल में एक नई शैली बनाएँ:

styles.xml

<resources>
    <style name=“mybutton” parent=”ThemeOverlay.AppCompat.Ligth”>
        <!-- customize colorButtonNormal for the disable color -->
        <item name="colorButtonNormal">@color/colorbuttonnormal</item>
        <!-- customize colorAccent for the enabled color -->
        <item name="colorButtonNormal">@color/coloraccent</item>
    </style>
</resources>

फिर उस लेआउट में जहां आप अपना बटन लगाते हैं (जैसे MainActivity):

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center_horizontal"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

            <Button
                android:id="@+id/mybutton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Hello"
                android:theme="@style/mybutton"
                style="@style/Widget.AppCompat.Button.Colored"/>

</LinearLayout>

विकल्प 1: अपनी खुद की बटन शैली बनाएं

मान / style.xml में, अपने बटन के लिए एक नई शैली बनाएं:

styles.xml

<resources>
        <style name="mybuttonstyle" parent="@android:style/Widget.Button">
            <item name="android:gravity">center_vertical|center_horizontal</item>
            <item name="android:textColor">#FFFFFFFF</item>
            <item name="android:shadowColor">#FF000000</item>
            <item name="android:shadowDx">0</item>
            <item name="android:shadowDy">-1</item>
            <item name="android:shadowRadius">0.2</item>
            <item name="android:textSize">16dip</item>
            <item name="android:textStyle">bold</item>
            <item name="android:background">@drawable/button</item>
        </style>
    </resources>

फिर लेआउट में जहां आप अपना बटन रखते हैं (जैसे MainActivity में):

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center_horizontal"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

            <Button
                android:id="@+id/mybutton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Hello"
                android:theme="@style/mybuttonstyle"/>

</LinearLayout>

विकल्प 2: अपने प्रत्येक बटन के लिए एक ड्रॉबल स्टेट्स असाइन करें

अपने प्रत्येक बटन स्टेट्स के ड्रॉबल रिसोर्स को परिभाषित करने के लिए 'mybuttondrawable.xml' नामक ड्रॉबल फोल्डर में एक xml फाइल बनाएँ:

drawable / mybutton.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_enabled="false"
        android:drawable="@drawable/mybutton_disabled" />
    <item
        android:state_pressed="true"
        android:state_enabled="true"
        android:drawable="@drawable/mybutton_pressed" />
    <item
        android:state_focused="true"
        android:state_enabled="true"
        android:drawable="@drawable/mybutton_focused" />
    <item
        android:state_enabled="true"
        android:drawable="@drawable/mybutton_enabled" />
</selector>

उन ड्रॉबल्स में से प्रत्येक चित्र हो सकता है (जैसे mybutton_disabled.png) या xml फ़ाइलें आपके द्वारा परिभाषित की गई हैं और ड्रॉबल्स फ़ोल्डर में संग्रहीत हैं। उदाहरण के लिए:

drawable / mybutton_disabled.xml

<?xml version="1.0" encoding="utf-8"?>

    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
        <gradient
            android:startColor="#F2F2F2"
            android:centerColor="#A4A4A4"
            android:endColor="#F2F2F2"
            android:angle="90"/>
        <padding android:left="7dp"
            android:top="7dp"
            android:right="7dp"
            android:bottom="7dp" />
        <stroke
            android:width="2dip"
            android:color="#FFFFFF" />
        <corners android:radius= "8dp" />
    </shape>

फिर लेआउट में जहां आप अपना बटन लगाते हैं (जैसे MainActivity):

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center_horizontal"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

            <Button
                android:id="@+id/mybutton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Hello"
                android:background="@drawable/mybuttondrawable"/>

</LinearLayout>

विकल्प 3: अपनी बटन शैली को अपने ऐप थीम में जोड़ें

आप अपने ऐप थीम (मान / स्टाइल.xml में) की डिफ़ॉल्ट एंड्रॉइड बटन शैली को ओवरराइड कर सकते हैं।

styles.xml

<resources>
     <style name="AppTheme" parent="android:Theme">
            <item name="colorPrimary">@color/colorPrimary</item>
            <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
            <item name="colorAccent">@color/colorAccent</item>
              <item name="android:button">@style/mybutton</item>
     </style>
    
     <style name="mybutton" parent="android:style/Widget.Button">
             <item name="android:gravity">center_vertical|center_horizontal</item>
                <item name="android:textColor">#FFFFFFFF</item>
                <item name="android:shadowColor">#FF000000</item>
                <item name="android:shadowDx">0</item>
                <item name="android:shadowDy">-1</item>
                <item name="android:shadowRadius">0.2</item>
                <item name="android:textSize">16dip</item>
                <item name="android:textStyle">bold</item>
                <item name="android:background">@drawable/anydrawable</item>
     </style>
</resources>

विकल्प 4: प्रोग्राम में डिफ़ॉल्ट बटन शैली पर एक रंग ओवरले करें

बस आप अपनी गतिविधि में बटन खोजें और एक रंग फ़िल्टर लागू करें:

Button mybutton = (Button) findViewById(R.id.mybutton);
mybutton.getBackground().setColorFilter(anycolor, PorterDuff.Mode.MULTIPLY)

आप यहां विभिन्न सम्मिश्रण मोड और अच्छे उदाहरण देख सकते हैं



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow