как установить панель инструментов на FragmentActivity?
Я хочу установить панель инструментов в свою деятельность, которая расширяет FragmentActivity. Я знаю, что для использования setSuppoertActionBar(toolbar)
мы расширяем AppCompatActivity
вместо FragmentActivity
но я переопределяю метод onMenuItemSelected(int featureId, MenuItem item)
который является окончательным в AppCompatActivity
и конечный метод не может переопределить. поэтому я ограничен расширением FragmentActivity
.
Вот мой код:
public class MainActivity extends FragmentActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar); -> error is here
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch(item.getItemId()){
case R.id.action_search:
onSearchRequested();
break;
}
return super.onMenuItemSelected(featureId, item);
}
Я видел много ответов, связанных с этим вопросом, но каждый говорит, что extends AppCompatActivity
вместо FragmentActivity
но я хочу установить панель инструментов, а также переопределить onMenuItemSelected(int featureId, MenuItem item)
.
что мне делать, пожалуйста, помогите.
Ответы
Ответ 1
Это хорошо, когда вы используете NavigationDrawer
используйте это:
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
затем установите заголовок панели инструментов в соответствии с другим фрагментом с разными заголовками в onNavigationItemSelected
: -
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
sfm = getSupportFragmentManager();
Fragment fragment = new Fragment();
int id = item.getItemId();
if (id == R.id.nav_id) {
fragment = new YourFragment();
toolbar.setTitle("SET TOOLBAR NAME");
}else if (id == R.id.nav_id2) {
fragment = new YourFragment();
toolbar.setTitle("SET TOOLBAR NAME");
}
Для одного фрагмента сначала настройте свой style.xml
следующим образом:
<style name="YourStyleName" parent="Theme.AppCompat.Light.DarkActionBar">
// ToDo as you want to do or as per your requirement
</style>
затем примените к своей настраиваемой toolbar
: -
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/YourStyleName" >
// ...........
</android.support.v7.widget.Toolbar>
Ответ 2
Вы также можете создать свою собственную toolbar
:
Сначала Theme.AppCompat.Light.NoActionBar
основную тему для расширения Theme.AppCompat.Light.NoActionBar
<style name="style_1" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
</style>
Не забудьте применить тему:
@Override
protected void onCreate(Bundle savedInstanceState) {
this.setTheme(R.style.style_1);
// ...
}
то в вашей Activity
xml вы можете настроить свою собственную toolbar
:
<include layout="@layout/my_toolbar"/>
где @layout/my_toolbar
может выглядеть так:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="@dimen/toolbar_height"
app:contentInsetStart="0dp"
app:layout_collapseParallaxMultiplier="1.0">
<!-- insert your views here -->
</android.support.v7.widget.Toolbar>
Ответ 3
First set style as
<style name="style_1" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
</style>
then
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle("Home");
Ответ 4
Вы должны расширить свою активность из AppCompatActivity, так как это включает поддержку фрагментов и панели инструментов. И затем переопределить
onCreateOptionsMenu() и onOptionsItemSelected()
Вы не должны переопределять
onMenuItemSelected()
public class MainActivity extends AppCompatActivity { ...
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FragmentTransaction ft = getSupportFragmentManager.beginTransaction();
....
....
@Override
public boolean onCreateOptionsMenu(Menu menu) {
...
...
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
...
}