वरीयतास्क्रीन में बटन कैसे जोड़ें?


135

मैं एंड्रॉइड डेवलपमेंट के लिए काफी नया हूं और बस प्राथमिकताएं आई हैं। मैंने पाया PreferenceScreenऔर इसके साथ एक लॉगिन कार्यक्षमता बनाना चाहता था। मेरे पास एकमात्र समस्या यह है कि मुझे नहीं पता कि मैं "लॉगिन" बटन को कैसे जोड़ सकता हूं PreferenceScreen

यहाँ मेरी PreferenceScreenतरह दिखता है:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
...
    <PreferenceScreen android:title="@string/login" android:key="Login">
        <EditTextPreference android:persistent="true" android:title="@string/username" android:key="Username"></EditTextPreference>
        <EditTextPreference android:title="@string/password" android:persistent="true" android:password="true" android:key="Password"></EditTextPreference>
    </PreferenceScreen>
...
</PreferenceScreen>

बटन दो EditTextPreferenceएस के नीचे होना चाहिए ।

क्या इस समस्या का कोई सरल समाधान है? एक समाधान जो मुझे मिला वह काम नहीं कर रहा था क्योंकि मैं उप PreferenceScreens का उपयोग करता हूं ।

अपडेट करें:

मुझे लगा कि मैं इस तरह से बटन जोड़ सकता हूं:

<PreferenceScreen android:title="@string/login" android:key="Login">
        <EditTextPreference android:persistent="true" android:title="@string/username" android:key="Username"></EditTextPreference>
        <EditTextPreference android:title="@string/password" android:persistent="true" android:password="true" android:key="Password"></EditTextPreference>
        <Preference android:layout="@layout/loginButtons" android:key="loginButtons"></Preference>
</PreferenceScreen>

और लेआउट फ़ाइल ( loginButtons.xml) इस तरह दिखती है:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:weightSum="10" 
    android:baselineAligned="false" android:orientation="horizontal">
    <Button android:text="Login" android:layout_width="fill_parent"
        android:layout_weight="5" android:layout_height="wrap_content"
        android:id="@+id/loginButton" android:layout_gravity="left"></Button>
    <Button android:text="Password?" android:layout_width="fill_parent"
        android:layout_weight="5" android:layout_height="wrap_content"
        android:id="@+id/forgottenPasswordButton"></Button>
</LinearLayout>

तो अब बटन दिखाई देते हैं लेकिन मैं उन्हें कोड में एक्सेस नहीं कर सकता। मैंने इसके साथ प्रयास किया findViewById()लेकिन यह अशक्त है। किसी भी विचार मैं इन बटन का उपयोग कैसे कर सकता है?


इस प्रश्न को देखें stackoverflow.com/questions/2697233/…
Juozas Kontvainis

2
BTW, @neelabh उत्तर सबसे सरल है - आप xml- लेआउट में ईवेंट हैंगल को निर्दिष्ट करके आवश्यक व्यवहार प्राप्त कर सकते हैं: बस android:onClick="method"प्रत्येक बटन में जोड़ें , जहां विधि गतिविधि के रूप में परिभाषित की गई है public void method(View v)
स्टेन

जवाबों:


304

Xml के लिए:

<Preference android:title="Acts like a button"
                android:key="@string/myCoolButton"
                android:summary="This is a cool button"/>

फिर अपने में जावा के लिए onCreate()

Preference button = findPreference(getString(R.string.myCoolButton));
button.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
                @Override
                public boolean onPreferenceClick(Preference preference) {   
                    //code for what you want it to do   
                    return true;
                }
            });

यह एक सामान्य पसंद की तरह दिखाई देगा, सिर्फ एक शीर्षक और एक सारांश के साथ, इसलिए यह ऐसा लगेगा जैसे यह है।

