Saya cukup baru dalam Pengembangan Android dan baru saja menemukan Preferensi. Saya menemukan PreferenceScreen
dan ingin membuat fungsi login dengannya. Satu-satunya masalah yang saya miliki adalah saya tidak tahu bagaimana saya bisa menambahkan tombol "Masuk" ke PreferenceScreen
.
Inilah PreferenceScreen
penampilan saya :
<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>
Tombol harus tepat di bawah dua EditTextPreference
s.
Apakah ada solusi sederhana untuk masalah ini? Solusi satu yang saya temukan tidak berfungsi karena saya menggunakan sub PreferenceScreen
s.
Memperbarui:
Saya menemukan bahwa saya dapat menambahkan tombol dengan cara ini:
<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>
dan file layout ( loginButtons.xml
) terlihat seperti itu:
<?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>
Jadi sekarang tombolnya muncul tetapi saya tidak dapat mengaksesnya dalam kode. Saya mencobanya dengan findViewById()
tetapi ini mengembalikan nol. Ada ide bagaimana saya bisa mengakses tombol-tombol ini?
sumber
android:onClick="method"
ke setiap tombol, di mana metode didefinisikan dalam aktivitas sebagaipublic void method(View v)
.Jawaban:
Untuk xml:
<Preference android:title="Acts like a button" android:key="@string/myCoolButton" android:summary="This is a cool button" />
Kemudian untuk java di file
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; } });
Ini akan muncul seperti Preferensi normal, hanya dengan judul dan ringkasan, sehingga akan terlihat seperti miliknya.
sumber
android:key="key"
danfindPreference("key");
menggunakan kunci yang sama.Saya suppouse sudah terlambat. Inilah yang telah saya lakukan untuk Preferensi Tombol.
Preferensi dalam file preference.xml di folder xml
.... <Preference android:key="resetBD" android:title="@string/ajustes_almacenamiento" android:summary="@string/ajustes_almacenamiento_desc" android:widgetLayout="@layout/pref_reset_bd_button" ></Preference> ...
dan pref_reset_bd_button.xml di folder tata letak
<?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>
sumber
android:widgetLayout
adalah koneksi sempurna antara fragmen dan dan preferensi (satu atau keduanya didefinisikan dalam XML). Terima kasih banyak. Di siniSaya ingin menambahkan tautan Keluar ke preferensi dan dapat memodifikasi kode Jakar agar berfungsi seperti ini:
<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>
Awalnya 'Preferensi' adalah 'EditTextPreference' yang saya edit sendiri.
Kemudian di kelas:
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; } }); } } }
sumber
Menambahkan
setContentView(R.layout.buttonLayout);
Di bawah
addPreferencesFromResource(R.xml.yourPreference);
buttonLayout:
<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>
Tombol Akses oleh:
Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //Your event } });
Anda bisa mendapatkan tombol di atas atau di bawah layar dengan meletakkan tombol di RelativeLayout:
bottom_control_bar
Ini berhasil untuk saya. Saya harap saya dapat membantu seseorang dengan potongan kode ini.
sumber
Menurut saya tidak ada cara mudah untuk menambahkan Tombol ke layar preferensi. Preferensi terbatas pada:
Saat menggunakan layar preferensi, Anda dibatasi pada penggunaan opsi-opsi ini, dan tidak ada satu "preferensi tombol" yang dapat dengan mudah digunakan untuk kebutuhan Anda.
Saya telah mencari fungsi serupa, dengan menambahkan tombol ke layar preferensi, tetapi sepertinya Anda perlu membuat layar sendiri untuk ini, mengelola perubahan ke preferensi dalam implementasi Anda sendiri.
sumber
Anda dapat melakukannya seperti ini untuk mengakses tombol!
View footerView = ((LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.layoutButtons, null, false);
Jangan lupa untuk menambahkan
android:id
ke LinearLayout yang berisi tombol di layoutButtons.xml , yaituandroid: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!
sumber
Jika Anda ingin mendapatkan pengguna mengklik salah satu item Preferensi dan aplikasi Anda sedang menggunakan
PreferenceFragmentCompat
, maka Anda dapat melakukan ini:<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>
Jawa:
@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 }
sumber
Anda juga dapat menyesuaikan tata letak Preferensi dengan mengganti
Preference.onCreateView(parent)
. Contoh di bawah ini menggunakan kelas dalam anonim untuk membuat preferensi berwarna merah.screen.addPreference( new Preference(context) { @Override protected View onCreateView(ViewGroup parent) { View view = super.onCreateView(parent); view.setBackgroundColor(Color.RED); return view; } });
Anda dapat menggunakan teknik ini untuk menambahkan tombol ke tampilan default.
sumber
Buat tata letak kustom untuk
SettingsFragment.java
yaitulayout_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>
Kemudian, lihat file tata letak di
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>
Dan kemudian, dalam
onViewCreated()
metode AndaSettingsFragment.java
, Anda dapat menggunakan tombol seperti ini:@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(); } }); }
sumber
try android: onClick = "myMethod" berfungsi seperti pesona untuk acara onclick sederhana
sumber
Preference
tidak memilikionClick
propertiandroid:onClick
dalam tampilan tombol terlampir, bukan dalam preferensi itu sendiri.