V mojej aplikácii prechádzam z ActionBar
na Toolbar
.
Ale neviem, ako zobraziť a nastaviť udalosť kliknutia na šípku späť na Toolbare
, ako som to urobil na Actionbare
.
Pri ActionBar
volám mActionbar.setDisplayHomeAsUpEnabled(true)
.
Ale podobná metóda neexistuje.
Stretol sa už niekto s touto situáciou a našiel nejaký spôsob, ako ju vyriešiť?
Ak používate ActionBarActivity
, môžete systému Android povedať, aby použil Toolbar
ako ActionBar
takto:
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);
A potom zavolá na
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
bude fungovať. Môžete to použiť aj vo fragmentoch, ktoré sú pripojené k ActionBarActivities
, môžete to použiť takto:
((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);
Ak nepoužívate ActionBarActivities
alebo ak chcete získať šípku späť na Toolbar
, ktorý'nie je nastavený ako váš SupportActionBar
, potom môžete použiť nasledujúce:
mActionBar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_action_back));
mActionBar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//What to do on back clicked
}
});
Ak používate android.support.v7.widget.Toolbar
, potom by ste mali do svojej AppCompatActivity
pridať nasledujúci kód:
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
môžete použiť metódu setNavigationIcon na paneli nástrojov. Android Doc
mToolBar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
mToolBar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handleOnBackPress();
}
});
Ak ste používali AppCompatActivity
a vydali ste sa cestou jej nepoužívania, pretože ste nechceli získať automatický ActionBar
, ktorý poskytuje, pretože chcete oddeliť Toolbar
, kvôli potrebám Material Designu a CoordinatorLayout
alebo AppBarLayout
, potom zvážte toto:
Stále môžete používať AppCompatActivity
, nemusíte ho prestať používať len preto, aby ste mohli vo svojom xml používať <android.support.v7.widget.Toolbar>
. Stačí vypnúť panel akcií style nasledovne:
Najprv si v súbore styles.xml
odvodite štýl z jednej z tém NoActionBar, ktorá sa vám páči, ja som použil Theme.AppCompat.Light.NoActionBar
takto:
<style name="SuperCoolAppBarActivity" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/primary</item>
<!-- colorPrimaryDark is used for the status bar -->
<item name="colorPrimaryDark">@color/primary_dark</item>
...
...
</style>
V manifeste vašej aplikácie vyberte práve definovanú tému podriadeného štýlu takto:
<activity
android:name=".activity.YourSuperCoolActivity"
android:label="@string/super_cool"
android:theme="@style/SuperCoolAppBarActivity">
</activity>
Vo vašom Activity Xml, ak je panel nástrojov definovaný takto:
...
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
/>
...
Potom, a to je dôležitá časť, nastavíte podporný panel akcií na AppCompatActivity, ktorú rozširujete, takže panel nástrojov vo vašom xml sa stane panelom akcií. Mám pocit, že toto je lepší spôsob, pretože môžete jednoducho robiť mnohé veci, ktoré ActionBar umožňuje, ako napríklad menu, automatický názov aktivity, obsluhu výberu položky atď. bez toho, aby ste sa museli uchyľovať k pridávaniu vlastných obslužných programov kliknutia atď.
Vo vašej aktivite onCreate vykonajte nasledujúce kroky:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_super_cool);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//Your toolbar is now an action bar and you can use it like you always do, for example:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}