新しいツールバー(Lollipop)にカスタムビューを追加しようとしています。しかし、どういうわけか、ビューはツールバーの下に追加されます。 actionBar.setCustomView
を使用したときは正常に機能していましたが、ツールバーに移行した後は機能しません。以下はコードです。どのような変更を行う必要がありますか?
フラグメント:
toolbar = (Toolbar) getView().findViewById(R.id.toolbar);
((ActionBarActivity) getActivity()).setSupportActionBar(toolbar);
toolbar.setTitle(getString(R.string.app));
ActionBar actionBar = ((ActionBarActivity) getActivity())
.getSupportActionBar();
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
LayoutInflater inflater = (LayoutInflater) getActivity()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// inflate the view
final View view = inflater.inflate(R.layout.actionbar_search, null);
final ImageView searchIcon = (ImageView) view
.findViewById(R.id.search_icon);
final ClearableAutoCompleteTextView searchBox = (ClearableAutoCompleteTextView) view
.findViewById(R.id.search_box);
// start with the text view hidden in the action bar
searchBox.setVisibility(View.INVISIBLE);
searchIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
toggleSearch(false, view);
}
});
searchBox.setOnClearListener(new OnClearListener() {
@Override
public void onClear() {
toggleSearch(true, view);
}
});
searchBox.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
}
});
toolbar.addView(view);
// actionBar.setCustomView(view); // This worked previously
//((ActionBarActivity)getActivity()).getSupportActionBar().setCustomView(view); //doesnt work with toolbar
ツールバーを使用すると、次のようにそれを達成できました。
setSupportActionBar(toolbar);
View logo = getLayoutInflater().inflate(R.layout.view_logo, null);
toolbar.addView(logo);
または、ViewGroupであるため、ツールバーxmlにビューを追加することもできます。これにより、レイアウトエディターでプレビューを表示できます。いいえJavaコードが必要です。
私に最適です。
LayoutInflater mInflater=LayoutInflater.from(context);
View mCustomView = mInflater.inflate(R.layout.toolbar_custom_view, null);
toolbar.addView(mCustomView);
追加したいビューを膨張させるだけで、ツールバービューをinflateメソッドの2番目のパラメーターとして渡します。このように、「addView」の呼び出しは不要です。
setSupportActionBar(toolbar);
View logo = getLayoutInflater().inflate(R.layout.view_logo, toolbar);