Tom*_*ary 8 android android-actionbar android-5.0-lollipop
我有一个问题,因为我正在为棒棒糖开发应用程序support library v7,所以我需要使用标准ActionBar.以前我用过setHomeButtonEnabled 多个活动actionBar.
当我将app主题切换为材质时,一切正常,除了setHomeButtonEnabled方法.
标题不可点击.
救命!
Sim*_*mon 18
出于某种原因,Google的某个人认为这些应该成为无操作者.这可以在下面看到.
@Override
public void setHomeButtonEnabled(boolean enable) {
// Ignore
}
Run Code Online (Sandbox Code Playgroud)
@Override
public void setHomeButtonEnabled(boolean enabled) {
// If the nav button on a Toolbar is present, it's enabled. No-op.
}
Run Code Online (Sandbox Code Playgroud)
似乎用于将工具栏映射到ActionBar差异的ToolbarWidgetWrapper将工具栏中的导航图标视为"Home As Up Indicator".所以只有那部分是可点击的.您可以在工具栏上设置的新徽标永远无法点击.他们甚至不会露出视线,它的private 卷眼.
因此,第一个解决办法是,如果你不使用"家庭高达"功能,或者您愿意为你绘制了与您的家庭可绘制结合,那么你可以简单地设置android:homeAsUpIndicator您的属性android:actionBarStyle一起android:displayOptions="homeAsUp".
<style name="AppBaseTheme" parent="@android:style/Theme.Material.Light.DarkActionBar">
<item name="android:actionBarStyle">@style/ActionBar</item>
</style>
<style name="ActionBar" parent="@android:style/Widget.Material.Light.ActionBar.Solid">
<item name="android:background">@color/action_bar_bg</item>
<item name="android:displayOptions">homeAsUp</item>
<item name="android:homeAsUpIndicator">@drawable/app_logo</item>
</style>
Run Code Online (Sandbox Code Playgroud)
显然,使用代码可以完成同样的事情.
getActionBar().setHomeAsUpIndicator(R.drawable.app_logo);
getActionBar().setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)
但这意味着它不会在活动实际加载时出现.最好选择主题选项.
最好的第三个选项是为新工具栏视图设置导航按钮的样式.哪个使用android:navigationButtonStyle但猜测是什么......他们没有公开这个.我相信这是一个绝对的错误,但这一切都开始变得像我们在ActionBar中首先遇到的原始问题.
所以,让我们来解决,解决问题.好吧,让我们试着设置android:navigationIcon一下android:toolbarStyle.不.好吧,让我们试试你能想到的所有其他可能的变化,包括使用android:actionBarStyle和android:actionBarTheme.不.我希望这是因为在默认的ActionBar/Activity/Toolbar混乱中某些地方覆盖了navigationIcon.我不能打扰找到它并在它周围工作.
好的,最后让我们选择最灵活的选项.删除默认主页按钮并通过实现旧的自定义导航功能使用我们自己的主页按钮.这意味着如果您已经使用自定义导航,则必须将导航与此导航结合使用.
值-V21/styles.xml
<style name="AppBaseTheme" parent="@android:style/Theme.Material.Light.DarkActionBar">
<item name="android:actionBarStyle">@style/ActionBar</item>
</style>
<style name="ActionBar" parent="@android:style/Widget.Material.Light.ActionBar.Solid">
<item name="android:background">@color/action_bar_bg</item>
<item name="android:displayOptions">showCustom</item>
<item name="android:customNavigationLayout">@layout/nav_layout</item>
</style>
Run Code Online (Sandbox Code Playgroud)
布局-V21/nav_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/home"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start|center_vertical"
android:layout_marginEnd="8dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:adjustViewBounds="true"
android:background="?android:attr/actionBarItemBackground"
android:contentDescription="@string/ab_home_description"
android:src="@drawable/app_logo"
android:scaleType="fitCenter"
/>
Run Code Online (Sandbox Code Playgroud)
在您的Activity/BaseActivity类中添加以下内容.这将伪造主页按钮.
@Override
public boolean onPrepareOptionsMenu(final Menu menu)
{
prepareOptionsMenuLollipop(menu);
return super.onPrepareOptionsMenu(menu);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void prepareOptionsMenuLollipop(Menu menu)
{
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
final MenuItem homeItem = menu.add(Menu.NONE, android.R.id.home,
Menu.NONE, R.string.ab_home_description);
homeItem.setVisible(false);
View homeView = getActionBar().getCustomView().findViewById(android.R.id.home);
homeView.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v)
{
getWindow().getCallback().onMenuItemSelected(Window.FEATURE_OPTIONS_PANEL, homeItem);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4165 次 |
| 最近记录: |