ActionBar中的自定义视图未加载

时间:2013-11-26 13:06:12

标签: android android-fragments

我有一个片段,我想在操作栏中加载自定义视图,所以我会执行以下操作。

在表单活动中:

public class FormActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);    
        setContentView(R.layout.activity_form);

        try {
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager
                .beginTransaction();

            fragmentTransaction.replace(R.id.content_frame, new FormFragment()).addToBackStack(null).commit();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

在片段中:

public class FormFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View actionBarButtons = inflater.inflate(R.layout.form_custom_actionbar,
                new LinearLayout(getActivity()), false);
        View cancelActionView = actionBarButtons.findViewById(R.id.action_cancel);
        cancelActionView.setOnClickListener(this);
        View doneActionView = actionBarButtons.findViewById(R.id.action_done);
        doneActionView.setOnClickListener(this);

        ActionBar ab = ((ActionBarActivity) getActivity()).getSupportActionBar();
        ab.setCustomView(actionBarButtons);

        return inflater.inflate(R.layout.fragment_form, null);
    }
...

CustomActionBar res布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:divider="?android:attr/dividerVertical"
    android:dividerPadding="12dip"
    android:showDividers="middle">

    <!-- id must match corresponding menu item id -->
    <LinearLayout
        android:id="@+id/action_cancel"
        style="@style/FormCustomActionButton">

        <ImageView
            android:src="@drawable/ic_action_remove"
            style="@style/FormCustomActionButtonImage" />
        <TextView
            android:text="@string/discard_label"
            style="@style/FormCustomActionButtonText"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>

    <!-- id must match corresponding menu item id -->
    <LinearLayout
        android:id="@+id/action_done"
        style="@style/FormCustomActionButton">

        <ImageView
            android:src="@drawable/abc_ic_cab_done_holo_light"
            style="@style/FormCustomActionButtonImage" />
        <TextView
            android:text="@string/save_label"
            style="@style/FormCustomActionButtonText"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>


</LinearLayout>

片段加载正常,但我没有在顶部获得自定义操作栏按钮。我错过了什么?

1 个答案:

答案 0 :(得分:2)

将评论转换为答案

actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM)

同时查看此链接

Manually inflating custom view yields different layouts for ActionBar custom view