Dynamiclaly将控件放入Android中的通知中

时间:2015-10-05 14:18:39

标签: android

正如本主题所做的那样:Putting controls inside a notification in Android

我想做同样的事情,但我想动态地创建我的观点。我无法访问任何我无法写入relativelayout / imageview xml的xml。

我是通过Firefox for Android上的JNI这样做的,所以我还在学习很多东西。此时我只能从Java移植到JNI。我想知道你是否可以请我告诉我如何做与原始主题相同的动态。这是原始主题的作用:

public class MainActivity extends Activity {

    @SuppressWarnings("deprecation")
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        int icon = R.drawable.ic_launcher;
        long when = System.currentTimeMillis();
        Notification notification = new Notification(icon, "Custom Notification", when);

        NotificationManager mNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

        RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.custom_notification);
        contentView.setImageViewResource(R.id.image, R.drawable.ic_launcher);
        contentView.setTextViewText(R.id.title, "Custom notification");
        contentView.setTextViewText(R.id.text, "This is a custom layout");
        notification.contentView = contentView;

        Intent notificationIntent = new Intent(this, MainActivity.class);
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
        notification.contentIntent = contentIntent;

        notification.flags |= Notification.FLAG_NO_CLEAR; //Do not clear the notification
        notification.defaults |= Notification.DEFAULT_LIGHTS; // LED
        notification.defaults |= Notification.DEFAULT_VIBRATE; //Vibration
        notification.defaults |= Notification.DEFAULT_SOUND; // Sound

        mNotificationManager.notify(1, notification);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

1 个答案:

答案 0 :(得分:0)

  

我想做同样的事情,但我想动态地创建我的观点。我无法访问任何xml,我无法编写relativelayout / imageview xml。

严格来说,你不能做你想做的事。 RemoteViews仅通过布局资源文件定义其中的小部件和容器。 Java方法允许您操作这些窗口小部件和容器的选择属性,但是如果没有布局资源文件,则无法添加窗口小部件和容器。

欢迎您为不同类型的小部件和容器创建“存根”布局资源文件,然后使用RemoteViews构造函数为这些小部件和容器创建RemoteViews,然后使用{{1} } addViews()将这些拼接成任意结构。这将是麻烦的,但仍然可能无法实现您想要的目标。