【问题标题】:Adding ActionBar with the arrow "GoBack" to PreferenceActivity?将带有箭头“GoBack”的 ActionBar 添加到 PreferenceActivity?
【发布时间】:2015-10-28 23:17:57
【问题描述】:

我有一个 PreferenceActivity。我正在寻找一种方法来添加带有箭头“GoBack”的 ActionBar。到目前为止,在我看来,我发现的所有示例都过于复杂,因为如果我有一个简单的 Activity,我可以用一行 java 代码向它添加 ActionBar,就是这样。

我想知道,有没有一种简单的方法可以将带有箭头“GoBack”的 ActionBar 添加到 PreferenceActivity 中?

更新:

这是我的偏好活动:

public class PreferenceActivity123 extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getFragmentManager().beginTransaction().replace(android.R.id.content, new MainPreferenceFragment()).commit();
    }

    public static class MainPreferenceFragment extends PreferenceFragment {
        @Override
        public void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
        }
    }
}

【问题讨论】:

    标签: android


    【解决方案1】:
    // Add this in your androidmanifest.xml file
         <activity
                    android:name=".SecondActivity"
                    android:label="@string/app_name"
                    android:parentActivityName=".MainActivity">
    
                    <meta-data
                        android:name="android.support.PARENT_ACTIVITY"
                        android:value=".MainActivity" />
                </activity>
    

    【讨论】:

    • 写当前活动的名称而不是SecondActivity。
    • 什么是SecondActivity,是MyPreferencesActivity吗?
    • 第二个活动是您当前的活动名称,mainActivity 是您的根活动名称,
    【解决方案2】:

    您必须在您的操作栏活动中设置DisplayHomeasUpEnabled,例如

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);//Which will show back button
    

    在 AndroidManifest.xml 中定义父活动,一旦按下操作栏中的后退按钮,就会调用该活动(PreferenceActivity)。

    在清单上的定义中,添加以下行:

     <activity
        android:parentActivityName="com.example.activities.PreferenceActivity"
      </activity>
    

    或 只听optionItemSelected方法

    @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
                case android.R.id.home:
                    Intent intent = new Intent(this, PreferenceActivity.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(intent);
                    return true;
                default:
                    return super.onOptionsItemSelected(item);
            }
        }
    

    编辑: 为了在 Preference 活动中实现相同,您需要在 styles.xml 中使用后退按钮制作自定义操作栏样式

    <?xml version="1.0" encoding="utf-8"?>
    <resources>    
      <style name="PrefTheme" parent="@android:style/Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/PrefActionBar</item>
      </style>
    
      <style name="PrefActionBar" parent="@android:style/Widget.Holo.ActionBar">
        <item name="android:displayOptions">showHome|homeAsUp|showTitle</item>
      </style>
    </resources>
    

    在清单中调用样式,如:

    <application android:theme="@style/PrefTheme">
    

    在activity中调用action bar

    getActionBar().setDisplayHomeAsUpEnabled(true);
    

    【讨论】:

    • getSupportActionBar() -- 找不到方法。
    • 如果您正在扩展ActionBarActivity,那么您可以获得该方法。您使用的是哪个支持 sdk 版本?
    • 如果我使用 PreferenceActivity,为什么要扩展它?我已经更新了我的问题。
    • 你能在你的 pref 活动中调用 getActionBar 方法吗?我会更新我的答案
    【解决方案3】:

    只需使用android.support.v7.widget.Toolbar

        public class SettingsActivity extends PreferenceActivity {
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_settings);       
    
     Toolbar actionbar = (Toolbar) findViewById(R.id.actionbar);
            actionbar.setTitle("Settings");
            actionbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_action_back));
            actionbar.setNavigationOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    YourActivity.this.finish();
                }
            });
    
            }
        }
    

    还有你的 activity_settings.xml 文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  xmlns:tools="http://schemas.android.com/tools"
                  tools:context=".SettingsActivity"
                  tools:menu="settings"
                  tools:actionBarNavMode="standard"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:orientation="vertical">
    
        <android.support.v7.widget.Toolbar
        android:id="@+id/actionbar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimaryDark"
        />
    
        <FrameLayout 
            android:id="@id/content"
            android:orientation="vertical"    
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    </LinearLayout>
    

    【讨论】:

    • 我应该把它放在哪里?
    • R.id.actionbar -- 未找到。
    • 我会检查一下,谢谢。但是我的 SettingActivity 代码有点不同,我已将其添加到我的问题中。
    • 我更新了答案。只需在 super.onCreate(savedInstanceState); 之后将 setContentView(R.layout.activity_settings) 添加到您的活动中即可同时创建activity_settings.xml
    猜你喜欢
    • 1970-01-01
    • 2020-11-21
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多