18版的支持库中增加了动作栏兼容性,现在有ActionBarActivity个类可以在老版本的Android上用动作栏创建活动.

有没有办法将支持库中的动作栏添加到PreferenceActivity中?

Previously I used 100 and it has 101.

推荐答案

编辑:在appcompat-v722.1.0中,Google添加了AppCompatDelegate抽象类作为委托,您可以使用它将AppCompat的支持扩展到任何活动.

按如下方式使用它:

...
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatDelegate;
import android.support.v7.widget.Toolbar;
...

public class SettingsActivity extends PreferenceActivity {

    private AppCompatDelegate mDelegate;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        getDelegate().installViewFactory();
        getDelegate().onCreate(savedInstanceState);
        super.onCreate(savedInstanceState);
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        getDelegate().onPostCreate(savedInstanceState);
    }

    public ActionBar getSupportActionBar() {
        return getDelegate().getSupportActionBar();
    }

    public void setSupportActionBar(@Nullable Toolbar toolbar) {
        getDelegate().setSupportActionBar(toolbar);
    }

    @Override
    public MenuInflater getMenuInflater() {
        return getDelegate().getMenuInflater();
    }

    @Override
    public void setContentView(@LayoutRes int layoutResID) {
        getDelegate().setContentView(layoutResID);
    }

    @Override
    public void setContentView(View view) {
        getDelegate().setContentView(view);
    }

    @Override
    public void setContentView(View view, ViewGroup.LayoutParams params) {
        getDelegate().setContentView(view, params);
    }

    @Override
    public void addContentView(View view, ViewGroup.LayoutParams params) {
        getDelegate().addContentView(view, params);
    }

    @Override
    protected void onPostResume() {
        super.onPostResume();
        getDelegate().onPostResume();
    }

    @Override
    protected void onTitleChanged(CharSequence title, int color) {
        super.onTitleChanged(title, color);
        getDelegate().setTitle(title);
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        getDelegate().onConfigurationChanged(newConfig);
    }

    @Override
    protected void onStop() {
        super.onStop();
        getDelegate().onStop();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        getDelegate().onDestroy();
    }

    public void invalidateOptionsMenu() {
        getDelegate().invalidateOptionsMenu();
    }

    private AppCompatDelegate getDelegate() {
        if (mDelegate == null) {
            mDelegate = AppCompatDelegate.create(this, null);
        }
        return mDelegate;
    }
}

别再黑了.代码取自AppCompatPreferenceActivity.java.

Android相关问答推荐

ArrayList.remove()(Kotlin中的removeAt())导致奇怪的IndexOutOfBoundsResponse异常

每次重启Android时预填入Room数据库

在Android Studio中,如何在BuildSrc Dependenices Kotlin文件中指定时标记与旧版本的依赖关系

Android从已连接的设备获得GATT

数据绑定在Android中等待填充值时显示未填充的值

Jetpack Compose-如何在进入新产品线之前删除单词?

在c中更新MVVMCross中TextView的Alpha#

FFmpeg Android 错误

Gradle在我的Android Compose项目中继续推广依赖版本

如何在这段代码android jetpack compose中实现全屏滚动

是什么导致调用 Firebase 服务器?

在段的中心绘制饼图(甜甜圈图)的图例

当手表与手机断开连接时,有没有办法在我的 Wear OS 应用程序中显示操作系统级别的图标?

如何在 Jetpack Compose 中设置行宽等于 TextField 的宽度?

如何在 Jetpack Compose 中设置行宽等于 TextField 的宽度?

获取模板向导配方类 Intellij 中的应用程序包名称

新的内部测试应用程序版本不适用于测试人员,即使它说它们是

TextField 溢出和软包装不适用于 Compose 约束布局

将生成的 AAR 与 Composables 一起使用时未解决的参考

Android Java Keystore 在另一台机器上损坏