Как добавить кнопку на экран предпочтения?
Я совсем новичок в разработке Android и только что наткнулся на Настройки.
Я нашел 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()
, но это возвращает ноль. Любые идеи, как я мог получить доступ к этим кнопкам?
Ответы
Ответ 1
Для xml:
<Preference android:title="Acts like a button"
android:key="@string/myCoolButton"
android:summary="This is a cool button"/>
Затем для java в вашем 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)
, потому что лучше использовать ресурсы для помощи компилятора, перевода языка и простоты изменений в String.
Ответ 2
Я хотел добавить ссылку Exit к настройкам и смог изменить код Jakar, чтобы заставить его работать следующим образом:
<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
Я слишком поздно опоздаю.
Это то, что я сделал для предпочтения кнопок.
Предпочтение в файле preference.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>
Ответ 4
Добавить
setContentView(R.layout.buttonLayout);
Ниже
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>
Кнопка доступа по:
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
Это сработало для меня. Надеюсь, я смогу помочь кому-то с этой частью кода.
Ответ 5
Я не думаю, что есть простой способ просто добавить кнопку на экран предпочтений. Предпочтения ограничены:
EditTextPreference
ListPreference
RingtonePreference
CheckboxPreference
При использовании экрана предпочтений вы ограничены использованием этих параметров, и нет никаких "кнопок-предпочтений", которые могут быть легко использованы для ваших нужд.
Я искал аналогичную функциональность, добавляя кнопки на экран предпочтений, но похоже, что вам нужно создать собственный экран для этого, управляя изменением предпочтений в своей собственной реализации.
Ответ 6
Вы можете сделать это так, чтобы получить доступ к кнопке!
View footerView = ((LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.layoutButtons, null, false);
Не забудьте добавить android:id
в LinearLayout, содержащую кнопку в 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!
Ответ 7
Вы также можете настроить макет Предпочтения, переопределив 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;
}
});
Вы можете использовать эту технику, чтобы добавить кнопку к представлению по умолчанию.
Ответ 8
<Preference android:title="Acts like a button"
android:key="@string/myCoolButton"
android:summary="This is a cool button"/>
Применить действие к кнопке.
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;
}
});
Ответ 9
попробуйте андроид: onClick = "myMethod" работает как шарм для простых событий onclick