2015-04-03 17:00:52 forlong401 阅读数 3669
  • 快速入门Android开发 视频 教程 android studio

    这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 Android Studio基础使用方法 Android Studio创建项目 项目运行到模拟器 项目运行到真实手机 Android中常用控件 排查开发中的错误 Android中请求网络 常用Android开发命令 快速入门Gradle构建系统 项目实战:看美图 常用Android Studio使用技巧 项目签名打包 如何上架市场

    21670 人正在学习 去看看 任苹蜻

http://androidren.com/index.php?qa=312&qa_1=android%E8%87%AA%E5%AE%9A%E4%B9%89%E9%80%9A%E7%9F%A5%E6%A0%8F%E7%9A%84%E9%AB%98%E5%BA%A6%E6%98%AF%E5%A4%9A%E5%B0%91%EF%BC%9F


普通的高度是64dp,扩展的最大是256dp。

原始文档如下:

The height available for a custom notification layout depends on the notification view. Normal view layouts are limited to 64 dp, and expanded view layouts are limited to 256 dp.

http://developer.android.com/guide/topics/ui/notifiers/notifications.html


2016-01-20 15:44:41 omayyouhappy 阅读数 4064
  • 快速入门Android开发 视频 教程 android studio

    这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 Android Studio基础使用方法 Android Studio创建项目 项目运行到模拟器 项目运行到真实手机 Android中常用控件 排查开发中的错误 Android中请求网络 常用Android开发命令 快速入门Gradle构建系统 项目实战:看美图 常用Android Studio使用技巧 项目签名打包 如何上架市场

    21670 人正在学习 去看看 任苹蜻

   感谢这位csdn的前辈的提示: 

            该功能需要4.1以后的版本才支持,用Notification.build类来创建一个新notificaiton,如果仅仅显示网易那样的样式,可以定义一个Notification.BigTextView的style,然后调用build类的setSytle方法,就能够实现了,但是如果需要设置更复杂的样式,就不能够使用setSytle,需要用bigContentView,bigContentView = remoteView这样就能够显示更大的通知栏了,你需要导入android-support-v4.jar包,才能够使用Notification.Builder,参考了下面的文章:http://stackoverflow.com/questions/21237495/create-custom-big-notifications,还是stackoverflow网站比较牛,能够真的解决问题


    这个链接网页如下:http://stackoverflow.com/questions/21237495/create-custom-big-notifications



I wanted to create a Notification including some controls. Since text and controls are small with default notification size (64dp), i wanted have it larger than default size.
It is possible to create larger notifications, and I think it is possible to have a custom layout, too, but I don't know how.

To be more specific, the following screenshot shows the notification from spotify (image take fromhere): Spotify notification

As you can see, the size is bigger than default. Further, it has some kind of ImageButtons without text - if you use Notification.Builder.addAction(), you may provide an icon but also need to provide a CharSequence as a description - if you leave the description empty, there will still be space reserved for the text and if you pass null, it will crash.

Can anybody tell me how to create a big notification with a custom layout?

Thanks

shareimprove this question
 
 
possible duplicate of Create custom notification, android – phemt.latd Jan 20 '14 at 15:19
 
@phemt.latd The answers given in that question deal with custom notification default size or default notification big size. I could not manage to have a custom notification big size with the given answers. – MalaKa Jan 20 '14 at 15:46 

2 Answers

up vote20down voteaccepted

So after excessive google usage, I found this tutorial explaining how to use custom big layouts. The trick is not to use setStyle() but manually set the bigContentView field of the Notification after building it. Seems a bit hacky, but this is what I finally came up with:

notification_layout_big.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="100dp" <!-- This is where I manually define the height -->
    android:orientation="horizontal" >

    <!-- some more elements.. --> 
</LinearLayout>

Building Notification in code:

Notification foregroundNote;

RemoteViews bigView = new RemoteViews(getApplicationContext().getPackageName(),
    R.layout.notification_layout_big);

// bigView.setOnClickPendingIntent() etc..

