AppCompat v7-r23。默认情况下,工具栏中的主页按钮不显示
AppCompat v7-r23. Home button in Toolbar doesn't show by default
我想在打开 MyActivity 时默认显示主页(汉堡包)按钮。不幸的是,我在左上角看不到任何按钮。但是在我打开和关闭我的抽屉后出现主页按钮。
我使用最新的 appcompat-v7:23.0.1 库:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.1'
}
我的activity:
public class MyActivity extends AppCompatActivity{
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mDrawerToggle;
private CharSequence mTitle;
private Toolbar toolbar;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drawer);
toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
getSupportActionBar().setHomeButtonEnabled(true);
}
mTitle = getTitle();
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerToggle = new ActionBarDrawerToggle(
this,
mDrawerLayout,
toolbar,
R.string.hello_world,
R.string.app_name)
{
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
toolbar.setTitle(mTitle);
invalidateOptionsMenu();
syncState();
}
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
//toolbar.setTitle(mDrawerTitle);
invalidateOptionsMenu();
syncState();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
}
}
activity_drawer.xml:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
style="@style/MatchParent">
<!-- Your normal content view -->
<LinearLayout
style="@style/MatchParent"
android:orientation="vertical">
<include layout="@layout/toolbar"/>
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
<FrameLayout
android:layout_width="304dp"
android:layout_height="match_parent"
android:layout_gravity="left|start">
<include layout="@layout/navigation_drawer" />
</FrameLayout>
</android.support.v4.widget.DrawerLayout>
我尝试了以下变体来默认显示主页按钮:
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
但它也不起作用。
比如我只设置:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
然后当我打开 activity 时向上(箭头)按钮正确显示,并在我打开和关闭抽屉后转换为主页按钮。
可能是什么问题?
提前致谢。
如果您不从调用syncState,您的Activity的onPostCreate或调用通过 onConfigurationChanged 或 onOptionsItemSelected 对应于您的 Activity 回调,您应该这样做。
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Pass the event to ActionBarDrawerToggle, if it returns
// true, then it has handled the app icon touch event
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
// Handle your other action bar items...
return super.onOptionsItemSelected(item);
}
我想在打开 MyActivity 时默认显示主页(汉堡包)按钮。不幸的是,我在左上角看不到任何按钮。但是在我打开和关闭我的抽屉后出现主页按钮。
我使用最新的 appcompat-v7:23.0.1 库:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.1'
}
我的activity:
public class MyActivity extends AppCompatActivity{
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mDrawerToggle;
private CharSequence mTitle;
private Toolbar toolbar;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drawer);
toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
getSupportActionBar().setHomeButtonEnabled(true);
}
mTitle = getTitle();
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerToggle = new ActionBarDrawerToggle(
this,
mDrawerLayout,
toolbar,
R.string.hello_world,
R.string.app_name)
{
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
toolbar.setTitle(mTitle);
invalidateOptionsMenu();
syncState();
}
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
//toolbar.setTitle(mDrawerTitle);
invalidateOptionsMenu();
syncState();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
}
}
activity_drawer.xml:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
style="@style/MatchParent">
<!-- Your normal content view -->
<LinearLayout
style="@style/MatchParent"
android:orientation="vertical">
<include layout="@layout/toolbar"/>
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
<FrameLayout
android:layout_width="304dp"
android:layout_height="match_parent"
android:layout_gravity="left|start">
<include layout="@layout/navigation_drawer" />
</FrameLayout>
</android.support.v4.widget.DrawerLayout>
我尝试了以下变体来默认显示主页按钮:
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
但它也不起作用。
比如我只设置:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
然后当我打开 activity 时向上(箭头)按钮正确显示,并在我打开和关闭抽屉后转换为主页按钮。
可能是什么问题?
提前致谢。
如果您不从调用syncState,您的Activity的onPostCreate或调用通过 onConfigurationChanged 或 onOptionsItemSelected 对应于您的 Activity 回调,您应该这样做。
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Pass the event to ActionBarDrawerToggle, if it returns
// true, then it has handled the app icon touch event
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
// Handle your other action bar items...
return super.onOptionsItemSelected(item);
}