标签: android-appcompat

状态栏颜色未显示 - 5.0 Lollipop Android Studio:(AppCompat-v7:r21)

AppCompat-v7:21.0.0在Android Studio中使用Android 5.0 Lollipop 的支持库.我的问题是,可以通过设置来改变状态栏的颜色colorPrimaryDarkvalues/styles.xml的文件,则显示为黑色,在XML布局预览和模拟器中.

那有什么不对?我错过了什么吗?请告诉我.谢谢.

编辑: 我知道在Pre-Lollipop版本上更改状态栏颜色是不可能的.我的XML Layout Editor Preview和my Emulator都设置为API Level 21(5.0 Lollipop).但是,状态栏仍然不是我设置的颜色colorPrimaryDark.我想这样做statusBarColorstyles.xml,但无济于事.它仍然是黑色的.

另外: 我在一个类似的问题上看到了一个答案,他们建议我把它放到minSdkVersion21号.我试过了,但是没有用.我希望我的应用程序在API级别15及以上的设备上运行.

android statusbar android-appcompat android-studio android-5.0-lollipop

40
推荐指数
5
解决办法
4万
查看次数

Appcompat"java.lang.IllegalArgumentException:参数必须是此视图的后代"在ViewGroup.offsetRectBetweenParentAndChild中

我在上个月随机遇到这个问题:

java.lang.IllegalArgumentException: parameter must be a descendant of this view
   at android.view.ViewGroup.offsetRectBetweenParentAndChild(ViewGroup.java:4479)
   at android.view.ViewGroup.offsetDescendantRectToMyCoords(ViewGroup.java:4416)
   at android.view.ViewRootImpl.scrollToRectOrFocus(ViewRootImpl.java:2656)
   at android.view.ViewRootImpl.draw(ViewRootImpl.java:2300)
   at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2249)
   at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1882)
   at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1009)
   at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5508)
   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
   at android.view.Choreographer.doCallbacks(Choreographer.java:562)
   at android.view.Choreographer.doFrame(Choreographer.java:532)
   at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
   at android.os.Handler.handleCallback(Handler.java:730)
   at android.os.Handler.dispatchMessage(Handler.java:92)
   at android.os.Looper.loop(Looper.java:213)
   at android.app.ActivityThread.main(ActivityThread.java:5225)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:525)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
   at dalvik.system.NativeStart.main(NativeStart.java)
Run Code Online (Sandbox Code Playgroud)

经过大量的挖掘和测试后,我发现问题是在更新Appcompat lib(android-support-v7-appcompat)后于10月27日引入的.最新版本的Appcompat似乎无法解决此问题.

我想这个问题与类似的错误没有关系(比如这个问题),因为我已经隔离了在我的repo上引入问题的提交,它是包含Appcompat更新的提交.

这有什么线索吗?那里有同样问题的人?

android android-appcompat illegalargumentexception

40
推荐指数
1
解决办法
4059
查看次数

无法解析AppCompatActivity

重命名应用程序包名称后,Android Studio显示此错误 can't resolve symbol AppCompatActivity

我试过的事情:

  • 清洁项目
  • 清理Android Studio缓存
  • 清理Gradle缓存
  • 重新安装IDE
  • 文件 - >无效缓存/重启

但没有什么真正帮助.项目构建成功,但我不能使用语法高亮.

我用了 com.android.support:appcompat-v7:23.1.1

截图

BaseActivity

构建gradle文件

android android-appcompat android-studio appcompatactivity

39
推荐指数
7
解决办法
7万
查看次数

在Android 5.0 Lollipop中使用ActionMode ActionBar(使用AppCompat)

我用这个教程来改造我的Lollipop Holo应用程序:http: //android-developers.blogspot.ru/2014/10/appcompat-v21-material-design-for-pre.html

是)我有的:

  1. 主题

    <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>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 工具栏布局

    <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" />
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在多选模式下使用ListFragment片段从ActionBarActivity继承的活动

    getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);