Notification.Builder mNotifyBuilder = new Notification.Builder(this);
foregroundNote = mNotifyBuilder.setContentTitle("some string")
        .setContentText("Slide down on note to expand")
        .setSmallIcon(R.drawable.ic_stat_notify_white)
        .setLargeIcon(bigIcon)
        .build();

foregroundNote.bigContentView = bigView;

// now show notification..
NotificationManager mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotifyManager.notify(1, foregroundNote);

Edit
As noted by chx101, this only works for API >= 16. I did not mention it in this answer, yet it was mentioned in the given linked tutorial above:

Expanded notifications were first introduced in Android 4.1 JellyBean [API 16].

shareimprove this answer
 
 
thank you.but if another notification come ,this notification's view back to the default view ,can you say why?– MHP Jan 2 '15 at 6:40 
 
This is because Android OS wants to ensure all Notifications stay visible. You can increase the priority of the Notification using the setPriority-method. But you can never be sure, that your Notification is enlarged. Additionally, the user can always enlarge the Notification manually by sliding down on the Notification. – MalaKa Jan 5 '15 at 22:56 
 
Doens't work for API level 8. Field requires API level 16 (current min is 8): android.app.Notification#bigContentView – chx101 Oct 27 '15 at 0:17

2016-10-25 15:13:45 qq_32319999 阅读数 4474
  • 快速入门Android开发 视频 教程 android studio

    这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 Android Studio基础使用方法 Android Studio创建项目 项目运行到模拟器 项目运行到真实手机 Android中常用控件 排查开发中的错误 Android中请求网络 常用Android开发命令 快速入门Gradle构建系统 项目实战:看美图 常用Android Studio使用技巧 项目签名打包 如何上架市场

    21670 人正在学习 去看看 任苹蜻
这是使用环信自定义通知栏的,其他情况可能需要修改
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
RemoteViews myNotificationView = new RemoteViews(context.getPackageName(),
        R.layout.app_notify_layout);
myNotificationView.setTextViewText(R.id.tv_title, msg.title);
myNotificationView.setTextViewText(R.id.tv_content, msg.text);
myNotificationView.setTextViewText(R.id.tv_content, FormatDateUtils.FormatLongTime("HH:mm",new Date().getTime()/1000+""));
builder.setCustomBigContentView(myNotificationView)//这个是重要方法setCustomBigContentView
        .setSmallIcon(R.mipmap.yun_speak)
        .setTicker(msg.ticker)
        .setAutoCancel(true);

return builder.getNotification();
2017-11-07 09:50:13 zengsidou 阅读数 527
  • 快速入门Android开发 视频 教程 android studio

    这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 Android Studio基础使用方法 Android Studio创建项目 项目运行到模拟器 项目运行到真实手机 Android中常用控件 排查开发中的错误 Android中请求网络 常用Android开发命令 快速入门Gradle构建系统 项目实战:看美图 常用Android Studio使用技巧 项目签名打包 如何上架市场

    21670 人正在学习 去看看 任苹蜻

这是在我研究相对布局和绝对布局的时候顺带发现的。



我们都知道,普通的Android界面如图所示,从上到下依次是statusbar,actionbar,内容,虚拟按键。要获取状态栏高度,一种比较常规的做法是:

    private int getStatusBarHeight(Context context) {
        int result = 0;
        int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            result = context.getResources().getDimensionPixelSize(resourceId);
        }
        return result;
    }

这样可以获取到状态栏的高度。

下面介绍一种有趣却又行之有效的方法。

1、新建一个Activity,什么都不用加。



2、设置根布局的id,我这里设置的root。

    private int getStatusBarHeight() {
        int loc[] = new int[2];
        mRoot.getLocationOnScreen(loc);
        if (getActionBar() != null) {
            return loc[1] - getActionBar().getHeight();
        } else if (getSupportActionBar() != null) {
            return loc[1] - getSupportActionBar().getHeight();
        }
        return 0;
    }


