Android将FragmentActivity更改为ActionbarActivity,并自定义标题和显示溢出

时间:2015-05-24 12:22:52

标签: android user-interface android-actionbar

我对自定义标题和actionbar溢出感到困惑。

直到现在我有一个Fragmentactivity,它使用一个带有大图像的自定义标题栏和标题栏上的另外两个按钮。我现在需要使用ActionBarActivity来显示带有2个选项菜单的操作溢出。 ActionbaractivityFragmentactivity的子类,但在我使用actionbaractivity后,onCreate()中的初始化出现了问题:

(equestWindowFeature(Window.FEATURE_CUSTOM_TITLE);

  

...错误requestFeature()必须在添加内容之前调用。

我搜索了StackOverlow,但找不到确切的答案。我认为这应该是一个非常简单的解决方案,但我无法得到它。

public class BluetoothChat extends ActionBarActivity implements TimePickerFragment.OnTimeDialogListener
@Override
public void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.CustomTheme);
    super.onCreate(savedInstanceState);
    if (D) Log.e(TAG, "+++ ON CREATE +++");

    // using custom title to create custom title bar with bdx logo
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);

    setContentView(R.layout.main);
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.windows_title);

自定义标题栏主题和布局     

    <ImageView
        android:id="@+id/header"
        android:src="@drawable/bdx_icon_284"
        android:layout_width="130dp"
        android:layout_height="50dp"/>
    <View
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="1"
        />
    <Button
        android:id="@+id/btnDebug"
        android:background="@drawable/ic_launcher"
        android:layout_width="50dp"
        android:layout_height="50dp"/>
    <Button
        android:id="@+id/btnBT"
        android:background="@drawable/ic_bluetooth_256"
        android:layout_width="50dp"
        android:layout_height="50dp"/>

</LinearLayout>

式:

<resources>
    <style name="CustomWindowTitleBackground">
        <item name="android:background">@color/title_color</item>
    </style>

    <style name="CustomTheme" parent="android:Theme">
        <item name="android:windowTitleSize">50dip</item>
        <item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item>

    </style>
</resources>

菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/btnConnect"
          android:icon="@drawable/ic_bluetooth_32"
          android:title="@string/secure_connect"
          android:showAsAction="always" />
    <item android:id="@+id/btnModifyName"
        android:icon="@drawable/ic_launcher"
        android:title="@string/modify_name"
        android:showAsAction="ifroom" />
</menu>

Theme.AppCompat主题

<style name="mActionBar" parent="@style/Widget.AppCompat.ActionBar">
    <item name="android:windowTitleSize">50dip</item>
    <item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item>
</style>

<style name="CustomTheme" parent="@style/Theme.AppCompat">
    <item name="android:actionBarStyle">@style/mActionBar</item>
    <item name="actionBarStyle">@style/mActionBar</item>
</style>

1 个答案:

答案 0 :(得分:0)

添加:

final ActionBar actionBar = getSupportActionBar();
actionBar.setCustomView(R.layout.windows_title);

而不是:

getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.windows_title);