结果:工具栏正常.它使用sepcified主题颜色,但ActionMode中的ListFragment使用的ActionBar(通过点击并保持列表项激活)具有标准的Dark.ActionBar颜色.操作栏的弹出菜单也使用黑暗主题.

我尝试了所有的SO技巧,但仍然无法解决这个问题.我将不胜感激任何帮助.

BTW.我发现ActionBar的深色是由工具栏引起的app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar",但不知道如何解决这个问题,因为正确的工具栏外观需要这个属性.

工具栏颜色正确 黑暗行动吧

android android-appcompat android-actionbar material-design android-5.0-lollipop

38
推荐指数
1
解决办法
2万
查看次数

透明状态栏无法使用windowTranslucentNavigation ="false"

我正在开发一个Activity我需要使导航栏不透明的地方,状态栏在运行5.0+(API 21+)的设备上是透明的.我正在使用的样式如下,以及我的问题的解释.

AppTheme 扩展 Theme.AppCompat.Light.NoActionBar

<item name="android:statusBarColor">@color/transparent</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/welbe_red_transparent</item>
Run Code Online (Sandbox Code Playgroud)

FullscreenTheme 扩展 AppTheme

<item name="android:windowNoTitle">true</item>
<item name="android:statusBarColor">@color/transparent</item>
<item name="android:windowTranslucentNavigation">true</item>
Run Code Online (Sandbox Code Playgroud)

这使得应用程序看起来像这样

机器人:windowTranslucentNavigation =

如果我删除android:windowTranslucentNavigation样式,或将其设置falseFullscreen,它修复了导航栏的问题.问题是状态栏变为完全白色而不是保持透明并显示其背后的内容.

机器人:windowTranslucentNavigation =

我已尝试fitsSystemWindow="true"在我的布局中使用,但它没有解决问题.任何人都知道为什么会这样吗?

android android-appcompat android-layout android-styles

38
推荐指数
2
解决办法
4万
查看次数

错误:方法调用不明确.AppCompactActivity和Activity中的findViewById(int)

我在使用Android Studio 3.0 RC1初始化工具栏时收到错误:"模糊方法调用".我已经使用AppCompatActivity扩展了我的Activity并使用'compileSdkVersion 26'编译我的应用程序.附上错误的屏幕截图.在此输入图像描述

android android-appcompat android-studio appcompatactivity android-studio-3.0

38
推荐指数
3
解决办法
2万
查看次数

动态更改BottomSheetBehavior的高度

我正在使用BottomSheetBehavior谷歌最近发布的AppCompat v23.2.我的底部工作表的高度取决于底部工作表内显示的内容(类似于Google在Google地图应用中所做的工作).

它最初加载的数据工作正常,但我的应用程序更改了运行时显示的内容,当发生这种情况时,底部工作表保留在它的旧高度,这会导致底部未使用的空间或视图切割.

有任何方法来通知所述底部片材的布局重新计算用于扩展状态(当的高度的高度ViewGroup被设置为MATCH_HEIGHT)或任何方法来手动设置所需的高度?


编辑:我也尝试手动调用invalidate()ViewGroup它和家长,但没有成功.

android android-appcompat

37
推荐指数
2
解决办法
3万
查看次数

在Recyclerview中嵌入广告

我正在尝试将我的应用程序从listview升级到recyclerview.当我使用listview时,我使用本教程在listview中嵌入了广告.

我无法在recyclerview中添加它.有关如何在Recyclerview中完成此操作的任何观点?

目前在我的列表视图中,加载广告的代码如下:

    if ((position % k) == 0) {
      if (convertView instanceof AdView) {
        return convertView;
      } else {
        // Create a new AdView
        AdView adView = new AdView(activity, AdSize.BANNER,
                                   ADMOB_ID);

        float density = activity.getResources().getDisplayMetrics().density;
        int height = Math.round(AdSize.BANNER.getHeight() * density);
        AbsListView.LayoutParams params = new AbsListView.LayoutParams(
            AbsListView.LayoutParams.FILL_PARENT,
            height);
        adView.setLayoutParams(params);

        adView.loadAd(new AdRequest());
        return adView;
      }
    } else {
      return delegate.getView(position - (int) Math.ceil(position / k) - 1,
          convertView, parent);
    }
