如何使用图标和滑动菜单将Sherlock Action Bar中的文本居中

时间:2014-03-05 06:49:39

标签: android android-actionbar actionbarsherlock slidingmenu

我正在尝试在Android Activity上实现一个Action Bar,它实现了Jeremy Feinstein的滑动菜单和actionbarSherlock。我面临的问题是将标题文本居中对齐在操作栏中。我的操作栏在文本左侧有一个名为“icon_sliding_menu”的菜单图标,用于激活左侧菜单滑动操作。

我使用了this示例来编写下面附带的内容。但是,当我添加“getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);”行以尝试自定义视图时,我的标题就会消失,我根本看不到任何文字。

当上面提到的行不在代码中时,

ActionBar: enter image description here

当上面提到的行写在代码中时,ActionBar: enter image description here

如何将文字与中心对齐?我在下面附上我的代码。

actionbar.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center" >

<TextView
    android:id="@+id/action_bar_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:textSize="18sp" />
</LinearLayout>

HomeActivity.java

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);

    final View actionBarLayout = LayoutInflater.from(this).inflate(
            R.layout.actionbar, null);

    getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
    getSupportActionBar().setDisplayShowCustomEnabled(true);
    getSupportActionBar().setCustomView(actionBarLayout);
    getSupportActionBar().setTitle("Home");
    getSupportActionBar().setHomeButtonEnabled(true);

    initSlidingMenu();
}

private void initSlidingMenu() {

    slidingMenu = new SlidingMenu(this);
    slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
    slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);

    slidingMenu.setAboveOffset(50);
    slidingMenu.setBehindOffset(150);
    slidingMenu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);

    slidingMenu.setOnOpenListener(new OnOpenListener() {
        @Override
        public void onOpen() {
            getSupportActionBar().setTitle("Menu");
        }
    });

    slidingMenu.setOnCloseListener(new OnCloseListener() {
        @Override
        public void onClose() {
            getSupportActionBar().setTitle("Home");
        }
    });

    slidingMenu.setSecondaryOnOpenListner(new OnOpenListener() {
        @Override
        public void onOpen() {
            getSupportActionBar().setTitle("Current Trip");
        }
    });

    // Add left menu
    mTransaction = this.getSupportFragmentManager().beginTransaction();
    slidingMenu.setMenu(R.layout.left_menu);
    mTransaction.commit();

    // Add right menu
    mTransaction = this.getSupportFragmentManager().beginTransaction();
    slidingMenu.setSecondaryMenu(R.layout.right_menu);
    mTransaction.commit();
}

@Override
protected void onResume() {
    super.onResume();
    getSupportActionBar().setIcon(R.drawable.icon_sliding_menu);
}

1 个答案:

答案 0 :(得分:0)

您可以使用ActionBar的titleTextStyle属性来执行此操作。

在styles.xml中,在App主题中,将actionBarTabSyle设置为自定义样式,

 <item name="titleTextStyle">@style/TitleTextStyle</item>

继承人CustomActionBarTabs,

<!-- action bar tab styles -->
<style name="TitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">@color/actionbar_text</item>
    <item name="android:gravity">center</item> //center the title
</style>

使用此功能,您可以为标题文本设置各种样式,如颜色等。请记住,这只会使ActionBar中提供给标题的空间的文本居中。如果这没有多大帮助,您可以随时创建自己的自定义视图,并将其添加到ActionBar中,

 getSupportActionBar().setCustomView(R.layout.action_bar);

如果您想创建自己的布局,请按照以下两个简单步骤操作:

  1. Java代码

     getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
     getSupportActionBar().setCustomView(R.layout.actionbar);
    

    R.layout.actionbar是以下XML。

  2. XML

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_gravity="center"
       android:orientation="vertical">
    
    <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center"
       android:text="YOUR ACTIVITY TITLE"
       android:textColor="#ffffff"
       android:textSize="24sp" />
    </LinearLayout>
    
  3. Source.