如何以编程方式在actionBar Sherlock中设置Text

时间:2013-07-24 15:29:00

标签: android actionbarsherlock

下面是我的应用程序标题,我想在“DD / MM”位置设置当前日期时间。我该如何以编程方式执行此操作?我正在使用actionBarSherlock

enter image description here

这是我设置背景的方式:

<style name="AppBaseTheme" parent="Theme.Sherlock.Light.DarkActionBar">
        <item name="actionBarStyle">@style/Widget.MyTheme.ActionBar</item>
        <item name="android:actionBarStyle">@style/Widget.MyTheme.ActionBar</item>
    </style>

    <style name="Widget.MyTheme.ActionBar" parent="Widget.Sherlock.ActionBar">
        <item name="android:background">@drawable/abs_bg</item>
        <item name="background">#ffffff</item>
</style>

3 个答案:

答案 0 :(得分:2)

我可能会误解,但你可以添加一个什么都不做的MenuItem,设置为那个文本(虽然这可能是一个糟糕的方法)。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    String currentTime;
    // Calculate your string
    MenuItem item = menu.add(Menu.NONE, 0, Menu.NONE, currentTime);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case 0:
        return true;
    }
    return super.onOptionsItemSelected(item);
}

我认为这是一种方法,虽然我不确定它看起来有多好。

编辑:您也可以通过设置自定义背景,在按下MenuItem时删除ActionBar突出显示的蓝色部分。下面是一个快速的方法(假设你只有那个MenuItem):

<style name="BlankMenu" parent="@style/AppTheme">
    <item name="actionButtonStyle">@style/CustomItem</item>
</style>

<style name="CustomItem" parent="@style/Widget.Sherlock.ActionButton">
    <item name="background">@drawable/transparent</item>
</style>

@drawable/transparent为1x1透明PNG时。只需在主文件中将主题设置为BlankMenu

如果您的目标是仅将日期包围在蓝色背景中,您还可以修改主题以使MenuItem默认为蓝色背景,并从ActionBar主题中删除蓝色部分。它可能会让它更可靠。

答案 1 :(得分:2)

为XML中的标题创建自定义布局,为此更新/ findViewById并更新日期,然后在ActionBar对象上调用setCustomView(View)

ActionBar actionBar = getSupportActionBar();
LinearLayout actionBarView = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.action_bar_view, null);
((TextView) actionBarView.findViewById(R.id.textViewDate)).setText(CURRENT_DATE);
actionBar.setCustomView(actionBarView);            
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM);

编辑:另外,如果你想从资源ID设置自定义视图,你可以调用setCustomView(int resID),​​然后使用getCustomView对视图进行实际更改,如果你有需要的数据会更有用多次更改或在创建actionBar之后。

答案 2 :(得分:0)

如果您不需要使用任何选项菜单或任何其他actionBarSherlock功能,则不需要此库。您可以将任何主题与 NoTitleBar 一起使用,并创建自定义RelativeLayout来创建标题。

<强> styles.xml

<style name="AppTheme" parent="android:Theme.Light.NoTitleBar">
 <!--Anything -->
</style>

您的layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <RelativeLayout android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="50dip"
        android:background="#6ccff6">

        <ImageView
            android:id="@+id/logo"
            android:adjustViewBounds="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/abs_bg" />

        <TextView
            android:id="@+id/date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="10dp"
            android:textColor="@android:color/white"
            android:text="July 25"
            android:textAppearance="?android:attr/textAppearanceMedium" />

    </RelativeLayout>
    <!-- Put any other layout/view here -->

</LinearLayout>