একটি পছন্দ স্ক্রিনে কীভাবে একটি বোতাম যুক্ত করবেন?


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

এই সমস্যার কোন সহজ সমাধান আছে কি? আমি যে সমাধানটি পেয়েছি সেগুলি কাজ করছে না কারণ আমি সাব PreferenceScreenএস ব্যবহার করি ।

হালনাগাদ:

আমি বুঝতে পেরেছি যে আমি এইভাবে বোতাম যুক্ত করতে পারি:

<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
বিটিডাব্লু, @ নীলাভ উত্তর সর্বাধিক সহজ - আপনি এক্সএমএল-লেআউটে ইভেন্ট হান্ডার নির্দিষ্ট করে প্রয়োজনীয় আচরণ অর্জন করতে পারেন: android:onClick="method"প্রতিটি বোতামে কেবল যুক্ত করুন , যেখানে ক্রিয়াকলাপটি যেমন পদ্ধতিতে সংজ্ঞায়িত করা হয়েছে public void method(View v)
স্ট্যান

উত্তর:


304

এক্সএমএলের জন্য:

<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
অনেকগুলি প্রাক-লোডযুক্ত গুগল অ্যাপস এই পদ্ধতির ব্যবহার করে এবং এইভাবে এটি অনুসরণ করা ভাল ধারণা! আমি একটি পছন্দসই স্ক্রিনে একটি স্ট্যান্ডার্ড ধূসর বোতামটি জায়গাটির বাইরে দেখতে পেয়েছি এবং আপনাকে ধন্যবাদ বলে আমি এটি
টম

5
এটি নিশ্চিত করুন android:key="key"এবং findPreference("key");একই কী ব্যবহার করছেন।
রিড

4
আসলে এটি মোটেও কোনও বোতাম প্রদর্শন করে না, যা ব্যবহারকারীকে বিভ্রান্ত করবে এবং ওপি যা বলেছে তা নয়। আসলে একটি বোতাম দেখানোর সঠিক উত্তর হ'ল নিকোলাস।
2112

7
আমি সবেমাত্র লক্ষ্য করেছি যে আমি এটি ২০১১ সালে 1:11 এ পোস্ট করেছি। হা হা।
রিড

3
এটি করা উচিত ছিল 1 মাস 11 দিন পরে:
11/1

43

আমি অনেক দেরি করে নিলাম। এটি আমি বোতামের পছন্দ হিসাবে করেছি।

এক্সএমএল ফোল্ডারে প্রিফারেন্স.এক্সএমএল ফাইলটিতে অগ্রাধিকার

....
    <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খণ্ডগুলি এবং পছন্দসমূহের (এক্সএমএলে একটি বা উভয়ই সংজ্ঞায়িত) মধ্যে নিখুঁত সংযোগ। অনেক ধন্যবাদ. এখানে
পিটার_এইউক

হাই @ নিকোলাস আপনার কোড কাজ করে, তবে একটি প্রশ্ন ... আপনি কীভাবে করতে পারেন যে বাটনটি এমন শ্রেণিতে কাজ করে যা পছন্দনীয় কার্যকলাপকে প্রসারিত করে
এসপি

4
"রিসেটবটন" ধন্যবাদ আইডি দিয়ে এই বোতামটি কীভাবে সন্ধান করবেন দয়া করে আমাকে বলুন!
বেন জিমা

আমি অ্যান্ড্রয়েড: লেআউটটি অ্যান্ড্রয়েডের তুলনায় উচ্চতর: উইজেটলয়আউট ব্যবহার করে দেখতে পেলাম। উইজেটলয়আউটটি ব্যবহার করে, আমার বোতামটি এমনটি হয়ে গিয়েছিল যা আমি কেবল লেআউট_ালাইনপ্যারেন্টরাইট = "সত্য" হিসাবে বর্ণনা করতে পারি তবে অ্যান্ড্রয়েড ব্যবহার করার সময় সেই আচরণটি চলে যায়: পরিবর্তে লেআউট
জোহ্জেডজ

1
এবং আমি এটি কোনও অগ্রাধিকারের চেঞ্জ বা ইভেন্ট হ্যান্ডলারটি ক্লিক করতে পারি না
জোহ্জেডজ

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>

মূলত 'পছন্দসইটি' হ'ল একটি সম্পাদনা সম্পাদনা যা আমি সম্পাদনা করেছি।

তারপরে ক্লাসে:

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
    }
});

আপেক্ষিক লেআউটটিতে বোতামটি রেখে আপনি উপরে বা স্ক্রিনের নীচে বোতামটি পেতে পারেন:

  • top_control_bar
  • bottom_control_bar

bottom_control_bar

এটি আমার পক্ষে কাজ করেছে। আমি আশা করি এই কোডের টুকরো দিয়ে কাউকে সাহায্য করতে পারি।


আমি এটি আমার অ্যাপ্লিকেশনটিতে ব্যবহার করেছি, এটি তালিকার শীর্ষে থাকা বোতামটি রাখে যা আরও ভাল দেখায় এবং ওকে এবং বাতিল বোতামগুলির জন্য আরও বেশি ব্যবহারকারী বান্ধব। ধন্যবাদ.
গ্রুস

1

আমি পছন্দ করি না একটি পছন্দ স্ক্রিনে কেবল একটি বাটন যুক্ত করার একটি সহজ উপায় আছে। পছন্দগুলি সীমাবদ্ধ:

EditTextPreference
ListPreference
RingtonePreference
CheckboxPreference

একটি পছন্দ স্ক্রিন ব্যবহার করার সময়, আপনি এই বিকল্পগুলির ব্যবহারের মধ্যে সীমাবদ্ধ এবং কোনও একক "বাটন-পছন্দ" নেই যা আপনার প্রয়োজনের জন্য সহজেই ব্যবহার করা যেতে পারে।

আমি পছন্দ স্ক্রিনে বোতাম যুক্ত করার সাথে অনুরূপ কার্যকারিতা সন্ধান করছি, তবে মনে হচ্ছে এটির জন্য আপনার নিজের পর্দা তৈরি করতে হবে, নিজের প্রয়োগের ক্ষেত্রে পছন্দগুলিতে পরিবর্তন পরিচালনা করতে হবে।


একই সমস্যা ছিল, আপনি যদি নিজের পছন্দগুলিতে একটি বোতাম চান তবে আপনাকে নিজের তৈরি প্রিফ স্ক্রিনটি ব্যবহার করতে হবে :(
জানুশ

1

বোতামটি অ্যাক্সেস করতে আপনি এটি এর মতো করতে পারেন!

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

লেয়ারআলআউটটিতে যুক্ত android:idকরতে ভুলবেন না যাতে লেআউটব্যাটন.এক্সএমএল- এ বোতাম রয়েছে ie 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

অ্যান্ড্রয়েড চেষ্টা করুন: অনক্লিক = "মাইমাথোড" সাধারণ অনক্লিক ইভেন্টগুলির জন্য একটি কবিতার মতো কাজ করে


4
Preferenceকোনও onClickসম্পত্তি নেই
এরকান

উত্তরটি android:onClickসংযুক্ত বোতাম দর্শনে বোঝানো হয়, পছন্দটিতে নয়।
স্ট্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.