Saya mengimplementasikan panel navigasi gaya lollipop dengan pustaka dukungan appcompat terbaru tetapi masalahnya adalah ikon hamburger tidak pernah ditampilkan. Hanya ikon kembali yang ditampilkan.
Ini adalah kode aktivitas saya
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar;
import android.view.View;
public class Home extends ActionBarActivity {
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mDrawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
initViews();
}
private void initViews(){
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
toolbar.setTitleTextColor(getResources().getColor(android.R.color.white));
setSupportActionBar(toolbar);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,toolbar , R.string.drawer_open, R.string.drawer_close) {
/** Called when a drawer has settled in a completely closed state. */
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
//getActionBar().setTitle(mTitle);
//invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
/** Called when a drawer has settled in a completely open state. */
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
//getActionBar().setTitle(mDrawerTitle);
//invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
};
// Set the drawer toggle as the DrawerListener
mDrawerLayout.setDrawerListener(mDrawerToggle);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
}
}
Ini adalah file gaya saya
<resources>
<!-- Application theme. -->
<style name="Theme.Test" parent="@style/Theme.AppCompat.Light">
<!-- customize the color palette -->
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/accent</item>
<item name="windowActionBar">false</item>
<item name="drawerArrowStyle">@style/Theme.Test.DrawerArrowStyle</item>
</style>
<style name="Theme.Test.DrawerArrowStyle" parent="@style/Widget.AppCompat.DrawerArrowToggle">
<item name="spinBars">true</item>
<item name="color">@android:color/white</item>
</style>
File tata letak
<RelativeLayout 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="match_parent" >
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/toolbar">
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- The navigation drawer -->
<ListView
android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#111"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>
</RelativeLayout>
Dalam kedua kasus hanya panah kembali yang ditampilkan, saya telah membaca banyak posting tetapi sepertinya tidak ada yang membuat perbedaan. Bantuan apa pun akan dihargai.
ActionBarDrawerToggle
mDrawerToggl.syncState()
, sebenarnya saya menampilkan panel samping Navigasi sebagai hamparan di ToolBar sehingga animasi tidak diperlukan dalam kasus saya.Pastikan Anda mengimpor toggle laci yang benar.
Ketika saya mengimpor versi v4, saya memiliki panah (di bawah).
Mengubahnya menjadi ini (di bawah, v7) memperbaiki masalah saya.
sumber
Pastikan Anda menelepon
mDrawerToggle.syncState();
SETELAH menelepon
sumber
Saat menggunakan ActionBarDrawerToggle, Anda harus memanggilnya selama onPostCreate () dan onConfigurationChanged ()
sumber
onOptionsItemSelected
juga.Karena NavigationDrawer saya memperluas Fragmen, bukan Aktivitas, saya tidak dapat mengganti postCreate. Di bawah ini adalah apa yang saya lakukan.
Semoga membantu!
sumber
Jangan lupa untuk mengganti metode onOptionsItemSelected dan periksa apakah ctionBarDrawerToggle telah diklik, dalam hal ini kembalikan nilai true jika tidak, aktivitas akan selesai.
sumber
return actionBarDrawerToggle.onOptionsItemSelected(item) || super.onOptionsItemSelected(item)
Anda cukup menggunakan ini:
sumber
Saat menyertakan ActionBarDrawerToggle, pastikan untuk menggunakan metode posting:
sumber
setHomeAsUpIndicator(R.drawable.ic_menu/ic_back)
itu memaksa ikon yang berpura-pura saat beralih antar fragmen. Tetapi setelah diperbarui ke ikon burger animasi baru, itu tidak berhasil.mDrawerToggle.syncState()
tidak berhasil untuk saya, tetapi saya akhirnya berhasil melakukannya:Namun, saya tidak menggunakan Toolbar.
sumber
Saya juga mendapat masalah serupa, dalam kasus saya masalah adalah, ketika memulai actionbartoggle, saya tidak memberikan argumen toolbar yang valid (toolbar diinisialisasi kemudian), tanpa toolbar non-null yang tepat, ActionBarToggle akan gagal membuat ikon hamburger.
sumber
Anda bisa memanggil syncState () dari aktivitas onPostCreate Anda untuk menyinkronkan indikator dengan keadaan DrawerLayout yang ditautkan setelah onRestoreInstanceState terjadi.
ActionBarDrawerToggle juga bisa digunakan secara langsung sebagai DrawerLayout.DrawerListener, atau jika Anda sudah menyediakan listener Anda sendiri, panggil setiap metode listener dari Anda sendiri.
sumber
Panel samping navigasi tidak muncul saat mengklik menu bilah tindakan. Ini memperbaikinya untuk saya.
sumber
Ini berhasil untuk saya. Saya telah memperluas AppCompatActivity dan bukan ActionBarActivity.
sumber