小编Mil*_*ilo的帖子

可靠地获取状态栏的高度以解决KitKat半透明导航问题

我正在尝试新的Android 4.4半透明导航栏,并希望使用FLAG_TRANSLUCENT_NAVIGATION标志将导航栏设置为半透明.我只希望导航栏(背面,主页按钮等)是半透明的 - 我希望屏幕顶部的状态栏显示为正常而不是半透明.

我用来实现这个目的的代码是:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    Window w = getWindow();
    w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是Android现在认为Activity是全屏的并且将布局放在导航栏后面(这是正确的),不幸的是它也将布局放在状态栏后面(一个问题).

一个hacky修复此问题的方法是将填充应用于布局父视图的顶部,但是我需要确定状态栏的高度来执行此操作.

任何人都可以建议我如何获得状态栏高度,它不像我想象的那样微不足道,或者建议一个正确的解决方案.

谢谢

android view android-layout android-4.4-kitkat

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

在app中使用Roboto字体,最低API级别为14

我有一个最低API级别为14的应用程序.我认为所有兼容设备都应该安装Roboto字体作为默认设置吗?如果我将textView字体设置为Roboto或Roboto Light,它似乎默认为普通的sans字体.

有没有办法使用Roboto而不包括Roboto字体作为资产?

android typeface

19
推荐指数
1
解决办法
3万
查看次数

随机抛出android.os.TransactionTooLargeException

我看到来自我的一个实时应用程序的相当多的错误报告,导致这个异常:

java.lang.RuntimeException: Adding window failed
   at android.view.ViewRootImpl.setView(ViewRootImpl.java:513)
   at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259)
   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
   at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2852)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250)
   at android.app.ActivityThread.access$800(ActivityThread.java:135)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:136)
   at android.app.ActivityThread.main(ActivityThread.java:5017)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:515)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
   at dalvik.system.NativeStart.main(NativeStart.java)

Caused by: android.os.TransactionTooLargeException
   at android.os.BinderProxy.transact(Binder.java)
   at android.view.IWindowSession$Stub$Proxy.addToDisplay(IWindowSession.java:683)
   at android.view.ViewRootImpl.setView(ViewRootImpl.java:502)
   at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259)
   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
   at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2852)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250)
   at android.app.ActivityThread.access$800(ActivityThread.java:135)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:136)
   at android.app.ActivityThread.main(ActivityThread.java:5017)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:515)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
   at dalvik.system.NativeStart.main(NativeStart.java)
Run Code Online (Sandbox Code Playgroud)

从我在这里读到的内容来看,我认为原因可能会太大,Parcelable我会增加Intent额外的内容.我正在将一个Object从一个Activity传递给另一个Activity,在该Objects writeToParcel …

android parcelable

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

'IllegalStateException:在活动重启后调用'getSupportFragmentManager()'时,活动已被销毁

我有一个父片段活动,其ViewPager包含一个子ViewPager.子ViewPager包含每个页面的片段.我使用回调接口在这些子页面片段和顶级父片段活动之间进行通信,例如

public interface Callbacks {
    public void onItemSelected(Link link);
}
Run Code Online (Sandbox Code Playgroud)

在父片段活动中,我会监听onItemSelected事件,例如

@Override
public void onItemSelected(Link link) {
    Bundle argumentsFront = new Bundle();
    argumentsFront.putParcelable(FragmentComments.ARG_ITEM_ID, link);
    fragmentComments = new FragmentComments();
    fragmentComments.setArguments(argumentsFront);
    getSupportFragmentManager().beginTransaction().replace(R.id.post_container, fragmentComments).commitAllowingStateLoss();
}
Run Code Online (Sandbox Code Playgroud)

现在,当应用程序首次启动时,此功能正常.

如果您转动设备以更改方向,则活动将重新启动.所有片段在我使用时重新初始化setRetainInstance(true);(我不在子ViewPager的页面片段中调用setRetainInstance(true),因为它不受支持).但是,如果我单击子ViewPager的片段中的列表项,我会得到以下异常:

FATAL EXCEPTION: main
java.lang.IllegalStateException: Activity has been destroyed
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1342)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
at android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:578)
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么会这样?

谢谢

android illegalstateexception android-fragments android-viewpager

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

在平板电脑上将活动显示为叠加窗口

如何在平板电脑上呈现活动作为叠加窗口?这方面的一个例子是新的Google+应用,如下所示:

在此输入图像描述

重要的是,我希望ActionBar成为窗口的一部分,并且下面的Activity将变暗,如屏幕截图所示.

谢谢

android tablet android-activity

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

半透明导航,无布局显示在状态栏下方

我正在使用新的Android 4.4 FLAG_TRANSLUCENT_NAVIGATION标志来打开半透明屏幕底部的导航栏(背面,主页按钮等).这工作正常,但副作用是我的Activity的布局现在显示在屏幕顶部的状态栏下方(即使我没有将状态栏设置为半透明).我想避免一个hacky修复,即应用填充到布局的顶部.

有没有办法将导航设置为半透明,同时确保状态栏正常显示并且不允许在其下方显示布局?

我使用的代码如下:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    Window w = getWindow();
    w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
Run Code Online (Sandbox Code Playgroud)

谢谢

android android-layout

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

ListView OnScrollListener不会在ViewPager中调用

我有一个FragmentPagerAdapter创建它的子页面(ListFragments如下):

@Override
public Fragment getItem(int position) {
    return FragmentChildPage.newInstance();
}
Run Code Online (Sandbox Code Playgroud)

我给ViewPager一个OffscreenPageLimit1.孩子ListFragments有一个习惯ScrollListener.

我遇到的问题是自定义滚动侦听器仅适用于ListFragments在浏览ViewPager时创建的子窗口OffscreenPageLimit,即子页面> 2.

更令人困惑的是,如果我滚动几页然后返回到第一页,则滚动侦听器现在可以工作.

这里发生了什么?这似乎ViewPager干扰了一些子页面OnScrollListener.

谢谢

android onscroll android-viewpager android-listfragment

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