如何将button添加到PreferenceScreen?

我对Android开发很陌生,刚刚遇到了首选项。 我发现PreferenceScreens,并希望创build一个loginfunction。 唯一的问题,我有它,我不知道我可以添加一个“login”button到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> 

该button应该在两个ExitTextPreferences之下。

有这个问题的简单解决scheme吗? 我find的一个解决scheme不工作,因为我使用子偏好屏幕。

更新:

我想通过这种方式可以添加button:

 <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> 

所以现在button出现,但我不能在代码中访问它们。 我试图用findViewById(),但这是返回null。 任何想法如何我可以访问这些button?

对于xml:

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

然后为你的onCreate()的java

 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/myCoolButtongetString(R.string.myCoolButton)因为它是最好的使用资源编译器的援助,语言翻译,并易于更改string。

我想添加一个退出链接到首选项,并能够修改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; } }); } } } 

我赞成为时已晚。 这是我所做的button偏好。

在xml文件夹中的preference.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> 

 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 = (Button) findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //Your event } }); 

您可以通过将button放在RelativeLayout中来获取屏幕顶部或底部的button:

  • top_control_bar
  • bottom_control_bar

bottom_control_bar

这对我有效。 我希望我可以帮助这个代码的人。

我不认为有一个简单的方法来添加一个button到首选项屏幕。 首选项仅限于:

 EditTextPreference ListPreference RingtonePreference CheckboxPreference 

在使用首选项屏幕时,仅限于使用这些选项,并且没有一个可轻松用于您需要的“button首选项”。

我一直在寻找类似的function,在首选项屏幕上添加button,但是您似乎需要为此创build自己的屏幕,在自己的实现中pipe理对首选项的更改。

你可以这样做来访问button!

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

不要忘了将android:id添加到包含layoutButtons.xml中button的LinearLayout,即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! 

尝试android:onClick =“myMethod”就像一个简单的onclick事件的魅力

您也可以通过重写Preference.onCreateView(parent)来自定义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; } }); 

你可以使用这种技术来添加一个button到默认视图。

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

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