我从原来的ActionBar更改为AppCompat工具栏和setSupportActionBar(工具栏)。 当我使用getSupportActionBar()和setDisplayHomeAsUpEnabled(true)作为后退箭头时,click不会调用onOptionsItemSelected或任何其他侦听器方法。 我需要为它实现一些特殊的监听器吗? 贝福一切工作得很好。 编辑:初始化的ActionBar: mToolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(mToolbar); mActionBar = getSupportActionBar(); mActionBar.setHomeButtonEnabled(true); 并用片段replace内容后,我这样做: mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); mDrawerToggle.setDrawerIndicatorEnabled(false); mActionBar.setDisplayHomeAsUpEnabled(true);
我的应用程序用户界面是使用Android支持库构build的,但目前没有AppCompat版本的(intederminate)进度条,这是我的应用程序真正需要的。 我宁愿不使用任何第三方库来实现材料devise进度条,所以我想知道是否有人关于为什么没有包含在支持库中的信息,以及是否有任何到达(和何时)的迹象。
我将从本机Holo( Theme.Holo等)的代码库移植到appcompat-v7 ( Theme.AppCompat等)。 如果你不想阅读详细信息,最后一部分包含tl; dr 。 问题 一切正常,但我有复制一个很容易使用旧的ActionBar行为的问题。 我有一个video播放器,在风景中,我希望它的行为像YouTube:隐藏(animation)播放器控件,应用程序栏和状态栏。 在用户交互时,UI控件应该保持这个“熄灯”模式并且回到正常状态。 如果用户在X秒钟内没有触摸屏幕,则定时器将返回熄灭模式。 使用ActionBar的相同代码不会使用Toolbar 。 所以,我使用的是: 一个不透明的状态栏 setSystemUiVisibility()使用这些组合之一: 默认: View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 熄灭: View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE minSdkVersion是16 显示和隐藏ActionBar,我简单地称它为show()和hide() 在应用程序栏上实现相同的行为我subclassed Toolbar并添加一个show()和一个hide()方法相同(首先简单地使用setVisibility() ,然后使用animation – 获得相同的结果) LAYOUT_STABLE使得appbar最终会在状态栏后面(因为它意味着一个fitSystemWindows 。由于appbar是视图层次结构中的普通视图,并不像ActionBar那样装饰,它受到那个标志这是我在屏幕上看到的: 不立即清除工具栏边界是什么,因为应用程序栏在黑暗中是黑暗的,但是您可以看到标题被剪切和“未alignment”。 这是因为工具栏大小正确,但在状态栏后面。 我的主要问题是在这一点上,没有公共的API来获得状态栏高度,矩形或其他任何东西来垂直移动我的应用程序栏以显示在状态栏下方。 testing主要是在LP513D上的N5上进行的(在编写本文时为最新的Lollipop公开构build版本),但Android 4.4上也可以看到相同的结果。 哈克解决scheme 也就是说,经过相当一段时间和一些失败的尝试,使得它以不太疯狂的方式工作(包括试图把它装进装饰的相当绝望的尝试),我采取了这种使它工作的恶劣方式: […]
我尝试从新的支持库22.2.0实现自动隐藏工具栏function。 没有SwipeRefreshLayout工作正常: 但是当我重新添加这个布局,工具栏重叠 recyclerview: 码: <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:fab="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:theme="@style/ThemeOverlay.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:layout_scrollFlags="scroll|enterAlways"/> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/swipe_container" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/cardList" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" app:layout_behavior="@string/appbar_scrolling_view_behavior"/> </android.support.v4.widget.SwipeRefreshLayout> </android.support.design.widget.CoordinatorLayout> </android.support.v4.widget.DrawerLayout> 任何想法如何解决这个问题?
我正在尝试AppCompat的棉花糖。 而我想有一个透明的状态栏,但它变成白色。 我已经尝试了几个解决scheme,但他们并没有为我工作( 透明状态栏不能用windowTranslucentNavigation =“false” , 棒棒 堂 :绘制在颜色设置为透明的statusBar后面 )。 这里是相关的代码。 我的styles.xml <style name="Bacon" parent="Theme.Bacon"/> <style name="Theme.Bacon" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/theme_primary</item> <item name="colorPrimaryDark">@color/theme_primary_dark</item> <item name="colorAccent">@color/theme_accent</item> <item name="windowActionBar">false</item> <item name="windowActionBarOverlay">true</item> <item name="windowNoTitle">true</item> <item name="android:windowBackground">@color/background_material_light</item> </style> <style name="Theme.Bacon.Detail" parent="Bacon"/> V21 <style name="Bacon" parent="Theme.Bacon"> <item name="android:windowDrawsSystemBarBackgrounds">true</item> </style> <style name="Theme.Bacon.Detail" parent="Bacon"> <item name="android:statusBarColor">@android:color/transparent</item> </style> 活动 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> […]
为什么64位Windows在exception期间展开堆栈,如果堆栈穿越内核边界–32位Windows可以? 这整个问题的背景来自: 消失OnLoadexception的情况 – 在x64中的用户模式callbackexception 背景 在32位Windows中,如果我在我的用户模式代码中抛出exception,则从内核模式代码中调用该代码,这是从我的用户模式代码中调用的,例如: User mode Kernel Mode —————— ——————- CreateWindow(…); ——> NtCreateWindow(…) | WindowProc <———————+ Windows中的结构化exception处理(SEH)可以展开堆栈,通过内核模式展开,返回到我的用户代码,在那里我可以处理exception,我看到一个有效的堆栈跟踪。 但不是在64位的Windows Windows的64位版本不能这样做: 出于复杂的原因,我们不能在64位操作系统 (amd64和IA64) 上传播exception 。 自从Server 2003的第一个64位版本以来,情况一直如此。在x86上,情况并非如此 – exception通过内核边界传播,并最终走回帧 由于在这种情况下无法回溯可靠的堆栈跟踪,所以必须作出决定:让您看到非无意义的exception,或者完全隐藏它: 当时的内核架构师决定采取保守的AppCompat友好的方法 – 隐藏exception,并希望最好的。 本文继续讨论所有64位Windows操作系统的performance如何: Windows XP 64位 Windows Server 2003 64位 Windows Vista 64位 Windows Server 2008 64位 但从Windows 7(和Windows Server 2008)开始,架构师改变了他们的想法。 对于只有 64位应用程序(不是32位应用程序),它们(默认情况下)会停止抑制这些用户内核用户exception。 […]
我使用这个教程整容我的Holo应用程序的棒棒糖: http : //android-developers.blogspot.ru/2014/10/appcompat-v21-material-design-for-pre.html 我拥有的: 主题 <style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="windowActionModeOverlay">true</item> <item name="colorPrimary">@color/theme_primary</item> <item name="colorPrimaryDark">@color/theme_primary_dark</item> <item name="colorAccent">@color/theme_accent</item> </style> 工具栏布局 <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout_height="wrap_content" android:layout_width="match_parent" android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimary" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 在多选模式下从具有ListFragment片段的ActionBarActivityinheritance的活动 getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); 结果 :工具栏是确定的。 它使用sepcified主题颜色,但ActionMode中的ListFragment使用的ActionBar(通过点击并按住列表项目激活)具有标准的Dark.ActionBar颜色。 此外,操作栏的popup菜单使用黑暗的主题。 我尝试了所有的技巧,但仍然无法解决这个问题。 我将不胜感激任何帮助。 BTW。 我发现ActionBar的暗色是由工具栏的app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" ,但是不知道如何解决这个问题,因为这个属性是正确的工具栏外观所需要的。
我在Android Studio中使用Android 5.0 Lollipop的AppCompat-v7:21.0.0支持库。 我的问题是,可以通过在values/styles.xml文件中设置colorPrimaryDark来更改状态栏颜色,在xml布局预览和模拟器中都显示为黑色。 那么怎么了? 我错过了什么吗? 请告诉我。 谢谢。 编辑: 我意识到更改状态栏上的前棒棒糖版本的颜色是不可能的事实。 我的XML布局编辑器预览和我的模拟器都设置为API级别21(5.0棒棒糖)。 但是,状态栏仍然不是我在colorPrimaryDark设置的颜色。 我尝试在styles.xml执行statusBarColor ,但无济于事。 它仍然是黑色的。 另外: 我看到类似问题的答案之一,他们build议我把我的minSdkVersion到21.我试过了,但没有奏效。 我希望我的应用能够在API Level 15及以上版本的设备上运行。
升级到appcompat 25.1.0我开始出现连线错误。 在我的代码中: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); 我得到皮棉错误: AppCompatActivity.onCreate can only be called from within the same library group (groupId=com.android.support) 如何防止这种行为?
自升级到最新的appcompat库以来,我在ViewUtils的日志中看到一条消息。 app:theme is now deprecated. Please move to using android:theme instead. 我使用parent="Theme.AppCompat.Light.NoActionBar"作为我的主题父。