web-dev-qa-db-ja.com

PreferenceScreenにボタンを追加する方法は?

私はAndroid Developmentの初心者で、Preferencesに出会いました。 PreferenceScreensを見つけて、それを使用してログイン機能を作成したいと考えました。私が持っている唯一の問題は、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>

ボタンは、2つのExitTextPreferencesのすぐ下にあります。

この問題の簡単な解決策はありますか?私が見つけた1つの解決策は、サブ設定画面を使用しているため機能していませんでした。

更新:

この方法でボタンを追加できることがわかりました:

<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()で試しましたが、これはnullを返しています。これらのボタンにアクセスする方法はありますか?

126

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)の使用に変更しました。コンパイラー支援、言語翻訳、およびストリング変更の容易さのためにリソースを使用するのが最善だからです。

291
Reed

設定に終了リンクを追加したかったため、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;
            }
        });     
    }
}
}
38
Dunfield

遅すぎると思います。これは私がボタン設定のためにしたことです。

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

追加

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

これは私のために働いた。このコードで誰かを助けることができるといいのですが。

6
Thijs Limmen

設定画面にボタンを追加するだけの簡単な方法はないと思います。設定は次のものに制限されています。

EditTextPreference
ListPreference
RingtonePreference
CheckboxPreference

設定画面を使用している間は、これらのオプションの使用に制限され、必要に応じて簡単に使用できる単一の「ボタン設定」はありません。

設定画面にボタンを追加する同様の機能を探していましたが、このために独自の画面を構築し、独自の実装で設定の変更を管理する必要があるようです。

1
Eric Nordvik

このようにしてボタンにアクセスできます!

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

layoutButtons.xmlのボタンを含むLinearLayoutにAndroid:idを追加することを忘れないでください。つまり、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!
1
Shah

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

try Android:onClick = "myMethod"は単純なonclickイベントの魅力のように機能します

0
neelabh