android 自定义视图中能不能定义BroadcastReceiver

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 自定义视图中能不能定义BroadcastReceiver相关的知识,希望对你有一定的参考价值。

我觉得没有这个必要,因为添加广播监听器还要考虑如何移除,如果处理不当容易抛出异常。而且特别需要注意的是,视图本身就不应该是做类似控制层的工作,所以建议编写几个可调用的方法来通知视图变化,或者使用观察者设计模式。 参考技术A BroadcastReceiver,广播接收器,一般是接收发出的广播,启动一个自定义的界面或者执行后续业务。 参考技术B 对于这个,我觉得 提问者很欠K 参考技术C 自定义视图关广播什么事?追问

就是希望把广播中的数据作为参数进行自定义视图的创建

Android:如何根据大小创建自定义布局

【中文标题】Android:如何根据大小创建自定义布局【英文标题】:Android: How to create custom layout dependent on size 【发布时间】:2013-06-08 10:10:10 【问题描述】:

我需要一个建议...我想创建自定义视图组,该视图组将根据该视图的大小具有不同的布局。

一个例子:

两个视图:

视图 A:高度至少为 50dp 的子视图 视图 B:我的自定义视图,它扩展了垂直方向的 LinearLayout,高度为 200 dp

我想要什么:

    当我将 2 个视图 A 插入到视图 B 中时: 我想将这两个视图 A 拉伸到 100 dp。所以 B 将是具有 2 个孩子的常见线性布局。 当我将 5 个视图 A 插入到视图 B 中时: 我想将滚动视图添加到 B 中。所有 5 个视图 A 都将在此滚动视图中,它们的高度为 50 dp。

通常,我在构造函数中将视图添加到自定义视图。但我不能在这里做,因为我不知道构造函数中 B 的高度。我只知道 A 的高度。所以请告诉我应该使用哪种回调方法...当 B 的高度已知时,我可以根据此高度添加所有子视图。

或者如果您知道任何其他方法...请告诉我...

非常感谢!

【问题讨论】:

如果 B 的高度应该是 const,那么只需检查孩子 A 的共同高度。如果聚合高度会更多,那么 200(或 4+ 视图) - 在 B 内创建一个 ScrollView 并将您的 A 视图推入其中,然后以编程方式将 ScrollView 的布局参数设置为 match_parent。否则(如果 A 仅查看 1-3 个)- 将它们 layout_weight 参数设置为 1。 这正是我想要的。但我不知道什么时候会知道值 200,即覆盖哪种方法。 B 的高度不是 const 高度,而是取决于屏幕尺寸。正如我所写:构造函数中不知道此值...感谢您的回复... 【参考方案1】:

您应该考虑将所有视图放入滚动视图中的垂直线性布局,或者更好:使用单个列表视图而不是布局和滚动视图。

原因是它会在需要时自动处理滚动,具体取决于屏幕上的可用空间和视图的大小。

【讨论】:

不幸的是,这不是我们想要的行为。我想在不需要滚动视图时拉伸子视图......即当内部视图的聚合大小较小时,我将使用权重,当大小较大时,我将使用滚动视图。而且我不知道如何使用列表视图或简单的滚动视图。顺便说一句。布局会比我的例子复杂一点。这将是一个包含多列的表格布局。这就是我不想使用列表视图的原因。 但 android 支持多种屏幕分辨率和密度。您应该考虑如何处理不同的配置,以便使用所需的布局。即使使用权重,您也需要检查视图是否有足够的空间来显示其内容。你会怎么做? 确定我知道...这就是我想使用这种自定义布局的原因。当屏幕/分辨率足够大或只是将设备 dpi 更改为较低值时,内容很小,并且当它不是全屏时看起来不太好(它只占据屏幕的一部分)......所以我想使用重量拉伸它。另一方面,当屏幕很小时,我必须使用滚动视图。我将如何区分这两种情况?这就是我在这里要问的:) 我想通过 getHeight() 方法获取高度,并根据这个值选择布局。但是我不知道在哪个View方法中。 好的,我明白了。要获取每个视图的高度,您可以使用此方法:***.com/a/10923514/878126【参考方案2】:

您可以使用此代码获取主布局的实际高度。 然后,您可以在 if-else 或 switch-case 块中使用该高度来检查所需的条件。

public int getLayoutSize() 
// Get the layout id
    final LinearLayout root = (LinearLayout) findViewById(R.id.mainroot);
    final AtomicInteger layoutHeight = new AtomicInteger();

    root.post(new Runnable()  
    public void run()  
        Rect rect = new Rect(); 
        Window win = getWindow();  // Get the Window
                win.getDecorView().getWindowVisibleDisplayFrame(rect);

                // Get the height of Status Bar
                int statusBarHeight = rect.top;

                // Get the height occupied by the decoration contents 
                int contentViewTop = win.findViewById(Window.ID_ANDROID_CONTENT).getTop();

                // Calculate titleBarHeight by deducting statusBarHeight from contentViewTop  
                int titleBarHeight = contentViewTop - statusBarHeight; 
                Log.i("MY", "titleHeight = " + titleBarHeight + " statusHeight = " + statusBarHeight + " contentViewTop = " + contentViewTop); 

                // By now we got the height of titleBar & statusBar
                // Now lets get the screen size
                DisplayMetrics metrics = new DisplayMetrics();
                getWindowManager().getDefaultDisplay().getMetrics(metrics);   
                int screenHeight = metrics.heightPixels;
                int screenWidth = metrics.widthPixels;
                Log.i("MY", "Actual Screen Height = " + screenHeight + " Width = " + screenWidth);   

                // Now calculate the height that our layout can be set
                // If you know that your application doesn't have statusBar added, then don't add here also. Same applies to application bar also 
                layoutHeight.set(screenHeight - (titleBarHeight + statusBarHeight));
                Log.i("MY", "Layout Height = " + layoutHeight);   

            // Lastly, set the height of the layout       
            FrameLayout.LayoutParams rootParams = (FrameLayout.LayoutParams)root.getLayoutParams();
            rootParams.height = layoutHeight.get();
            root.setLayoutParams(rootParams);
        
    );

return layoutHeight.get();

【讨论】:

以上是关于android 自定义视图中能不能定义BroadcastReceiver的主要内容,如果未能解决你的问题,请参考以下文章

phpcms中能新建自定义标签吗?

需要帮助在Android中使用多个按钮自定义视图

Android - 在运行时更改自定义标题视图

Android:使用文本和自定义视图切换

在 Android 中膨胀视图后,自定义视图子项为空

Android:创建自定义容器视图