小编roc*_*k3r的帖子

视频播放器使用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
查看次数

ListView仅在附加HierarchyViewer时出现

我有一个扩展ListView的自定义.列表以这样的布局定义:AdapterCursorAdapter

<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center">

        <ProgressBar
            android:id="@android:id/empty"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@style/ProgressBar.Itasa.Indeterminate.Large"/>

    <net.italiansubs.droitasa.widget.HookedListView
            android:id="@android:id/list"
            style="@style/NewsList"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="gone"/>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

HookedListView如下所示:

package net.italiansubs.droitasa.widget;

import android.content.Context;
import android.os.Handler;
import android.util.AttributeSet;
import android.widget.ListView;
import net.italiansubs.droitasa.util.OnLayoutChangedListener;

/**
 * An extended ListView that has an hook for getting layout changes.
 *
 * @author Sebastiano Poggi, Francesco Pontillo
 */
public class HookedListView extends ListView {

    private OnLayoutChangedListener mLayoutListener;
    private final Handler mHandler;
    private boolean mFirstLayout = true;

    public HookedListView(Context context) { …
Run Code Online (Sandbox Code Playgroud)

android android-ui hierarchyviewer

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