18

設定画面にアクションバーを表示しようとしています。そうするために、SettingActivity に次のコードを追加しました。

public class PreferencesActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.preferences_activity);
        getFragmentManager().beginTransaction()
                .replace(R.id.container, new PreferencesFragment()).commit();

            getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }
}

次に、PreferencesFragment の残りのコードです。これは問題なく動作しますが、PreferenceScreen 設定を押すとすぐに、アクションバーが非表示になります。設定のメイン画面に戻ると、再び表示されます。アクションバーを表示し続ける (そして PreferenceScreen ラベルで更新する) 方法はありますか?

編集: PreferenceScreen コードを見ると、PreferenceScreen をクリックすると全画面ダイアログが開かれるように見えます。私の設定にはタイトルがあるため、ダイアログにもタイトルが表示されるはずです...しかし、そうではありません

    // Set the title bar if title is available, else no title bar
    final CharSequence title = getTitle();
    Dialog dialog = mDialog = new Dialog(context, context.getThemeResId());
    if (TextUtils.isEmpty(title)) {
        dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    } else {
        dialog.setTitle(title);
    }
4

8 に答える 8

1

悲しいことにGoogleは今まで修正しなかったので、実際にはもっと簡単な解決策が1つあります:

  1. SettingsActivity クラスを「Activity」から拡張するように設定します。

    public class SettingsActivity extends Activity { ...

  2. SettingsActivty の v21/styles フォルダーに新しいテーマを作成し、親を「Theme.Material.*」に設定します。

    <style name="CustomThemeSettings" parent="android:Theme.Material"> <item name="android:colorPrimary">@color/...</item> <item name="android:colorPrimaryDark">@color/...</item> <item name="android:colorAccent">@color/...</item> </style>

  3. Manifest.xml ファイルで新しいテーマを設定します。

    <activity android:name=".SettingsActivity" android:label="@string/title_activity_settingsactivity" android:theme="@style/CustomThemeSettings" > </activity>

  4. それはちょうど動作します:)

  5. (オプション) 古いデバイスにマテリアル デザインのサポートを提供する場合
    は、SettingsActivity を v21+ フォルダーに配置し、親 AppCompat を持つ古いデバイス用の別の SettingsActivity を作成できます。

于 2016-05-29T14:43:12.150 に答える
0

質問で述べたように、フルスクリーンDialogが問題になる可能性があります。

Dialogスタイルを次のように変更してみてください。

<style name="Theme.Holo.Dialog">

またはこれらのプロパティを持つスタイルに:

<item name="windowActionBar">true</item>
<item name="windowNoTitle">false</item>

ここでは、への参照を取得する方法を読むことができますDialog

于 2015-04-09T18:58:02.727 に答える
0

しかし、PreferenceScreen 設定を押すとすぐに、アクションバーが非表示になります。設定のメイン画面に戻ると、再び表示されます。

設定をクリックすると、新しいアクティビティを開始していると思います

設定フラグメントは次のようになります

    public static class PreferencesFragment extends PreferenceFragment {

    public PlaceholderFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.your_preferences);
    }
}

次に、以下のように your_preferences をサンプリングします

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent" >

<PreferenceCategory
    android:title="@string/pref_category_title">
    <PreferenceScreen
        android:title="@string/title"
        android:summary="@string/summary">

        <intent
            android:targetClass="com.your.package.Youractivity "
            android:targetPackage="com.your.package"/>

    </PreferenceScreen>
    <PreferenceScreen
        android:title="@string/another_title">
        <intent
            android:targetClass="com.your.package.activity2"
            android:targetPackage="com.your.package.activity"/>
    </PreferenceScreen>
</PreferenceCategory>

最後に、Youractivity が ActionBarActivity から拡張する必要がある主なもの

    public class Youractivity extends ActionBarActivity {
}

上記のコードは私にとってはうまくいきます。

于 2015-04-09T15:08:40.200 に答える