संपादित करें: मैं उपयोग करने के लिए बदल गया हूं @string/myCoolButtonऔर getString(R.string.myCoolButton)क्योंकि संकलक सहायता, भाषा अनुवाद, और स्ट्रिंग परिवर्तनों में आसानी के लिए संसाधनों का उपयोग करना सबसे अच्छा है।


7
पहले से लोड किए गए कई Google ऐप्स इस दृष्टिकोण का उपयोग करते हैं, और इस प्रकार इसका पालन करना एक अच्छा विचार है! मैं एक मानक ग्रे बटन वरीयताओं के स्क्रीन पर जगह से बाहर दिखता है, और आप के लिए धन्यवाद मैं इसे मानकीकृत देखने के लिए एक अच्छा तरीका मिल गया :)
टॉम

5
सुनिश्चित करें कि android:key="key"और findPreference("key");उसी कुंजी का उपयोग कर रहे हैं।
रीड

4
वास्तव में यह एक बटन बिल्कुल भी प्रदर्शित नहीं करता है, जो उपयोगकर्ता को भ्रमित करेगा और ओपी ने जो पूछा है वह नहीं है। वास्तव में एक बटन दिखाने के लिए सही उत्तर निकोलस का है।
उत्परिवर्तनीय 2112

7
मैंने अभी देखा कि मैंने इसे 2011 में 1:11 पर पोस्ट किया था। Haha।
रीड

3
1 महीने और 11 दिन बाद किया जाना चाहिए: 11/1 / '11 - 1:11 :)
पी कूजपर्स

43

मैं इसके बहुत देर से दबा। यह वही है जो मैंने एक बटन वरीयता के लिए किया है।

वरीयता वरीयता। Xml फ़ोल्डर में xml फ़ाइल

....
    <Preference
        android:key="resetBD"
        android:title="@string/ajustes_almacenamiento"
        android:summary="@string/ajustes_almacenamiento_desc"
        android:widgetLayout="@layout/pref_reset_bd_button" 
    ></Preference>
  ...

और लेआउट फ़ोल्डर में pref_reset_bd_button.xml

 <?xml version="1.0" encoding="utf-8"?>
   <Button
       xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/resetButton" 
        android:text="@string/ajustes_almacenamiento_bt" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="resetearBD">

   </Button>

android:widgetLayoutटुकड़ों और वरीयताओं के बीच सही संबंध है (एक या दोनों एक्सएमएल में परिभाषित)। बहुत बहुत धन्यवाद। यहाँ
peter_the_oak

हाय @ नीकोल। आपका कोड काम करता है, लेकिन एक सवाल ... आप यह कैसे कर सकते हैं कि बटन एक वर्ग में काम करता है जो वरीयता में विस्तार करता है
SP

4
कृपया मुझे बताएं कि आईडी "रीसेटबटन" धन्यवाद के साथ इस बटन को कैसे खोजें!
बेन जीमा

मैंने Android का उपयोग करते हुए पाया: Android के लिए बेहतर लेआउट: widgetLayout। WidgetLayout का उपयोग करते हुए, मेरा बटन वह बन गया, जिसे मैं केवल लेआउट_alignParentRight = "सत्य" के रूप में वर्णित कर सकता हूं, लेकिन Android: लेआउट का उपयोग करते समय वह व्यवहार चला गया
जोजेन

1
और मैं इसे onPreferenceChange या क्लिक इवेंट हैंडलर पर फायर करने के लिए नहीं पा सकता हूं
जोजेन डे

38

मैं वरीयताओं के लिए एक निकास लिंक जोड़ना चाहता था और इसे इस तरह से काम करने के लिए जकार के कोड को संशोधित करने में सक्षम था:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >   
   <PreferenceCategory android:title="Settings">
       <Preference android:title="Click to exit" android:key="exitlink"/>       
   </PreferenceCategory>    
</PreferenceScreen>

मूल रूप से 'प्राथमिकता' एक 'EditTextPreference' था जिसे मैंने संपादित किया था।