道理很简单,首先获取根布局相对于屏幕的y坐标,然后减去actionbar的高度,即是statusbar的高度了。

不过要注意的一点是,这个方法需要在onWindowFocusChanged之后调用,否则视图尚未加载完毕,得到的结果是0。


2018-01-10 16:52:05 wzh048503 阅读数 3063
  • 快速入门Android开发 视频 教程 android studio

    这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 Android Studio基础使用方法 Android Studio创建项目 项目运行到模拟器 项目运行到真实手机 Android中常用控件 排查开发中的错误 Android中请求网络 常用Android开发命令 快速入门Gradle构建系统 项目实战:看美图 常用Android Studio使用技巧 项目签名打包 如何上架市场

    21670 人正在学习 去看看 任苹蜻

做车机的开发项目修改系统代码最多的就是SystemUI和Settings这两个应用,一般都是定制的,现在下面我来说说我项目中关于SystemUI的修改是怎么实现的,平台是Android5.1,另外,一下涉及到的平台和目录都是基于本人项目的,可看后面一截目录参考去修改SystemUI即可


S700平台修改系统状态栏里的图标布局宽度是在Z:\ACCME8702-RT313\S700\android\device\actions\s700_cb6\overlay\frameworks\base\packages\SystemUI\res\layout\目录下去修改,然后要到源码SystemUI目录下Z:\ACCME8702-RT313\S700\android\frameworks\base\packages\SystemUI去编译,然后替换掉system/priv-app/SystemUI/目录下的apk文件;修改系统状态栏的高度和状态栏里图标的高度是在Z:\ACCME8702-RT313\S700\android\device\actions\s700_cb6\overlay\frameworks\base\core\res\res\values\dimens.xml文件中去修改,然后状态栏的高度是要去源码frameworks\base\core\res\目录下去编译得到framework-res.apk文件去替换掉/system/framework/framework-res.apk,但是编译之前,得去Android\目录下去加载命令source build/envronment,然后lunch 44文件就能改掉状态栏的高度和图标的高度;另外状态栏布局文件里引用的图片资源是放在Z:\ACCME8702-RT313\S700\android\frameworks\base\packages\SystemUI\res\drawable-sw600dp-hdpi\目录下的

以上目录带有overlay的目录是我项目特有的东西,你可参考后面一截目录去找对应的资源也能找到然后修改

-------------------------------------------//------------------------------------

S700平台修改系统状态栏里的图标(adb调试图标和SD卡图标)大小需要修改两个地方的属性,否则只修改R.dimen.status_bar_icon_size增大,尺寸反而就会变小,所以也要调R.dimen.status_bar_icon_drawing_size的大小,R.dimen.status_bar_icon_size是在frameworks\base\core\res\res\values\dimens.xml中,但是我们应该在Z:\ACCME8702-RT313\S700\android\device\actions\s700_cb6\overlay\frameworks\base\core\res\res\values\dimens.xml中,R.dimen.status_bar_icon_drawing_size是在frameworks\base\packages\SystemUI\res\values\dimens.xml中,因为overlay\目录下的dimens.xml文件中并没有定义status_bar_icon_drawing_size这个属性;修改了这里的图标大小那么弹出来的通知里的图标也会变

以上目录带有overlay的目录是我项目特有的东西,你可参考后面一截目录去找对应的资源也能找到然后修改


------------------------------------------//----------------------------------------------------------

S700平台修改弹出来的通知里的文字大小:将Z:\ACCME8702-RT313\S700\android\device\actions\s700_cb6
\overlay\frameworks\base\packages\SystemUI\res\values\目录下的styles.xml文件中TextAppearance.StatusBar.PhoneTicker样式里
的textsize修改即可,Z:\ACCME8702-RT313\S700\android\frameworks\base\packages\SystemUI去编译,然后替换掉system/priv-
app/SystemUI/目录下的apk文件,因为我之前这个目录下并没有这个styles.xml文件,所以直接将小威(本人同事)给的styles.xml文件拷贝进去了



没有更多推荐了,返回首页