Run Code Online (Sandbox Code Playgroud)

它应该是这样的:

ListView项目

更新:从谷歌引用此视频,它给出了完整的解释

android listview android-appcompat admob android-recyclerview

36
推荐指数
3
解决办法
4万
查看次数

材料设计:导航抽屉宽度

根据Material Design规范,Nav Drawer在移动设备上的宽度必须是

side nav width =屏幕宽度 - app bar height

我们如何在android上实现这个?

我有两个部分解决方案.首先是hacky方式:在包含活动中我把这段代码:

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB_MR1) {
    final Display display = getWindowManager().getDefaultDisplay();
    final Point size = new Point();
    display.getSize(size);

    final ViewGroup.LayoutParams params = mDrawerFragment.getView().getLayoutParams();
    params.width = size.x - getResources().getDimensionPixelSize(
        R.dimen.abc_action_bar_default_height_material
    );
    mFragmentUserList.getView().setLayoutParams(params);
}

然而,这导致第二个布局周期并且在姜饼中不起作用:它不是最佳的.

第二种解决方案是在片段和drawerLayout之间添加一个Space.然而,它取代了阴影和用户可以按下以返回主应用程序的位置.当按下"hamburguer"图标时,它也会崩溃.也不是最佳的.

有没有更好的解决方案,最好是涉及样式和xml?

android android-appcompat material-design

35
推荐指数
3
解决办法
4万
查看次数

视频播放器使用appcompat-v7在Android中点亮模式

我正在将一个代码库从本机Holo(Theme.Holo等)移植到appcompat-v7(Theme.AppCompat等等).如果您不想阅读详细信息,最后一部分包含tl; dr.


问题

一切正常,但我有问题复制一个很容易使用旧ActionBar的行为.我有一个视频播放器,在风景中我希望它的行为像YouTube:隐藏(动画)播放器控件,应用栏和状态栏.在用户交互时,UI控件应该保持"熄灯"模式并返回正常状态.如果用户没有触摸屏幕X秒,则计时器将返回到熄灯模式.使用ActionBar的相同代码不能用Toolbar.

所以,我使用的是:

  • 不透明的状态栏
  • setSystemUiVisibility() 使用以下组合之一:
    • 默认: 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
  • minSdkVersion 是16岁
  • 显示和隐藏的动作条我简称show()hide()
  • 在app子栏上实现相同的行为我子类化Toolbar并添加了一个show()和一个hide()方法来做同样的事情(首先简单地使用setVisibility(),然后使用动画 - 得到相同的结果)

LAYOUT_STABLE做这样的appbar最终会在状态栏的背后,当然是(因为这意味着fitSystemWindows,由于appbar是视图层次结构中的普通视图和喜欢的动作条中,它是由该标志的影响是不是在装修这就是我在屏幕上看到的:

状态栏后面的App栏

不能立即清楚工具栏界限是什么,因为应用栏在黑暗中是黑暗的,但是你可以看到标题被剪切并且"未对齐".这是因为工具栏的大小正确但位于状态栏后面.我的主要问题是,此时没有公共API来获取状态栏高度,矩形或其他任何内容以垂直移动我的应用栏以显示状态栏下方.

测试主要是在LPX13D上的N5上进行的(在撰写本文时最新的Lollipop公共版本),但在Android 4.4上也可以看到相同的情况.


黑客的解决方案

也就是说,经过相当长的一段时间和一些失败的尝试使其以一种不太苛刻的方式工作(包括我自己试图将其置于装饰中的相当绝望的尝试),我采取了这种令人讨厌的方式使其工作:

  1. onResume:
    a.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE)即使我通常不这样做也会打电话(风景)
    b.注册一个OnPreDrawListener

  2. OnPreDrawListener:
    a.使用View root = getRootView().findViewById(R.id.my_root)
    b 获取根视图.获取根视图高度:( int rootTop = getAbsoluteViewTop(root) …

android media-player android-appcompat android-support-library android-toolbar

35
推荐指数
1
解决办法
913
查看次数