फिर कक्षा में:

public class MyPreferences extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.mypreferences);

    Preference button = (Preference)getPreferenceManager().findPreference("exitlink");      
    if (button != null) {
        button.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
            @Override
            public boolean onPreferenceClick(Preference arg0) {
                finish();   
                return true;
            }
        });     
    }
}
}

3
बहुत अच्छा काम करता है। ये तो बहुत खूब है !
आरआरटीडब्ल्यू

8

जोड़ना

setContentView(R.layout.buttonLayout);

नीचे

addPreferencesFromResource(R.xml.yourPreference);

बटन लेआउट:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<RelativeLayout
        android:id="@+id/top_control_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
</RelativeLayout>

<LinearLayout
        android:id="@+id/bottom_control_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true">

    <Button
            android:id="@+id/button"
            android:layout_width="match_parent"
            android:layout_height="70dp"
            android:text="@string/saveAlarm"/>
</LinearLayout>

<ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_above="@id/bottom_control_bar"
        android:layout_below="@id/top_control_bar"
        android:choiceMode="multipleChoice">
</ListView>

द्वारा पहुँच बटन:

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        //Your event
    }
});

आप RelativeLayout में बटन लगाकर स्क्रीन के ऊपर या नीचे बटन प्राप्त कर सकते हैं:

  • top_control_bar
  • bottom_control_bar

bottom_control_bar

इसने मेरे लिए काम किया। मुझे उम्मीद है कि मैं इस कोड के टुकड़े के साथ किसी की मदद कर सकता हूं।


मैंने अपने ऐप में इसका उपयोग किया है, यह सूची के शीर्ष पर बटन रखता है जो बेहतर दिखता है और ठीक और रद्द करें बटन के लिए अधिक उपयोगकर्ता के अनुकूल है। धन्यवाद।
ग्रुक्स

1

मुझे नहीं लगता कि सिर्फ एक बटन को वरीयता स्क्रीन में जोड़ने का एक आसान तरीका है। प्राथमिकताएँ सीमित हैं:

EditTextPreference
ListPreference
RingtonePreference
CheckboxPreference

वरीयता स्क्रीन का उपयोग करते समय, आप इन विकल्पों के उपयोग तक सीमित हैं, और एक भी "बटन-वरीयता" नहीं हैं जो आसानी से आपकी आवश्यकता के लिए उपयोग की जा सकती हैं।

मैं वरीयता स्क्रीन में बटन जोड़ने के साथ समान कार्यक्षमता की तलाश कर रहा हूं, लेकिन ऐसा लगता है कि आपको इसके लिए अपनी स्क्रीन बनाने की आवश्यकता है, अपने स्वयं के कार्यान्वयन में वरीयताओं को बदलने का प्रबंधन करना।


एक ही समस्या थी, यदि आप अपनी प्राथमिकताओं में एक बटन चाहते हैं, तो आपको एक सेल्फमेड प्रीफ़ स्क्रीन का उपयोग करना होगा :(
Janusz

1

बटन को एक्सेस करने के लिए आप इसे इस तरह से कर सकते हैं!

 View footerView = ((LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.layoutButtons, null, false);

जोड़ने के लिए मत भूलना android:idLinearLayout कि में बटन शामिल करने के लिए layoutButtons.xml , यानी android:id="@+id/mylayout"

 LinearLayout mLayout = (LinearLayout) footerView.findViewById(R.id.mylayout);
 Button login = (Button) footerView.findViewById(R.id.loginButton);
 login.setOnClickListener(this);
 ListView lv = (ListView) findViewById(android.R.id.list);
 lv.addFooterView(footerView);

 // Lines 2 and 3 can be used in the same way for a second Button!

इस प्रश्न को सही के रूप में चिह्नित करना न भूलें, अगर आपको लगता है कि मैंने इसमें मदद की है?
शाह

0

आप ओवरराइड करके एक वरीयता के लेआउट को भी अनुकूलित कर सकते हैं Preference.onCreateView(parent)। नीचे दी गई उदाहरण लाल वरीयताओं को बनाने के लिए एक अनाम आंतरिक वर्ग का उपयोग करता है।

    screen.addPreference(
        new Preference(context) {
            @Override
            protected View onCreateView(ViewGroup parent) {
                View view = super.onCreateView(parent);
                view.setBackgroundColor(Color.RED);
                return view;
            }
        });

आप डिफ़ॉल्ट दृश्य में एक बटन जोड़ने के लिए इस तकनीक का उपयोग कर सकते हैं।


0

यदि कोई उपयोगकर्ता को प्राथमिकता देने वाले आइटमों और हैंडल पर क्लिक करने के लिए निर्देश देने के लिए आता है और आपके समाधान पर आधारित है PreferenceFragmentCompat, तो आप ऐसा कर सकते हैं:

<PreferenceScreen
...
>
...
<Preference
    android:key="@string/pref_key_clickable_item"
    android:persistent="false"
    android:title="Can be clicked"
    android:summary="Click this item so stuff will happen"/>
...
</PreferenceScreen>

जावा:

@Override
onPreferenceTreeClick(Preference preference) {
    if (preference.getKey().equals(getContext().getString(R.string.pref_key_clickable_item))) {
       // user clicked the item
       // return "true" to indicate you handled the click
       return true;
    }
    return false;
}

Kotlin:

override fun onPreferenceTreeClick(preference: Preference): Boolean {
    if (preference.key == context?.getString(R.string.pref_key_clickable_ite)) {
       // user clicked the item
       // return "true" to indicate you handled the click
       return true
    }
    return false
}

0

SettingsFragment.javaयानी के लिए एक कस्टम लेआउट बनाएँlayout_settings.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.settings.SettingsFragment"
    tools:ignore="NewApi">

    <com.google.android.material.appbar.AppBarLayout
        android:id="@+id/appBarSettings"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppBarOverlay">

        <com.google.android.material.appbar.MaterialToolbar
            android:id="@+id/toolbarSettings"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:minHeight="?attr/actionBarSize"
            app:title="@string/fragment_title_settings" />
    </com.google.android.material.appbar.AppBarLayout>

    <!--this works as the container for the SettingsFragment.java
    put the code for the Button above or below this FrameLayout
    according to your requirement-->

    <FrameLayout
        android:id="@android:id/list_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
      app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" />


    <com.google.android.material.button.MaterialButton
        android:id="@+id/btnSample"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|center"
        android:text="@string/button_sample_text" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

फिर, अपने में लेआउट फ़ाइल देखें styles.xml:

<style name="AppTheme" parent="....">
      ...............
      ...............
      <item name="preferenceTheme">@style/MyPreferenceThemeOverlay</item>
</style>

<style name="MyPreferenceThemeOverlay" parent="PreferenceThemeOverlay">
      <item name="android:layout>@layout/layout_settings</item>
</style>

और फिर, आप की onViewCreated()विधि में SettingsFragment.java, आप इस तरह से बटन का उपयोग कर सकते हैं:

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle 
                             savedInstanceState) {

        MaterialButton btnSample = view.findViewById(R.id.btnSample);
        btnSample.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(requireContext(), "Sample Button 
                   clicked!!", Toast.LENGTH_LONG).show();
            }
        });
    }

बटन के साथ नमूना सेटिंग्स स्क्रीन


-1

एंड्रॉइड आज़माएं: onClick = "myMethod" सरल ऑनक्लिक घटनाओं के लिए एक आकर्षण की तरह काम करता है


4
Preferenceकोई onClickसंपत्ति नहीं है
ercan

उत्तर android:onClickसंलग्न बटन दृश्य में निहित है, वरीयता में ही नहीं।
स्टेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.